Leggere in inglese

Condividi tramite


CompilerParameters Classe

Definizione

Rappresenta i parametri utilizzati per richiamare un compilatore.

C#
public class CompilerParameters
C#
[System.Runtime.InteropServices.ComVisible(false)]
public class CompilerParameters
C#
[System.Serializable]
public class CompilerParameters
Ereditarietà
CompilerParameters
Derivato
Attributi

Esempio

Nell'esempio seguente viene compilato un grafico di origine CodeDOM per un semplice programma Hello World. L'origine viene quindi salvata in un file, compilata in un eseguibile ed eseguita. Il CompileCode metodo illustra come usare la classe per specificare varie impostazioni e opzioni del CompilerParameters compilatore.

C#
using System;
using System.Globalization;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections;
using System.ComponentModel;
using System.IO;
using System.Diagnostics;

namespace CompilerParametersExample
{
    class CompileClass
    {
        // Build a Hello World program graph using System.CodeDom types.
        public static CodeCompileUnit BuildHelloWorldGraph()
        {
            // Create a new CodeCompileUnit to contain the program graph
            CodeCompileUnit compileUnit = new CodeCompileUnit();

            // Declare a new namespace called Samples.
            CodeNamespace samples = new CodeNamespace("Samples");
            // Add the new namespace to the compile unit.
            compileUnit.Namespaces.Add( samples );

            // Add the new namespace import for the System namespace.
            samples.Imports.Add( new CodeNamespaceImport("System") );

            // Declare a new type called Class1.
            CodeTypeDeclaration class1 = new CodeTypeDeclaration("Class1");
            // Add the new type to the namespace's type collection.
            samples.Types.Add(class1);

            // Declare a new code entry point method.
            CodeEntryPointMethod start = new CodeEntryPointMethod();

            // Create a type reference for the System.Console class.
            CodeTypeReferenceExpression csSystemConsoleType = new CodeTypeReferenceExpression("System.Console");

            // Build a Console.WriteLine statement.
            CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(
                csSystemConsoleType, "WriteLine",
                new CodePrimitiveExpression("Hello World!") );

            // Add the WriteLine call to the statement collection.
            start.Statements.Add(cs1);

            // Build another Console.WriteLine statement.
            CodeMethodInvokeExpression cs2 = new CodeMethodInvokeExpression(
                csSystemConsoleType, "WriteLine",
                new CodePrimitiveExpression("Press the Enter key to continue.") );
            // Add the WriteLine call to the statement collection.
            start.Statements.Add(cs2);

            // Build a call to System.Console.ReadLine.
            CodeMethodInvokeExpression csReadLine = new CodeMethodInvokeExpression(
                csSystemConsoleType, "ReadLine");

            // Add the ReadLine statement.
            start.Statements.Add(csReadLine);

            // Add the code entry point method to the Members
            // collection of the type.
            class1.Members.Add( start );

            return compileUnit;
        }

        public static String GenerateCode(CodeDomProvider provider,
                                          CodeCompileUnit compileunit)
        {
            // Build the source file name with the language
            // extension (vb, cs, js).
            String sourceFile;
            if (provider.FileExtension[0] == '.')
            {
                sourceFile = "HelloWorld" + provider.FileExtension;
            }
            else
            {
                sourceFile = "HelloWorld." + provider.FileExtension;
            }

            // Create a TextWriter to a StreamWriter to an output file.
            IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), "    ");
            // Generate source code using the code provider.
            provider.GenerateCodeFromCompileUnit(compileunit, tw, new CodeGeneratorOptions());
            // Close the output file.
            tw.Close();

