Udostępnij za pośrednictwem


CodeDomProvider.GenerateCodeFromCompileUnit Metoda

Definicja

Generuje kod dla określonej jednostki kompilacji Code Document Object Model (CodeDOM) i wysyła go do określonego modułu zapisywania tekstu przy użyciu określonych opcji.

public:
 virtual void GenerateCodeFromCompileUnit(System::CodeDom::CodeCompileUnit ^ compileUnit, System::IO::TextWriter ^ writer, System::CodeDom::Compiler::CodeGeneratorOptions ^ options);
public virtual void GenerateCodeFromCompileUnit (System.CodeDom.CodeCompileUnit compileUnit, System.IO.TextWriter writer, System.CodeDom.Compiler.CodeGeneratorOptions options);
abstract member GenerateCodeFromCompileUnit : System.CodeDom.CodeCompileUnit * System.IO.TextWriter * System.CodeDom.Compiler.CodeGeneratorOptions -> unit
override this.GenerateCodeFromCompileUnit : System.CodeDom.CodeCompileUnit * System.IO.TextWriter * System.CodeDom.Compiler.CodeGeneratorOptions -> unit
Public Overridable Sub GenerateCodeFromCompileUnit (compileUnit As CodeCompileUnit, writer As TextWriter, options As CodeGeneratorOptions)

Parametry

compileUnit
CodeCompileUnit

Element CodeCompileUnit , dla którego należy wygenerować kod.

writer
TextWriter

Element TextWriter , do którego jest wysyłany kod wyjściowy.

options
CodeGeneratorOptions

Element CodeGeneratorOptions wskazujący opcje, które mają być używane do generowania kodu.

Wyjątki

Ta metoda ani metoda nie CreateGenerator() jest zastępowana w klasie pochodnej.

Przykłady

Poniższy przykład kodu przedstawia użycie GenerateCodeFromCompileUnit metody do generowania kodu dla aplikacji "Hello world" z poziomu obiektu CodeCompileUnit. Ten przykład jest częścią większego przykładu udostępnionego CodeDomProvider dla klasy.

static void GenerateCode( CodeDomProvider^ provider, CodeCompileUnit^ compileunit )
{
    // Build the source file name with the appropriate
    // language extension.
    String^ sourceFile;
    if ( provider->FileExtension->StartsWith( "." ) )
    {
        sourceFile = String::Concat( "TestGraph", provider->FileExtension );
    }
    else
    {
        sourceFile = String::Concat( "TestGraph.", provider->FileExtension );
    }

    // Create an IndentedTextWriter, constructed with
    // a StreamWriter to the source file.
    IndentedTextWriter^ tw = gcnew IndentedTextWriter( gcnew StreamWriter( sourceFile,false ),"    " );

    // Generate source code using the code generator.
    provider->GenerateCodeFromCompileUnit( compileunit, tw, gcnew CodeGeneratorOptions );

    // Close the output file.
    tw->Close();
}
public static void GenerateCode(CodeDomProvider provider,
    CodeCompileUnit compileunit)
{
    // Build the source file name with the appropriate
    // language extension.
    String sourceFile;
    if (provider.FileExtension[0] == '.')
    {
        sourceFile = "TestGraph" + provider.FileExtension;
    }
    else
    {
        sourceFile = "TestGraph." + provider.FileExtension;
    }

    // Create an IndentedTextWriter, constructed with
    // a StreamWriter to the source file.
    IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), "    ");
    // Generate source code using the code generator.
    provider.GenerateCodeFromCompileUnit(compileunit, tw, new CodeGeneratorOptions());
    // Close the output file.
    tw.Close();
}
Public Shared Sub GenerateCode(ByVal provider As CodeDomProvider, ByVal compileunit As CodeCompileUnit)

    ' Build the source file name with the appropriate
    ' language extension.
    Dim sourceFile As String
    If provider.FileExtension.StartsWith(".") Then
        sourceFile = "TestGraph" + provider.FileExtension
    Else
        sourceFile = "TestGraph." + provider.FileExtension
    End If

    ' Create an IndentedTextWriter, constructed with
    ' a StreamWriter to the source file.
    Dim tw As New IndentedTextWriter(New StreamWriter(sourceFile, False), "    ")
    ' Generate source code using the code generator.
    provider.GenerateCodeFromCompileUnit(compileunit, tw, New CodeGeneratorOptions())
    ' Close the output file.
    tw.Close()
End Sub

Uwagi

Uwaga

W .NET Framework wersji 1.0 i 1.1 ta metoda jest dostarczana przez ICodeGenerator implementację zwróconą przez CreateGenerator metodę dostawcy. W wersji 2.0 ta metoda może być wywoływana bezpośrednio u dostawcy kodu, nawet jeśli nie jest zastępowana przez dostawcę kodu. Jeśli dostawca kodu nie zastąpi tej metody, implementacja jest wywoływana ICodeGenerator przez klasę bazową.

Uwagi dotyczące dziedziczenia

Jeśli zastąpisz tę metodę, nie możesz wywołać odpowiedniej metody klasy bazowej. Metoda klasy bazowej tworzy generator w klasie pochodnej przy użyciu przestarzałej CreateGenerator() metody w celu zapewnienia zgodności ze wstępnie istniejących dostawców korzystających z generatorów kodu. Następnie metoda klasy bazowej wywołuje równoważną metodę w implementacji ICodeGenerator , aby wykonać tę funkcję. Jeśli wywołasz metodę klasy bazowej od dostawcy kodu, który nie używa generatora kodu, otrzymasz metodę NotImplementedException klasy bazowej.

Dotyczy

Zobacz też