我使用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版本进行编译?
答案 0 :(得分:1)
专门针对.NET 4.0 Framework形状的方法是执行MSBuild在默认情况下解析.NET 4.0项目中的程序集引用时所执行的操作,目标是由Windows SDK(由VS安装)部署的引用程序集。安装到C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0的引用程序集表示.NET 4.0的Framework二进制文件的公共表面区域 - 引用这些二进制文件将使您的应用程序以子集为目标.NET 4.5在安装了.NET 4.0的系统上可用。
答案 1 :(得分:0)
我认为您必须使用/ 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);
}
}");