            return sourceFile;
        }

        public static bool CompileCode(CodeDomProvider provider,
            String sourceFile,
            String exeFile)
        {

            CompilerParameters cp = new CompilerParameters();

            // Generate an executable instead of
            // a class library.
            cp.GenerateExecutable = true;

            // Set the assembly file name to generate.
            cp.OutputAssembly = exeFile;

            // Generate debug information.
            cp.IncludeDebugInformation = true;

            // Add an assembly reference.
            cp.ReferencedAssemblies.Add( "System.dll" );

            // Save the assembly as a physical file.
            cp.GenerateInMemory = false;

            // Set the level at which the compiler
            // should start displaying warnings.
            cp.WarningLevel = 3;

            // Set whether to treat all warnings as errors.
            cp.TreatWarningsAsErrors = false;

            // Set compiler argument to optimize output.
            cp.CompilerOptions = "/optimize";

            // Set a temporary files collection.
            // The TempFileCollection stores the temporary files
            // generated during a build in the current directory,
            // and does not delete them after compilation.
            cp.TempFiles = new TempFileCollection(".", true);

            if (provider.Supports(GeneratorSupport.EntryPointMethod))
            {
                // Specify the class that contains
                // the main method of the executable.
                cp.MainClass = "Samples.Class1";
            }

            if (Directory.Exists("Resources"))
            {
                if (provider.Supports(GeneratorSupport.Resources))
                {
                    // Set the embedded resource file of the assembly.
                    // This is useful for culture-neutral resources,
                    // or default (fallback) resources.
                    cp.EmbeddedResources.Add("Resources\\Default.resources");

                    // Set the linked resource reference files of the assembly.
                    // These resources are included in separate assembly files,
                    // typically localized for a specific language and culture.
                    cp.LinkedResources.Add("Resources\\nb-no.resources");
                }
            }

            // Invoke compilation.
            CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceFile);

            if(cr.Errors.Count > 0)
            {
                // Display compilation errors.
                Console.WriteLine("Errors building {0} into {1}",
                    sourceFile, cr.PathToAssembly);
                foreach(CompilerError ce in cr.Errors)
                {
                    Console.WriteLine("  {0}", ce.ToString());
                    Console.WriteLine();
                }
            }
            else
            {
                Console.WriteLine("Source {0} built into {1} successfully.",
                    sourceFile, cr.PathToAssembly);
                Console.WriteLine("{0} temporary files created during the compilation.",
                    cp.TempFiles.Count.ToString());
            }

            // Return the results of compilation.
            if (cr.Errors.Count > 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        [STAThread]
        static void Main()
        {
            CodeDomProvider provider = null;
            String exeName = "HelloWorld.exe";

            Console.WriteLine("Enter the source language for Hello World (cs, vb, etc):");
            String inputLang = Console.ReadLine();
            Console.WriteLine();

            if (CodeDomProvider.IsDefinedLanguage(inputLang))
            {
                provider = CodeDomProvider.CreateProvider(inputLang);
            }

            if (provider == null)
            {
                Console.WriteLine("There is no CodeDomProvider for the input language.");
            }
            else
            {
                CodeCompileUnit helloWorld = BuildHelloWorldGraph();

                String sourceFile = GenerateCode(provider, helloWorld);

                Console.WriteLine("HelloWorld source code generated.");

                if (CompileCode(provider, sourceFile, exeName ))
                {
                    Console.WriteLine("Starting HelloWorld executable.");
                    Process.Start(exeName);
                }
            }
        }
    }
}

Commenti

Un CompilerParameters oggetto rappresenta le impostazioni e le opzioni per un'interfaccia ICodeCompiler .

Se si compila un programma eseguibile, è necessario impostare la GenerateExecutable proprietà su true. Quando l'oggetto GenerateExecutable è impostato su false, il compilatore genererà una libreria di classi. Per impostazione predefinita, viene inizializzato un nuovo CompilerParameters oggetto con la relativa GenerateExecutable proprietà impostata su false. Se si compila un file eseguibile da un grafo CodeDOM, è necessario definire un oggetto CodeEntryPointMethod nel grafo. Se sono presenti più punti di ingresso del codice, è possibile indicare la classe che definisce il punto di ingresso da usare impostando il nome della classe sulla MainClass proprietà.

È possibile specificare un nome file per l'assembly di output nella OutputAssembly proprietà . In caso contrario, verrà usato un nome di file di output predefinito. Per includere le informazioni di debug in un assembly generato, impostare la IncludeDebugInformation proprietà su true. Se il progetto fa riferimento a qualsiasi assembly, è necessario specificare i nomi degli assembly come elementi in un StringCollection set sulla ReferencedAssemblies proprietà dell'oggetto CompilerParameters usato quando si richiama la compilazione.

