Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ad alanı, System.CodeDom.Compiler CodeDOM nesne grafiklerinden kaynak kodu oluşturmak ve desteklenen derleyicilerle derlemeyi yönetmek için arabirimler sağlar. Kod sağlayıcısı, CodeDOM grafiğine göre belirli bir programlama dilinde kaynak kodu üretebilir. öğesinden CodeDomProvider türetilen bir sınıf genellikle sağlayıcının desteklediği dil için kod oluşturmak ve derlemek için yöntemler sağlayabilir.
Kaynak kodu oluşturmak için CodeDOM kod sağlayıcısı kullanma
Belirli bir dilde kaynak kodu oluşturmak için, oluşturulacak kaynak kodun yapısını temsil eden bir CodeDOM grafı gerekir.
Aşağıdaki örnekte bir örneğinin nasıl oluşturulacağı gösterilmektedir CSharpCodeProvider:
CSharpCodeProvider^ provider = gcnew CSharpCodeProvider();
CSharpCodeProvider provider = new CSharpCodeProvider();
Dim provider As New CSharpCodeProvider()
Kod oluşturma grafiği genellikle içinde CodeCompileUnityer alır. CodeDOM grafiği içeren bir CodeCompileUnit
için kod oluşturmak için kod sağlayıcısının yöntemini çağırın GenerateCodeFromCompileUnit . Bu yöntem, kaynak kodu oluşturmak için kullandığı bir TextWriter parametresine sahiptir, bu nedenle bazen önce yazılabilir bir TextWriter
oluşturmak gerekir. Aşağıdaki örnekte, bir CodeCompileUnit
dosyasından kod oluşturma ve oluşturulan kaynak kodun HelloWorld.cs adlı bir dosyaya yazılması gösterilmektedir.
public:
static String^ GenerateCSharpCode(CodeCompileUnit^ compileunit)
{
// Generate the code with the C# code provider.
CSharpCodeProvider^ provider = gcnew CSharpCodeProvider();
// Build the output file name.
String^ sourceFile;
if (provider->FileExtension[0] == '.')
{
sourceFile = "HelloWorld" + provider->FileExtension;
}
else
{
sourceFile = "HelloWorld." + provider->FileExtension;
}
// Create a TextWriter to a StreamWriter to the output file.
StreamWriter^ sw = gcnew StreamWriter(sourceFile, false);
IndentedTextWriter^ tw = gcnew IndentedTextWriter(sw, " ");
// Generate source code using namespace the code provider.
provider->GenerateCodeFromCompileUnit(compileunit, tw,
gcnew CodeGeneratorOptions());
// Close the output file.
tw->Close();
sw->Close();
return sourceFile;
}
public static string GenerateCSharpCode(CodeCompileUnit compileunit)
{
// Generate the code with the C# code provider.
CSharpCodeProvider provider = new CSharpCodeProvider();
// Build the output file name.
string sourceFile;
if (provider.FileExtension[0] == '.')
{
sourceFile = "HelloWorld" + provider.FileExtension;
}
else
{
sourceFile = "HelloWorld." + provider.FileExtension;
}
// Create a TextWriter to a StreamWriter to the output file.
using (StreamWriter sw = new StreamWriter(sourceFile, false))
{
IndentedTextWriter tw = new IndentedTextWriter(sw, " ");
// Generate source code using the code provider.
provider.GenerateCodeFromCompileUnit(compileunit, tw,
new CodeGeneratorOptions());
// Close the output file.
tw.Close();
}
return sourceFile;
}
Public Shared Function GenerateCSharpCode(compileunit As CodeCompileUnit) As String
' Generate the code with the C# code provider.
Dim provider As New CSharpCodeProvider()
' Build the output file name.
Dim sourceFile As String
If provider.FileExtension(0) = "." Then
sourceFile = "HelloWorld" + provider.FileExtension
Else
sourceFile = "HelloWorld." + provider.FileExtension
End If
' Create a TextWriter to a StreamWriter to the output file.
Using sw As New StreamWriter(sourceFile, false)
Dim tw As New IndentedTextWriter(sw, " ")
' Generate source code Imports the code provider.
provider.GenerateCodeFromCompileUnit(compileunit, tw, _
New CodeGeneratorOptions())
' Close the output file.
tw.Close()
End Using
Return sourceFile
End Function
Derlemeleri derlemek için CodeDOM kod sağlayıcısı kullanma
Derlemeyi çağırma
CodeDom sağlayıcısı kullanarak derleme derlemek için, derleyiciniz olan bir dilde derlenecek kaynak kodunuz veya derlenecek kaynak kodun oluşturulabileceği codeDOM grafiğine sahip olmanız gerekir.
CodeDOM grafiğinden derleniyorsanız, grafiği içeren grafiği kod sağlayıcısının yöntemine CodeCompileUnit geçirinCompileAssemblyFromDom. Derleyicinin anladığı bir dilde kaynak kod dosyanız varsa, kaynak kodu içeren dosyanın adını CodeDom sağlayıcısının yöntemine CompileAssemblyFromFile geçirin. Ayrıca, derleyicinin anladığı bir dilde kaynak kodu içeren bir dizeyi CompileAssemblyFromSource CodeDom sağlayıcısının yöntemine geçirebilirsiniz.
Derleme parametrelerini yapılandırma
CodeDom sağlayıcısının standart derleme çağırma yöntemlerinin tümü, derleme için kullanılacak seçenekleri gösteren türde CompilerParameters bir parametreye sahiptir.
özelliğinde OutputAssemblyCompilerParameters
çıkış derlemesi için bir dosya adı belirtebilirsiniz. Aksi takdirde, varsayılan bir çıkış dosyası adı kullanılır.
Varsayılan olarak, özelliği olarak ayarlanmış CompilerParameters
bir yeni GenerateExecutable başlatılırfalse
. Yürütülebilir bir program derlediyseniz özelliğini olarak GenerateExecutable
ayarlamanız true
gerekir.
GenerateExecutable
olarak ayarlandığındafalse
, derleyici bir sınıf kitaplığı oluşturur.
CodeDOM grafiğinden yürütülebilir dosya derlediyseniz, CodeEntryPointMethod grafikte tanımlanmalıdır. Birden çok kod giriş noktası varsa, özelliğini MainClass kullanılacak giriş noktasını tanımlayan sınıfın adına ayarlamak CompilerParameters
gerekebilir.
Oluşturulan yürütülebilir dosyaya hata ayıklama bilgilerini eklemek için özelliğini olarak IncludeDebugInformationayarlayıntrue
.
Projeniz herhangi bir derlemeye başvuruda bulunursa, derlemeyi çağırırken kullandığınız özelliği StringCollection olarak derleme adlarını öğesinde ReferencedAssemblies öğe olarak CompilerParameters
belirtmeniz gerekir.
özelliğini GenerateInMemoryolarak ayarlayarak disk yerine belleğe yazılan bir derleme derleyebilirsiniztrue
. Bellekte bir derleme oluşturulduğunda, kodunuz bir özelliğinden oluşturulan derlemeye CompiledAssembly başvuru CompilerResultsalabilir. Bir derleme diske yazılırsa, oluşturulan derlemenin yolunu bir PathToAssemblyözelliğinden CompilerResults
alabilirsiniz.
Derleme işlemi çağrılırken kullanılacak özel bir komut satırı bağımsız değişken dizesi belirtmek için dizeyi özelliğinde CompilerOptions ayarlayın.
Derleyici işlemini çağırmak için bir Win32 güvenlik belirteci gerekiyorsa, özelliğinde UserToken belirteci belirtin.
Bir Win32 kaynak dosyasını derlenmiş derlemeye bağlamak için özelliğindeki Win32 kaynak dosyasının Win32Resource adını belirtin.
Derlemenin durdurulması gereken bir uyarı düzeyi belirtmek için, özelliğini derlemenin WarningLevel durdurulduğu uyarı düzeyini temsil eden bir tamsayıya ayarlayın. Ayrıca özelliğini TreatWarningsAsErrorsolarak ayarlayarak uyarılarla karşılaşılırsa derleyiciyi derlemeyi true
durduracak şekilde yapılandırabilirsiniz.
Aşağıdaki kod örneği, sınıfından türetilmiş bir CodeDom sağlayıcısı kullanarak bir kaynak dosyasını derlemeyi CodeDomProvider gösterir.
public:
static bool CompileCSharpCode(String^ sourceFile, String^ exeFile)
{
CSharpCodeProvider^ provider = gcnew CSharpCodeProvider();
// Build the parameters for source compilation.
CompilerParameters^ cp = gcnew CompilerParameters();
// Add an assembly reference.
cp->ReferencedAssemblies->Add( "System.dll" );
// Generate an executable instead of
// a class library.
cp->GenerateExecutable = true;
// Set the assembly file name to generate.
cp->OutputAssembly = exeFile;
// Save the assembly as a physical file.
cp->GenerateInMemory = false;
// Invoke compilation.
CompilerResults^ cr = provider->CompileAssemblyFromFile(cp, sourceFile);
if (cr->Errors->Count > 0)
{
// Display compilation errors.
Console::WriteLine("Errors building {0} into {1}",
sourceFile, cr->PathToAssembly);
for each (CompilerError^ ce in cr->Errors)
{
Console::WriteLine(" {0}", ce->ToString());
Console::WriteLine();
}
}
else
{
Console::WriteLine("Source {0} built into {1} successfully.",
sourceFile, cr->PathToAssembly);
}
// Return the results of compilation.
if (cr->Errors->Count > 0)
{
return false;
}
else
{
return true;
}
}
public static bool CompileCSharpCode(string sourceFile, string exeFile)
{
CSharpCodeProvider provider = new CSharpCodeProvider();
// Build the parameters for source compilation.
CompilerParameters cp = new CompilerParameters();
// Add an assembly reference.
cp.ReferencedAssemblies.Add( "System.dll" );
// Generate an executable instead of
// a class library.
cp.GenerateExecutable = true;
// Set the assembly file name to generate.
cp.OutputAssembly = exeFile;
// Save the assembly as a physical file.
cp.GenerateInMemory = false;
// Invoke compilation.
CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceFile);
if (cr.Errors.Count > 0)
{
// Display compilation errors.
Console.WriteLine($"Errors building {sourceFile} into {cr.PathToAssembly}");
foreach (CompilerError ce in cr.Errors)
{
Console.WriteLine($" {ce.ToString()}");
Console.WriteLine();
}
}
else
{
Console.WriteLine($"Source {sourceFile} built into {cr.PathToAssembly} successfully.");
}
// Return the results of compilation.
if (cr.Errors.Count > 0)
{
return false;
}
else
{
return true;
}
}
Public Shared Function CompileCSharpCode(sourceFile As String, _
exeFile As String) As Boolean
Dim provider As New CSharpCodeProvider()
' Build the parameters for source compilation.
Dim cp As New CompilerParameters()
' Add an assembly reference.
cp.ReferencedAssemblies.Add("System.dll")
' Generate an executable instead of
' a class library.
cp.GenerateExecutable = true
' Set the assembly file name to generate.
cp.OutputAssembly = exeFile
' Save the assembly as a physical file.
cp.GenerateInMemory = false
' Invoke compilation.
Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, sourceFile)
If cr.Errors.Count > 0 Then
' Display compilation errors.
Console.WriteLine("Errors building {0} into {1}", _
sourceFile, cr.PathToAssembly)
For Each ce As CompilerError In cr.Errors
Console.WriteLine(" {0}", ce.ToString())
Console.WriteLine()
Next ce
Else
Console.WriteLine("Source {0} built into {1} successfully.", _
sourceFile, cr.PathToAssembly)
End If
' Return the results of compilation.
If cr.Errors.Count > 0 Then
Return False
Else
Return True
End If
End Function
İlk desteği olan diller
.NET şu diller için kod derleyicileri ve kod oluşturucular sağlar: C#, Visual Basic, C++ve JScript. CodeDOM desteği, dile özgü kod oluşturucuları ve kod derleyicileri uygulanarak diğer dillere genişletilebilir.