CodeDomProvider.GenerateCodeFromCompileUnit 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
產生指定程式碼文件物件模型 (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 。