【发布时间】:2017-11-13 14:18:17
【问题描述】:
我正在使用 CSharpCodeProvider 来编译程序集。当用户使用 .NET Framework 4.0 以上版本的功能和类时,我想得到错误。
例如,如果在安装了 4.5 版本 .NET 框架的机器上运行此代码,CSharpCodeProvider 将使用 .NET 4.5 API(例如 System.Reflection.ReflectionContext)成功编译
var options = new Dictionary<string, string> { { "CompilerVersion", "v4.0" } };
var cs = new CSharpCodeProvider(options);
var compilerParams = new CompilerParameters();
var r = cs.CompileAssemblyFromSource(
compilerParams,
"namespace Sample {public class SampleClass{private System.Reflection.ReflectionContext a;}}");
有人知道如何指定使用唯一的 4.0 版本进行编译吗?
【问题讨论】:
-
.NET 4.0 不再受支持。最早支持的 .NET 版本是 4.5.2。 4+ 版本是二进制替换,因此您可能已经在更高版本上运行
-
换句话说,如果该代码生成 4.5 功能,那是因为 .NET 4.0 已被更新版本取代
-
System.CodeDom 始终以已安装的 .NET 4.x 版本为目标,参考程序集来自 c:\windows\microsoft.net。所以没有选项可以选择不同的版本号,您必须通过将您自己的程序定位到足够高来确保所需的版本可用。或者,我猜,在这种情况下,通过强制用户降级。他不会那样做的。
-
如果您对特定语言版本感兴趣而不是 .Net 版本,可以尝试将
/langversion传递给CompilerParamters。 -
在 Visual Studio 中创建项目时,可以选择 .NET 框架版本,因此无法构建具有 4.5 功能的 4.0 .net 项目。有什么想法他们是如何做到的吗?