如何在脚本中添加和使用导入
本文关键字:导入 添加 脚本 | 更新日期: 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);