Я генерирую Greeter.dll с использованием компилятора Roslyn. Моя проблема возникает при загрузке DLL-файла.Загрузка сборки, сгенерированной компилятором Roslyn
Вот код:
сообщениеusing System;
using Roslyn.Compilers;
using Roslyn.Compilers.CSharp;
using System.IO;
using System.Reflection;
using System.Linq;
namespace LoadingAClass
{
class Program
{
static void Main(string[] args)
{
var syntaxTree = SyntaxTree.ParseCompilationUnit(@"
class Greeter
{
static void Greet()
{
Console.WriteLine(""Hello, World"");
}
}");
var compilation = Compilation.Create("Greeter.dll",
syntaxTrees: new[] { syntaxTree },
references: new[] {
new AssemblyFileReference(typeof(object).Assembly.Location),
new AssemblyFileReference(typeof(Enumerable).Assembly.Location),
});
Assembly assembly;
using (var file = new FileStream("Greeter.dll", FileMode.Create))
{
EmitResult result = compilation.Emit(file);
}
assembly = Assembly.LoadFile(Path.Combine(Directory.GetCurrentDirectory(), @"Greeter.dll"));
Type type = assembly.GetType("Greeter");
var obj = Activator.CreateInstance(type);
type.InvokeMember("Greet",
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
obj,
null);
Console.WriteLine("<ENTER> to continue");
Console.ReadLine();
}
}
// Thanks, http://blogs.msdn.com/b/csharpfaq/archive/2011/11/23/using-the-roslyn-symbol-api.aspx
}
Ошибка возникает на линии assembly = Assembly.LoadFile(Path.Combine(Directory.GetCurrentDirectory(), @"Greeter.dll"));
и читает
Im Modul Würde Эйн Assemblymanifest erwartet. (Ausnahme фон HRESULT: 0x80131018)
что примерно переводится
манифеста сборки, как ожидается, в модуле.
Кто-нибудь знает, что мне не хватает здесь?
у вас есть несколько ошибок в коде. Видимо, вы уже разобрались в них (но для них не было PDB). В следующий раз посмотрите на 'result.Diagnostics', чтобы выяснить, в чем проблема. – svick