gpt4 book ai didi

c# - 如何强制 CSharpCodeProvider 针对特定目标框架进行编译?

转载 作者:行者123 更新时间:2023-12-02 01:21:28 32 4
gpt4 key购买 nike

我有一个解决方案,其中包含 c# 项目、一些 netstandard 2.0 和其他 .net4.7。启动项目当然是net47

在某一时刻,该项目使用 CodeDom 创建代码,并使用 CSharpCodeProvider 对其进行编译。问题是,在某些机器上,它尝试编译 .netstandard 的程序集,但失败了。失败是预料之中的:生成的程序集引用 EF,它仅适用于完整的 .net 框架

如何强制 CSharpCodeProvider 针对 .net47 进行编译?

public bool GenerateAssembly(
CodeDomBusinessCode compileUnit
, string fileName
, string assembliesPath
, out IEnumerable<string> errors)
{
var provider = new CSharpCodeProvider();
var parameters = new CompilerParameters
{
GenerateExecutable = false,
OutputAssembly = fileName,
GenerateInMemory = false
};
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("System.Runtime.dll");
parameters.ReferencedAssemblies.Add("System.Core.dll");
parameters.ReferencedAssemblies.Add("System.ComponentModel.Composition.dll");
parameters.ReferencedAssemblies.Add(Path.Combine(assembliesPath, "EntityFramework.dll"));
parameters.ReferencedAssemblies.Add("System.ComponentModel.DataAnnotations.dll");
parameters.ReferencedAssemblies.Add(Path.Combine(assembliesPath, "GlobalE.Server.Contracts.dll"));

var results = provider.CompileAssemblyFromDom(parameters, compileUnit.Code);
if (results.Errors.Count > 0)
{
errors = results.Errors.OfType<CompilerError>().Select(x => x.ToString());
return false;
}
errors = null;
return true;
}

错误:

error CS0012: The type 'System.IDisposable' is defined in an assembly
that is not referenced. You must add a reference to assembly
'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

更新:如果我将所有项目更改为 net47 (这样解决方案中就没有 netstandard 项目),错误就会消失,但我想在 上保留尽可能多的项目>netstandard 尽可能。

最佳答案

根据您的错误,您应该添加“netstandard.dll”作为引用,并且此注释可能会导致在.net 4.7中“System.IDisposable”位于“mscorlib.dll”中,而在.netstatndard中位于“netstandard.dll”。

关于c# - 如何强制 CSharpCodeProvider 针对特定目标框架进行编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47219778/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com