CodeDomProvider.GenerateCodeFromCompileUnit 方法

定義

產生指定程式碼文件物件模型 (CodeDOM) 編譯單位 (Compilation Unit) 的程式碼,並使用指定的選項將其傳送至指定的文字寫入器。

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)

參數

compileUnit
CodeCompileUnit

要為其產生程式碼的 CodeCompileUnit

writer
TextWriter

接收輸出程式碼的 TextWriter

options
CodeGeneratorOptions

CodeGeneratorOptions,表示要用來產生程式碼的選項。

例外狀況

此方法或 CreateGenerator() 方法都沒有在衍生類別中覆寫。

範例

下列程式代碼範例示範如何使用 GenerateCodeFromCompileUnit 方法來從CodeCompileUnit產生 「Hello World」 應用程式的程式代碼。 此範例是針對 類別提供的較大範例的 CodeDomProvider 一部分。

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

備註

注意

在 .NET Framework 1.0 和 1.1 版中,這個方法是由ICodeGenerator提供者的 方法所CreateGenerator傳回的實作所提供。 在 2.0 版中,即使程式代碼提供者未覆寫此方法,也可以直接在程式代碼提供者上呼叫此方法。 如果程式代碼提供者未覆寫這個方法,則 ICodeGenerator 基類會呼叫實作。

給繼承者的注意事項

如果您覆寫這個方法,則不得呼叫基類的對應方法。 基類方法會使用過時 CreateGenerator() 的方法在衍生類別中建立產生器,以便與使用程式代碼產生器的預先存在提供者相容。 接著,基類方法會呼叫 實作中的 ICodeGenerator 對等方法,以執行此函式。 如果您從不使用程式代碼產生器的程式代碼提供者呼叫基類方法,您將會收到 NotImplementedException

適用於

另請參閱