CSharpCodeProvider Klasse

Definition

Bietet Zugriff auf Instanzen des C#-Codegenerators und Codecompilers.

public ref class CSharpCodeProvider : System::CodeDom::Compiler::CodeDomProvider
public class CSharpCodeProvider : System.CodeDom.Compiler.CodeDomProvider
type CSharpCodeProvider = class
    inherit CodeDomProvider
Public Class CSharpCodeProvider
Inherits CodeDomProvider
Vererbung

Beispiele

Im folgenden Beispiel wird entweder der C#- oder Visual Basic-Codeanbieter verwendet, um eine Quelldatei zu kompilieren. Im Beispiel wird die Eingabedateierweiterung überprüft und die entsprechende CSharpCodeProvider oder VBCodeProvider für die Kompilierung verwendet. Die Eingabedatei wird in einer ausführbaren Datei kompiliert, und alle Kompilierungsfehler werden in der Konsole angezeigt.

Important

Die methoden CompileAssemblyFrom* werden für .NET Core und .NET 5+ nicht unterstützt. In diesem Beispiel wird nur .NET Framework ausgeführt.

using System;
using System.IO;
using System.Globalization;
using System.CodeDom.Compiler;
using System.Text;
using Microsoft.CSharp;
using Microsoft.VisualBasic;

namespace CodeProviders
{
    class CompileSample
    {
        [STAThread]
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                //  First parameter is the source file name.
                if (File.Exists(args[0]))
                {
                    CompileExecutable(args[0]);
                }
                else
                {
                    Console.WriteLine("Input source file not found - {0}",
                        args[0]);
                }
            }
            else
            {
                Console.WriteLine("Input source file not specified on command line!");
            }
        }

        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;

                // 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;
        }
    }
}
Imports System.IO
Imports System.Globalization
Imports System.CodeDom.Compiler
Imports System.Text
Imports Microsoft.CSharp

Namespace CodeProviders
    Class CompileSample
        <STAThread()>  _
        Public Shared Sub Main(args() As String)

            If args.Length > 0
                ' First parameter is the source file name.
                If File.Exists(args(0))
                    CompileExecutable(args(0))
                Else 
                    Console.WriteLine("Input source file not found - {0}", _
                        args(0))
                End If
            
            Else
                Console.WriteLine("Input source file not specified on command line!")
            End If
        End Sub

        Public Shared Function CompileExecutable(sourceName As String) As Boolean
            Dim sourceFile As FileInfo = New FileInfo(sourceName)
            Dim provider As CodeDomProvider = Nothing
            Dim compileOk As Boolean = False

            ' Select the code provider based on the input file extension.
            If sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".CS"

                provider = CodeDomProvider.CreateProvider("CSharp")

            ElseIf sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".VB"

                provider = CodeDomProvider.CreateProvider("VisualBasic")

            Else
                Console.WriteLine("Source file must have a .cs or .vb extension")
            End If

            If Not provider Is Nothing

                ' Format the executable file name.
                ' Build the output assembly path using the current directory
                ' and <source>_cs.exe or <source>_vb.exe.

                Dim exeName As String = String.Format("{0}\{1}.exe", _
                    System.Environment.CurrentDirectory, _
                    sourceFile.Name.Replace(".", "_"))

                Dim cp As CompilerParameters = 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
 
                ' Invoke compilation of the source file.
                Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, _
                    sourceName)
    
                If cr.Errors.Count > 0
                    ' Display compilation errors.
                    Console.WriteLine("Errors building {0} into {1}", _
                        sourceName, cr.PathToAssembly)

                    Dim ce As CompilerError
                    For Each ce In cr.Errors
                        Console.WriteLine("  {0}", ce.ToString())
                        Console.WriteLine()
                    Next ce
                Else
                    ' Display a successful compilation message.
                    Console.WriteLine("Source {0} built into {1} successfully.", _
                        sourceName, cr.PathToAssembly)
                End If
              
                ' Return the results of the compilation.
                If cr.Errors.Count > 0
                    compileOk = False
                Else 
                    compileOk = True
                End If
            End If
            return compileOk

        End Function
    End Class
