在下面的代码中,我需要添加我的程序集,以便脚本可以使用它的类:
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中的例子,但他们也没有做过。
添加程序集的正确语法是什么?
答案 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);