【问题标题】:Getting error in running dynamically compiled C# code运行动态编译的 C# 代码时出错
【发布时间】:2020-01-23 23:18:41
【问题描述】:

我在 .Net Core 3.1 项目中动态编译了一个 c# 代码。我将结果保存为.dll 文件并尝试在另一个项目中使用它。在目标项目中,当我将其添加为参考并尝试使用时,出现此错误

the type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Private.CoreLib, Version=4.0.0.0

我尝试将代码编译为netstandard 2.1。在_references 的编译过程中也有对System.Private.CoreLib 的引用,但版本比4.0.0.0 更新。

_references = new List<MetadataReference>();
_references.Add(MetadataReference.CreateFromFile(typeof(object).Assembly.Location));
_references.Add(MetadataReference.CreateFromFile(Assembly.Load("netstandard, Version=2.1").Location));
 _references.Add(MetadataReference.CreateFromFile(typeof(Newtonsoft.Json.JsonConvert).GetTypeInfo().Assembly.Location));

我该如何解决这个问题?

【问题讨论】:

    标签: c# .net-core roslyn roslyn-code-analysis


    【解决方案1】:

    您需要对 netstandard 库的引用,该库在技术上未定义任何类型,以匹配您的 typeof(object)

        var netstandard = AppDomain.CurrentDomain.GetAssemblies().Where(a => a.GetName().Name == "netstandard").Single()
    

    【讨论】:

    • 谢谢。但我的参考文献中有它_references.Add(MetadataReference.CreateFromFile(Assembly.Load("netstandard, Version=2.1").Location));
    • 您在问题中说的是 3.1,所以您的 typeof(object).Assembly 将不兼容。
    • 我说.Net Core 3.1和相关的.Net Standard2.1
    • 仍然,因为您隐含地引用了在您的进程中加载​​的 typeof(object).Assembly。有意义的是,您还应该参考您当前也在使用的兼容的 netstandard 程序集。避免任何可能不正确的幻数。
    • 你是对的。我试过没有版本号,但仍然得到同样的错误。
    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 2011-01-22
    • 2023-03-09
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多