3 Stimmen

Wie kann man ein benutzerdefiniertes Symbol für eine Anwendung zuweisen, die aus einer Quelldatei kompiliert wurde?

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?

7voto

M.Babcock Punkte 18351

Aufbauend auf Brian's Antwort können Sie das benutzerdefinierte Symbol festlegen, indem Sie die /win32icon Compiler-Option:

CompilerParameters parameters = new CompilerParameters();
parameters.CompilerOptions = @"/win32icon:C:\full\path\to\icon.ico";

3voto

Brian Punkte 1763

Überprüfen Sie die /win32icon Compiler-Option.

Zusammenfassung:

Die Option /win32icon fügt eine .ico-Datei in die Ausgabedatei ein, die der Ausgabedatei das gewünschte Aussehen im Windows Explorer verleiht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X