我正在使用CSharpCodeProvider编译程序集。当用户使用.NET框架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版本进行编译吗?
发布于 2017-11-14 16:06:52
专门针对.NET 4.0框架形状的方法是执行MSBuild在默认情况下解析.NET 4.0项目中的程序集引用时所做的操作,以Windows SDK (由VS安装)部署的引用程序集为目标。安装到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0的引用程序集表示.NET 4.0的框架二进制文件的公共外围应用程序-引用这些二进制文件将使您的应用程序面向仅安装了.NET 4.0的系统上可用的.NET 4.5的子集。
发布于 2017-11-13 22:22:39
我认为您必须使用/nostdlib选项链接另一个mscorlib.dll。
List<String> references = new List<string>();
String mscorlib = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Windows),
@"Microsoft.NET\Framework\v4.0.30319\mscorlib.dll"
);
references.Add(mscorlib);
// Add other references...
var provider = new CSharpCodeProvider(new Dictionary<String,String> {{"CompilerVersion", "v4.0"}});
var parameters = new CompilerParameters(references.ToArray(), "MyApp.exe");
parameters.GenerateExecutable = true;
parameters.CompilerOptions = "/nostdlib";
var results = provider.CompileAssemblyFromSource(parameters,
@"using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(""CLR Version: "" + Environment.Version);
}
}");https://stackoverflow.com/questions/47266434
复制相似问题