Laden einer assembly erzeugt durch die Roslyn-compiler

Ich bin generieren Greeter.dll Verwendung des Roslyn-compiler. Mein problem tritt auf, versuchen zu laden, die DLL-Datei.

Hier der code:

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
}

Tritt die Fehlermeldung auf die Zeile assembly = Assembly.LoadFile(Path.Combine(Directory.GetCurrentDirectory(), @"Greeter.dll")); und liest

Im Modul wurde ein Assemblymanifest erwartet. (Ausnahme von HRESULT: 0x80131018)

Was übersetzt in etwa

Einem Assemblymanifest erwartet wurde, in das Modul.

Weiß jemand, was fehlt mir hier?

  • Sie haben mehrere Fehler in Ihrem code. Anscheinend ist Sie schon, dachte Sie, aber benötigen eine PDB-war nicht unter Ihnen). Das nächste mal, betrachten result.Diagnostics um herauszufinden, was das problem ist.
InformationsquelleAutor lowerkey | 2012-05-25
Schreibe einen Kommentar