In meinem Programm verwende ich den CSharpCodeProvider, um eine andere Anwendung aus einer Quelldatei zu kompilieren, der Code, den ich verwende, ist der folgende:
public static bool CompileExecutable(String sourceName)
{
FileInfo sourceFile = new FileInfo(sourceName);
CodeDomProvider provider = null;
bool compileOk = false;
// Select the code provider based on the input file extension.
if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".CS")
provider = CodeDomProvider.CreateProvider("CSharp");
else if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".VB")
provider = CodeDomProvider.CreateProvider("VisualBasic");
else
{
Console.WriteLine("Source file must have a .cs or .vb extension");
}
if (provider != null)
{
// Format the executable file name.
// Build the output assembly path using the current directory
// and <source>_cs.exe or <source>_vb.exe.
String exeName = String.Format(@"{0}\{1}.exe",
System.Environment.CurrentDirectory,
sourceFile.Name.Replace(".", "_"));
CompilerParameters cp = new CompilerParameters();
// Generate an executable instead of a class library.
cp.GenerateExecutable = true;
// Specify the assembly file name to generate.
cp.OutputAssembly = exeName;
// Save the assembly as a physical file.
cp.GenerateInMemory = false;
// Set whether to treat all warnings as errors.
cp.TreatWarningsAsErrors = false;
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");
cp.ReferencedAssemblies.Add("mscorlib.dll");
cp.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
// Invoke compilation of the source file.
CompilerResults cr = provider.CompileAssemblyFromFile(cp,
sourceName);
if (cr.Errors.Count > 0)
{
// Display compilation errors.
Console.WriteLine("Errors building {0} into {1}",
sourceName, cr.PathToAssembly);
foreach (CompilerError ce in cr.Errors)
{
Console.WriteLine(" {0}", ce.ToString());
Console.WriteLine();
}
}
else
{
// Display a successful compilation message.
Console.WriteLine("Source {0} built into {1} successfully.", sourceName, cr.PathToAssembly);
}
// Return the results of the compilation.
if (cr.Errors.Count > 0)
compileOk = false;
else
compileOk = true;
}
return compileOk;
}
Ich lege eine Datei mit dem Namen (source.cs), die den Quellcode des Programms enthält, das ich kompilieren möchte, in dasselbe Verzeichnis wie meine Anwendung, und rufe die Funktion aus meiner Anwendung auf
CompileExecutable("source.cs");
Dann wird der Quellcode kompiliert und im gleichen Verzeichnis wie meine Anwendung gespeichert.
Was ich versuche, jetzt zu tun ist, um eine Option hinzuzufügen, die mich ein benutzerdefiniertes Symbol für den kompilierten Quellcode auswählen lassen, so dass die ausführbare Datei das Symbol ich wählte haben wird, aber ich weiß nicht, wie kann ich die ausführbare Datei Symbol vor dem Kompilieren zuweisen.
Jede Hilfe auf, wie kann ich ein benutzerdefiniertes Symbol für die Ausgabe ausführbare Datei vor dem Kompilieren setzen?