如何在脚本中添加和使用导入?

时间:2016-07-09 02:47:58

标签: c# roslyn roslyn-code-analysis

在下面的代码中,我需要添加我的程序集,以便脚本可以使用它的类:

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

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

但抛出以下异常:

  

抛出异常:' Microsoft.CodeAnalysis.Scripting.CompilationErrorException'在Microsoft.CodeAnalysis.Scripting.dll中   Microsoft.CodeAnalysis.Scripting.CompilationErrorException:错误CS0246:类型或命名空间名称' MyAssembly'找不到(你错过了使用指令或汇编引用吗?)

我也在主机项目中添加了程序集。我也试过了here中的例子,但他们也没有做过。

添加程序集的正确语法是什么?

2 个答案:

答案 0 :(得分:2)

以下代码段可以解决问题:

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

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

以下内容也适用,它使用Linq来获取加载的程序集:

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

然而,这会获得加载的程序集。如果尚未加载您需要的程序集,请使用Assembly.GetExecutingAssembly().GetReferencedAssemblies()

答案 1 :(得分:1)

有一种更简单的方法可以实现这一目标:

ScriptOptions.Default.AddReference(typeof(MyNamespace.MyAssembly).Assembly);