End Namespace

Hinweise

Diese Klasse stellt Methoden bereit, die zum Abrufen von Instanzen von C# ICodeGenerator und ICodeCompiler Implementierungen verwendet werden können.

Note

Diese Klasse enthält einen Link-Bedarf und einen Vererbungsbedarf auf Klassenebene, der für alle Mitglieder gilt. Ein SecurityException wird ausgelöst, wenn entweder der unmittelbare Aufrufer oder die abgeleitete Klasse nicht über die Berechtigung zur vollen Vertrauenswürdigkeit verfügt.

Konstruktoren

Name Beschreibung
CSharpCodeProvider()

Initialisiert eine neue Instanz der CSharpCodeProvider-Klasse.

CSharpCodeProvider(IDictionary<String,String>)

Initialisiert eine neue Instanz der Klasse mithilfe der CSharpCodeProvider angegebenen Anbieteroptionen.

Eigenschaften

Name Beschreibung
CanRaiseEvents

Ruft einen Wert ab, der angibt, ob die Komponente ein Ereignis auslösen kann.

(Geerbt von Component)
Container

Ruft das, das IContainer die Component.

(Geerbt von Component)
DesignMode

Ruft einen Wert ab, der angibt, ob sich der Component Entwurfsmodus derzeit befindet.

(Geerbt von Component)
Events

Ruft die Liste der Ereignishandler ab, die an diese Componentangefügt sind.

(Geerbt von Component)
FileExtension

Ruft die Dateierweiterung ab, die beim Erstellen von Quellcodedateien verwendet werden soll.

LanguageOptions

Ruft einen Sprachfeaturebezeichner ab.

(Geerbt von CodeDomProvider)
Site

Ruft den ISite von Component ab oder legt ihn fest.

(Geerbt von Component)

Methoden

Name Beschreibung
CompileAssemblyFromDom(CompilerParameters, CodeCompileUnit[])

Kompiliert eine Assembly basierend auf den Strukturen, die System.CodeDom im angegebenen Array von CodeCompileUnit Objekten enthalten sind, mithilfe der angegebenen Compilereinstellungen.

(Geerbt von CodeDomProvider)
CompileAssemblyFromFile(CompilerParameters, String[])

Kompiliert eine Assembly aus dem Quellcode, der in den angegebenen Dateien enthalten ist, mithilfe der angegebenen Compilereinstellungen.

(Geerbt von CodeDomProvider)
CompileAssemblyFromSource(CompilerParameters, String[])

Kompiliert eine Assembly aus dem angegebenen Array von Zeichenfolgen, die Quellcode enthalten, mithilfe der angegebenen Compilereinstellungen.

(Geerbt von CodeDomProvider)
CreateCompiler()
Veraltet.

Ruft eine Instanz des C#-Codecompilers ab.

CreateEscapedIdentifier(String)

Erstellt einen Escapebezeichner für den angegebenen Wert.

(Geerbt von CodeDomProvider)
CreateGenerator()
Veraltet.

Ruft eine Instanz des C#-Codegenerators ab.

CreateGenerator(String)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein neuer Codegenerator mit dem angegebenen Dateinamen für die Ausgabe erstellt.

(Geerbt von CodeDomProvider)
CreateGenerator(TextWriter)

Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, wird ein neuer Codegenerator erstellt, der für die Ausgabe angegeben ist TextWriter .

(Geerbt von CodeDomProvider)
CreateObjRef(Type)

Erstellt ein Objekt, das alle relevanten Informationen enthält, die zum Generieren eines Proxys erforderlich sind, der für die Kommunikation mit einem Remoteobjekt verwendet wird.

(Geerbt von MarshalByRefObject)
CreateParser()
Veraltet.

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein neuer Codeparser erstellt.

(Geerbt von CodeDomProvider)
CreateValidIdentifier(String)

Erstellt einen gültigen Bezeichner für den angegebenen Wert.

(Geerbt von CodeDomProvider)
Dispose()

