InteractiveAssemblyLoader无法在控制台应用程序中运行

问题描述 投票:1回答:1

我正在尝试在我的项目中使用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。

我做错了什么?

c# roslyn roslyn-code-analysis
1个回答
0
投票

更新。因为在评论中我们发现你试图引用内存汇编,试试这种方法:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.