È possibile compilare un assembly scritto in memoria anziché su disco impostando la GenerateInMemory proprietà su true. Quando un assembly viene generato nella memoria, il codice può ottenere un riferimento all'assembly generato dalla proprietà CompiledAssembly di un oggetto CompilerResults. Se un assembly viene scritto su disco, è possibile ottenere il percorso dell'assembly PathToAssembly generato dalla proprietà di un CompilerResultsoggetto .

Per specificare un livello di avviso per l'interruzione della compilazione, impostare la proprietà WarningLevel su un intero che rappresenti il livello di avviso in corrispondenza del quale verrà interrotta la compilazione. È anche possibile configurare il compilatore per arrestare la compilazione se vengono rilevati avvisi impostando la TreatWarningsAsErrors proprietà su true.

Per specificare una stringa di argomenti della riga di comando personalizzati da usare quando si richiama il processo di compilazione, impostare la stringa nella proprietà CompilerOptions. Se è necessario un token di sicurezza Win32 per richiamare il processo di compilazione, specificare il token nella proprietà UserToken. Per includere i file di risorse .NET Framework nell'assembly compilato, aggiungere i nomi dei file di risorse alla EmbeddedResources proprietà. Per fare riferimento alle risorse di .NET Framework in un altro assembly, aggiungere i nomi dei file di risorse alla LinkedResources proprietà. Per includere un file di risorse Win32 nell'assembly compilato, specificare il nome del file di risorse Win32 nella Win32Resource proprietà.

Nota

Questa classe contiene una richiesta di collegamento e una richiesta di ereditarietà a livello di classe che si applica a tutti i membri. Viene SecurityException generato quando il chiamante immediato o la classe derivata non dispone dell'autorizzazione di attendibilità completa. Per informazioni dettagliate sulle richieste di sicurezza, vedere Collegare richieste e richieste di ereditarietà.

Costruttori

CompilerParameters()

Inizializza una nuova istanza della classe CompilerParameters.

CompilerParameters(String[])

Consente di inizializzare una nuova istanza della classe CompilerParameterscon i nomi degli assembly specificati.

CompilerParameters(String[], String)

Consente di inizializzare una nuova istanza della classe CompilerParameters con i nomi degli assembly e il nome del file di output specificati.

CompilerParameters(String[], String, Boolean)

Inizializza una nuova istanza della classe CompilerParameters utilizzando i nomi degli assembly e il nome del file di output specificati nonché un valore che indica se includere informazioni di debug.

Proprietà

CompilerOptions

Ottiene o imposta gli argomenti opzionali della riga di comando da utilizzare quando viene invocato il compilatore.

CoreAssemblyFileName

Ottiene o imposta il nome dell'assembly principale o standard contenente i tipi di base come Object, String o Int32.

EmbeddedResources

Ottiene i file di risorse .NET da includere durante la compilazione dell'output dell'assembly.

Evidence
Obsoleti.

Specifica un oggetto di evidenza che rappresenta le autorizzazioni dei criteri di sicurezza da concedere all'assembly compilato.

GenerateExecutable

Ottiene o imposta un valore che indica se deve essere generato un eseguibile.

GenerateInMemory

Ottiene o imposta un valore che indica se deve essere generato output in memoria.

IncludeDebugInformation

Ottiene o imposta un valore che indica se includere le informazioni di debug nell'eseguibile compilato.

LinkedResources

Ottiene i file di risorse .NET a cui si fa riferimento nell'origine corrente.

MainClass

Ottiene o imposta il nome della classe principale.

OutputAssembly

Ottiene o imposta il nome dell'assembly di output.

ReferencedAssemblies

Ottiene gli assembly cui fa riferimento il progetto corrente.

TempFiles

Ottiene o imposta l'insieme che contiene i file temporanei.

TreatWarningsAsErrors

Ottiene o imposta un valore che indica se gli avvisi devono essere considerati come errori.

UserToken

Ottiene o imposta il token utente da utilizzare durante la creazione del processo di compilazione.

WarningLevel

Ottiene o imposta il livello di avviso in corrispondenza del quale il compilatore interrompe la compilazione.

Win32Resource

Ottiene o imposta il nome di un file di risorse Win32 da collegare nell'assembly compilato.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Prodotto Versioni
.NET 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9