2016-07-09 14 views
0

Im folgenden Code, den ich brauche, um meine Montage hinzuzufügen, so dass das Skript Nutzung ihrer Klassen machen:Wie fügt man einen Import in ein Skript ein?

var options = ScriptOptions.Default.AddImports("MyAssembly"); 

var code = "using MyAssembly.MyNamespace;" + 
      "public class TestClass {" + 
      " public int HelloWorld(int num) {" + 
      " return 5 + num;" + 
      " }" + 
      "}"; 

aber die folgende Ausnahme ausgelöst:

Ausnahme geworfen: ‚Microsoft.CodeAnalysis .Scripting.CompilationErrorException 'in Microsoft.CodeAnalysis.Scripting.dll Microsoft.CodeAnalysis.Scripting.CompilationErrorException: Fehler CS0246: Der Typen- oder Namespacename' MyAssembly 'konnte nicht gefunden werden (fehlt eine using-Direktive oder eine Assemblyreferenz?)

Ich habe die Assembly auch im Host-Projekt hinzugefügt. Ich habe auch die Beispiele aus here versucht, aber sie haben auch nicht funktioniert.

Wie lautet die korrekte Syntax zum Hinzufügen einer Assembly?

Antwort

2

Der folgende Ausschnitt funktioniert der Trick:

var path = Assembly.GetAssembly(typeof(MyAssembly.SomeClass)).Location; 
var asm = AssemblyMetadata.CreateFromFile(path).GetReference(); 

var options = ScriptOptions.Default.AddReferences(asm); 

auch Gegenstand dieses funktioniert und verwendet Linq die geladene Assembly zu erhalten:

var asm = AppDomain.CurrentDomain.GetAssemblies() 
    .SingleOrDefault(assembly => assembly.GetName().Name == "MyAssembly"); 

Dies ist jedoch die geladenen Baugruppen wird. Wenn die benötigte Assembly nicht bereits geladen ist, rufen Sie sie unter Assembly.GetExecutingAssembly().GetReferencedAssemblies() ab.