CodeDomProvider.GenerateCodeFromCompileUnit Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Создает код для указанной единицы компиляции объектной модели документов кода (CodeDOM) и направляет его указанному модулю записи текста, используя заданные параметры.
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 метода для создания кода для приложения "Hello World" из CodeCompileUnit. Этот пример является частью более крупного примера, предоставленного 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 вызове метода базового класса из поставщика кода, который не использует генератор кода.