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
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?
By default it is 2.0, irrespective of which VS 2010 target version (2.0, 3.0 or 3.5, 4.0) is specified.
In order to target the 4.0 framework, provide an IDictionary instance in the provider's constructor as shown below
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);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.