[英]How to set the target framework to v2.0 or v3.5 instead of 4.0 when compiling a program from a source file?
I have a small application which compiles a source file into executable. 我有一个小型应用程序,它将源文件编译为可执行文件。 The problem is that this application require Netframework 4 to work, and therfore, the compiled one also require the Net Framework 4.0
问题在于此应用程序需要Netframework 4才能工作,因此,已编译的应用程序也需要Net Framework 4.0
How can i set to the function below the target framework to be used in the compiled application ? 如何设置要在已编译应用程序中使用的目标框架下的功能?
public static bool CompileExecutable(String sourceName)
{
//Source file that you are compliling
FileInfo sourceFile = new FileInfo(sourceName);
//Create a C# code provider
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
//Create a bool variable for to to use after the complie proccess to see if there are any erros
bool compileOk = false;
//Make a name for the exe
String exeName = String.Format(@"{0}\{1}.exe",
System.Environment.CurrentDirectory, sourceFile.Name.Replace(".", "_"));
//Creates a variable, cp, to set the complier parameters
CompilerParameters cp = new CompilerParameters();
//You can generate a dll or a exe file, in this case we'll make an exe so we set this to true
cp.GenerateExecutable = true;
//Set the name
cp.OutputAssembly = exeName;
//Save the exe as a physical file
cp.GenerateInMemory = false;
//Set the compliere to not treat warranings as erros
cp.TreatWarningsAsErrors = false;
//Make it compile
CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceName);
//if there are more then 0 erros...
if (cr.Errors.Count > 0)
{
//A message box shows the erros that occured
MessageBox.Show("Errors building {0} into {1}" +
sourceName + cr.PathToAssembly);
//for each error that occured in the code make a separete message box
foreach (CompilerError ce in cr.Errors)
{
MessageBox.Show(" {0}" + ce.ToString());
}
}
//if there are no erros...
else
{
//a message box shows compliere results and a success message
MessageBox.Show("Source {0} built into {1} successfully." +
sourceName + cr.PathToAssembly);
}
//if there are erros...
if (cr.Errors.Count > 0)
{
//the bool variable that we made in the beggining is set to flase so the functions returns a false
compileOk = false;
}
//if there are no erros...
else
{
//we are returning a true (success)
compileOk = true;
}
//return the result
return compileOk;
}
Any help would be appreciated ! 任何帮助,将不胜感激 ! Thankyou in advance
先感谢您
If your using a CodeDomProvider to compile code yourself programmatically in VS 2008, what version of the Framework is targeted? 如果您使用CodeDomProvider在VS 2008中以编程方式自己编译代码,那么目标是哪个版本的Framework?
By default it is 2.0, irrespective of which VS 2010 target version (2.0, 3.0 or 3.5, 4.0) is specified. 默认情况下,它是2.0,无论指定哪个VS 2010目标版本(2.0、3.0或3.5、4.0)。
In order to target the 4.0 framework, provide an IDictionary instance in the provider's constructor as shown below 为了以4.0框架为目标,请在提供程序的构造函数中提供一个IDictionary实例,如下所示
You could pass options to the compiler using the following constructor: 您可以使用以下构造函数将选项传递给编译器:
var providerOptions = new Dictionary<string, string>();
providerOptions.Add("CompilerVersion", "v4.0");
var compiler = new CSharpCodeProvider(providerOptions);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.