Veröffentlicht alle ressourcen, die von der Component.

(Geerbt von Component)
Dispose(Boolean)

Gibt die nicht verwalteten Ressourcen frei, die von den Component verwalteten Ressourcen verwendet werden, und gibt optional die verwalteten Ressourcen frei.

(Geerbt von Component)
Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GenerateCodeFromCompileUnit(CodeCompileUnit, TextWriter, CodeGeneratorOptions)

Generiert Code für die angegebene Code Document Object Model (CodeDOM)-Kompilierungseinheit und sendet ihn mithilfe der angegebenen Optionen an den angegebenen Textschreiber.

(Geerbt von CodeDomProvider)
GenerateCodeFromExpression(CodeExpression, TextWriter, CodeGeneratorOptions)

Generiert Code für den angegebenen Code Document Object Model (CodeDOM)-Ausdruck und sendet ihn mithilfe der angegebenen Optionen an den angegebenen Textschreiber.

(Geerbt von CodeDomProvider)
GenerateCodeFromMember(CodeTypeMember, TextWriter, CodeGeneratorOptions)

Generiert Code für das angegebene Klassenelement mithilfe der angegebenen Textschreiber- und Codegeneratoroptionen.

GenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions)

Generiert Code für den angegebenen Code Document Object Model (CodeDOM)-Namespace und sendet ihn mithilfe der angegebenen Optionen an den angegebenen Text writer.

(Geerbt von CodeDomProvider)
GenerateCodeFromStatement(CodeStatement, TextWriter, CodeGeneratorOptions)

Generiert Code für die angegebene Code Document Object Model (CodeDOM)-Anweisung und sendet ihn mithilfe der angegebenen Optionen an den angegebenen Text writer.

(Geerbt von CodeDomProvider)
GenerateCodeFromType(CodeTypeDeclaration, TextWriter, CodeGeneratorOptions)

Generiert Code für die angegebene Code Document Object Model (CodeDOM)-Typdeklaration und sendet ihn mithilfe der angegebenen Optionen an den angegebenen Text writer.

(Geerbt von CodeDomProvider)
GetConverter(Type)

Ruft einen TypeConverter für den angegebenen Objekttyp ab.

GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetLifetimeService()

Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinie für diese Instanz steuert.

(Geerbt von MarshalByRefObject)
GetService(Type)

Gibt ein Objekt zurück, das einen Dienst darstellt, der von der Component oder dem zugehörigen ContainerDienst bereitgestellt wird.

(Geerbt von Component)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
GetTypeOutput(CodeTypeReference)

Ruft den Typ ab, der durch die angegebene .CodeTypeReference

(Geerbt von CodeDomProvider)
InitializeLifetimeService()

Ruft ein Lebensdauerdienstobjekt ab, um die Lebensdauerrichtlinie für diese Instanz zu steuern.

(Geerbt von MarshalByRefObject)
IsValidIdentifier(String)

Gibt einen Wert zurück, der angibt, ob der angegebene Wert ein gültiger Bezeichner für die aktuelle Sprache ist.

(Geerbt von CodeDomProvider)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
MemberwiseClone(Boolean)

Erstellt eine flache Kopie des aktuellen MarshalByRefObject Objekts.

(Geerbt von MarshalByRefObject)
Parse(TextReader)

Kompiliert den Code aus dem angegebenen Textstrom in einem CodeCompileUnit.

(Geerbt von CodeDomProvider)
Supports(GeneratorSupport)

Gibt einen Wert zurück, der angibt, ob die unterstützung der angegebenen Codegenerierung bereitgestellt wird.

(Geerbt von CodeDomProvider)
ToString()

Gibt einen String mit dem Namen des Component, falls vorhanden, zurück. Diese Methode sollte nicht außer Kraft gesetzt werden.

(Geerbt von Component)

Ereignisse

Name Beschreibung
Disposed

Tritt auf, wenn die Komponente durch einen Aufruf der Dispose() Methode verworfen wird.

(Geerbt von Component)

Gilt für:

Weitere Informationen