小编And*_*rew的帖子

如何在 Roslyn 动态编译代码中引用另一个 DLL

我正在编写一个动态编译和执行 C# 代码的项目。问题是有时我希望代码调用另一个 DLL(为了这个示例,我将其称为“ANOTHER.DLL”)。它在 .Net 4.5 中工作正常,但在 .Net Core 中失败,我不明白为什么。任何帮助表示赞赏!

代码编译成功,但执行方法时出错。错误是:

FileNotFoundException:无法加载文件或程序集“ANOTHER,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”。该系统找不到指定的文件。

ANOTHER.dll 位于同一/bin/debug文件夹中,并且绝对可以访问(代码可以编译!)

我注意到我可以通过向项目添加对 ANOTHER.DLL 的引用来解决该问题,但这违背了动态编译的目的。

我在 .Net Core 2.0 - 3.1 中尝试过这个

ANOTHER.DLL 是 .Net Standard 2.0(但与 .Net Standard 2.1 或 .Net Framework 的结果相同)。还尝试了各种版本的Microsoft.CodeAnalysis包,都给了我同样的错误。

var eval = new Evaluator();

string code = @"
    using System;
    namespace RoslynCompileSample
    {
        public class Test
        {
            public string Hello{
            get {
                //return ""Hello"";
                
                var c = new ANOTHER.Class1();
                return c.HelloWorld();
                }
            }
        }
    }";

SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(code); …
Run Code Online (Sandbox Code Playgroud)

.net c# .net-core

4
推荐指数
1
解决办法
1953
查看次数

标签 统计

.net ×1

.net-core ×1

c# ×1