运行动态编译的C#代码时出错

运行动态编译的C#代码时出错,c#,.net-core,roslyn,roslyn-code-analysis,C#,.net Core,Roslyn,Roslyn Code Analysis,我在.NETCore3.1项目中动态编译了一个c代码。我将结果保存为.dll文件,并尝试在另一个项目中使用它。在目标项目中,当我将其添加为引用并尝试使用时,会出现此错误 类型“Object”是在未引用的程序集中定义的。您必须添加对程序集'System.Private.CoreLib,Version=4.0.0.0的引用 _references = new List<MetadataReference>(); _references.Add(MetadataReference.Crea

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

类型“Object”是在未引用的程序集中定义的。您必须添加对程序集'System.Private.CoreLib,Version=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));

我试图将代码编译为
netstandard2.1
。在
\u 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));

\u references=新列表();
_Add(MetadataReference.CreateFromFile(typeof(object.Assembly.Location));
_Add(MetadataReference.CreateFromFile(Assembly.Load(“netstandard,Version=2.1”).Location));
_Add(MetadataReference.CreateFromFile(typeof(Newtonsoft.Json.JsonConvert).GetTypeInfo().Assembly.Location));

如何解决此问题?

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

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

谢谢。但是我在我的references
\u references.Add(MetadataReference.CreateFromFile(Assembly.Load(“netstandard,Version=2.1”).Location))中有它
您在问题中说的是3.1,因此您的typeof(object).Assembly不兼容。我说的是
.Net Core 3.1
,而相关的
.Net标准仍然是
2.1
,因为您隐式引用的是流程中加载的typeof(object).Assembly。您还应该参考当前正在使用的兼容netstandard程序集,这是有道理的。避免任何可能不正确的幻数。你是对的。我在没有版本号的情况下尝试过,但仍然得到相同的错误。