CodeDomProvider.GenerateCodeFromCompileUnit Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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.