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

本文关键字:导入 添加 脚本 | 更新日期: 2023-09-27 17:56:09

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

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.代码分析.脚本.编译错误异常:错误 CS0246:找不到类型或命名空间名称"MyAssembly"(是否缺少 using 指令或程序集引用?

我也在宿主项目中添加了程序集。我也尝试了这里的例子,但它们也没有用。

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

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

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

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() 获取它们。

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

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