我正在尝试在我的项目中使用Roslyn脚本API。我已经创建了测试控制台应用程序,并试图使用InteractiveAssemblyLoader
解决参考
有一个代码:
var scriptText = @"
using System;
using Test.Namespace.From.Referenced.Dll;
var y = new TestType();
var x = y.GetStringDescription();
return x;
";
using (var interactiveLoader = new InteractiveAssemblyLoader())
{
interactiveLoader.RegisterDependency(typeof(TestType).Assembly);
var script = CSharpScript.Create<string>(
scriptText,
globalsType: typeof(Globals),
options: ScriptOptions.Default,
assemblyLoader: interactiveLoader
);
script.Compile();
// exception raised here
var result = await script.RunAsync(globals);
}
此代码失败,但异常
'无法找到类型或命名空间名称'TEST'(您是否缺少using指令或程序集引用?)System.Exception {Microsoft.CodeAnalysis.Scripting.CompilationErrorException}'
Windows控制台应用程序,.NET 4.7.1。
我做错了什么?
更新。因为在评论中我们发现你试图引用内存汇编,试试这种方法:
byte[] assemblyBytes = DownloadAssembly();
using (var interactiveLoader = new InteractiveAssemblyLoader()) {
interactiveLoader.RegisterDependency(Assembly.Load(assemblyBytes));
var script = CSharpScript.Create<string>(
scriptText,
globalsType: typeof(Globals),
options: ScriptOptions.Default.AddReferences(MetadataReference.CreateFromStream(new MemoryStream(assemblyBytes))),
assemblyLoader: interactiveLoader
);
script.Compile();
var result = await script.RunAsync(globals);
}