CodeDomProvider クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
CodeDomProvider の実装の基本クラスを提供します。 このクラスは抽象クラスです。
public ref class CodeDomProvider abstract : System::ComponentModel::Component
public abstract class CodeDomProvider : System.ComponentModel.Component
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CodeDomProvider : System.ComponentModel.Component
type CodeDomProvider = class
inherit Component
[<System.Runtime.InteropServices.ComVisible(true)>]
type CodeDomProvider = class
inherit Component
Public MustInherit Class CodeDomProvider
Inherits Component
- 継承
- 派生
- 属性
例
次のプログラム例では、 クラスを使用して "Hello World" を出力するプログラムの CodeDOM モデルに基づいてソース コードを Console 生成およびコンパイルできます。 Windows フォームのユーザー インターフェイスが用意されています。 ユーザーは、C#、Visual Basic、JScript など、いくつかの選択からターゲット プログラミング言語を選択できます。
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
#using <System.dll>
#using <Microsoft.JScript.dll>
using namespace System;
using namespace System::CodeDom;
using namespace System::CodeDom::Compiler;
using namespace System::Collections;
using namespace System::ComponentModel;
using namespace System::Diagnostics;
using namespace System::Drawing;
using namespace System::IO;
using namespace System::Windows::Forms;
using namespace Microsoft::CSharp;
using namespace Microsoft::VisualBasic;
using namespace Microsoft::JScript;
using namespace System::Security::Permissions;
// This example demonstrates building a Hello World program graph
// using System.CodeDom elements. It calls code generator and
// code compiler methods to build the program using CSharp, VB, or
// JScript. A Windows Forms interface is included. Note: Code
// must be compiled and linked with the Microsoft.JScript assembly.
namespace CodeDOMExample
{
[PermissionSet(SecurityAction::Demand, Name="FullTrust")]
public ref class CodeDomExample
{
public:
// Build a Hello World program graph using
// System::CodeDom types.
static CodeCompileUnit^ BuildHelloWorldGraph()
{
// Create a new CodeCompileUnit to contain
// the program graph.
CodeCompileUnit^ compileUnit = gcnew CodeCompileUnit;
// Declare a new namespace called Samples.
CodeNamespace^ samples = gcnew CodeNamespace( "Samples" );
// Add the new namespace to the compile unit.
compileUnit->Namespaces->Add( samples );
// Add the new namespace import for the System namespace.
samples->Imports->Add( gcnew CodeNamespaceImport( "System" ) );
// Declare a new type called Class1.
CodeTypeDeclaration^ class1 = gcnew CodeTypeDeclaration( "Class1" );
// Add the new type to the namespace's type collection.
samples->Types->Add( class1 );
// Declare a new code entry point method.
CodeEntryPointMethod^ start = gcnew CodeEntryPointMethod;
// Create a type reference for the System::Console class.
CodeTypeReferenceExpression^ csSystemConsoleType = gcnew CodeTypeReferenceExpression( "System.Console" );
// Build a Console::WriteLine statement.
CodeMethodInvokeExpression^ cs1 = gcnew CodeMethodInvokeExpression( csSystemConsoleType,"WriteLine", gcnew CodePrimitiveExpression("Hello World!") );
// Add the WriteLine call to the statement collection.
start->Statements->Add( cs1 );
// Build another Console::WriteLine statement.
CodeMethodInvokeExpression^ cs2 = gcnew CodeMethodInvokeExpression( csSystemConsoleType,"WriteLine", gcnew CodePrimitiveExpression( "Press the Enter key to continue." ) );
// Add the WriteLine call to the statement collection.
start->Statements->Add( cs2 );
// Build a call to System::Console::ReadLine.
CodeMethodReferenceExpression^ csReadLine = gcnew CodeMethodReferenceExpression( csSystemConsoleType, "ReadLine" );
CodeMethodInvokeExpression^ cs3 = gcnew CodeMethodInvokeExpression( csReadLine, gcnew array<CodeExpression^>(0) );
// Add the ReadLine statement.
start->Statements->Add( cs3 );
// Add the code entry point method to
// the Members collection of the type.
class1->Members->Add( start );
return compileUnit;
}
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();
}
static CompilerResults^ CompileCode( CodeDomProvider^ provider, String^ sourceFile, String^ exeFile )
{
// Configure a CompilerParameters that links System.dll
// and produces the specified executable file.
array<String^>^referenceAssemblies = {"System.dll"};
CompilerParameters^ cp = gcnew CompilerParameters( referenceAssemblies,exeFile,false );
// Generate an executable rather than a DLL file.
cp->GenerateExecutable = true;
// Invoke compilation.
CompilerResults^ cr = provider->CompileAssemblyFromFile( cp, sourceFile );
// Return the results of compilation.
return cr;
}
};
public ref class CodeDomExampleForm: public System::Windows::Forms::Form
{
private:
static System::Windows::Forms::Button^ run_button = gcnew System::Windows::Forms::Button;
static System::Windows::Forms::Button^ compile_button = gcnew System::Windows::Forms::Button;
static System::Windows::Forms::Button^ generate_button = gcnew System::Windows::Forms::Button;
static System::Windows::Forms::TextBox^ textBox1 = gcnew System::Windows::Forms::TextBox;
static System::Windows::Forms::ComboBox^ comboBox1 = gcnew System::Windows::Forms::ComboBox;
static System::Windows::Forms::Label^ label1 = gcnew System::Windows::Forms::Label;
void generate_button_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
CodeDomProvider^ provider = GetCurrentProvider();
CodeDomExample::GenerateCode( provider, CodeDomExample::BuildHelloWorldGraph() );
// 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 );
}
// Read in the generated source file and
// display the source text.
StreamReader^ sr = gcnew StreamReader( sourceFile );
textBox1->Text = sr->ReadToEnd();
sr->Close();
}
CodeDomProvider^ GetCurrentProvider()
{
CodeDomProvider^ provider;
if ( String::Compare( dynamic_cast<String^>(this->comboBox1->SelectedItem), "CSharp" ) == 0 )
provider = CodeDomProvider::CreateProvider("CSharp");
else
if ( String::Compare( dynamic_cast<String^>(this->comboBox1->SelectedItem), "Visual Basic" ) == 0 )
provider = CodeDomProvider::CreateProvider("VisualBasic");
else
if ( String::Compare( dynamic_cast<String^>(this->comboBox1->SelectedItem), "JScript" ) == 0 )
provider = CodeDomProvider::CreateProvider("JScript");
else
provider = CodeDomProvider::CreateProvider("CSharp");
return provider;
}
void compile_button_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
CodeDomProvider^ provider = GetCurrentProvider();
// Build the source file name with the appropriate
// language extension.
String^ sourceFile = String::Concat( "TestGraph.", provider->FileExtension );
// Compile the source file into an executable output file.
CompilerResults^ cr = CodeDomExample::CompileCode( provider, sourceFile, "TestGraph.exe" );
if ( cr->Errors->Count > 0 )
{
// Display compilation errors.
textBox1->Text = String::Concat( "Errors encountered while building ", sourceFile, " into ", cr->PathToAssembly, ": \r\n\n" );
System::CodeDom::Compiler::CompilerError^ ce;
for ( int i = 0; i < cr->Errors->Count; i++ )
{
ce = cr->Errors[i];
textBox1->AppendText( String::Concat( ce->ToString(), "\r\n" ) );
}
run_button->Enabled = false;
}
else
{
textBox1->Text = String::Concat( "Source ", sourceFile, " built into ", cr->PathToAssembly, " with no errors." );
run_button->Enabled = true;
}
}
void run_button_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
Process::Start( "TestGraph.exe" );
}
public:
CodeDomExampleForm()
{
this->SuspendLayout();
// Set properties for label1.
this->label1->Location = System::Drawing::Point( 395, 20 );
this->label1->Size = System::Drawing::Size( 180, 22 );
this->label1->Text = "Select a programming language:";
// Set properties for comboBox1.
this->comboBox1->Location = System::Drawing::Point( 560, 16 );
this->comboBox1->Size = System::Drawing::Size( 190, 23 );
this->comboBox1->Name = "comboBox1";
array<String^>^temp1 = {"CSharp","Visual Basic","JScript"};
this->comboBox1->Items->AddRange( temp1 );
this->comboBox1->Anchor = (System::Windows::Forms::AnchorStyles)(System::Windows::Forms::AnchorStyles::Left | System::Windows::Forms::AnchorStyles::Right | System::Windows::Forms::AnchorStyles::Top);
this->comboBox1->SelectedIndex = 0;
// Set properties for generate_button.
this->generate_button->Location = System::Drawing::Point( 8, 16 );
this->generate_button->Name = "generate_button";
this->generate_button->Size = System::Drawing::Size( 120, 23 );
this->generate_button->Text = "Generate Code";
this->generate_button->Click += gcnew System::EventHandler( this, &CodeDomExampleForm::generate_button_Click );
// Set properties for compile_button.
this->compile_button->Location = System::Drawing::Point( 136, 16 );
this->compile_button->Name = "compile_button";
this->compile_button->Size = System::Drawing::Size( 120, 23 );
this->compile_button->Text = "Compile";
this->compile_button->Click += gcnew System::EventHandler( this, &CodeDomExampleForm::compile_button_Click );
// Set properties for run_button.
this->run_button->Enabled = false;
this->run_button->Location = System::Drawing::Point( 264, 16 );
this->run_button->Name = "run_button";
this->run_button->Size = System::Drawing::Size( 120, 23 );
this->run_button->Text = "Run";
this->run_button->Click += gcnew System::EventHandler( this, &CodeDomExampleForm::run_button_Click );
// Set properties for textBox1.
this->textBox1->Anchor = (System::Windows::Forms::AnchorStyles)(System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom | System::Windows::Forms::AnchorStyles::Left | System::Windows::Forms::AnchorStyles::Right);
this->textBox1->Location = System::Drawing::Point( 8, 48 );
this->textBox1->Multiline = true;
this->textBox1->ScrollBars = System::Windows::Forms::ScrollBars::Vertical;
this->textBox1->Name = "textBox1";
this->textBox1->Size = System::Drawing::Size( 744, 280 );
this->textBox1->Text = "";
// Set properties for the CodeDomExampleForm.
this->AutoScaleBaseSize = System::Drawing::Size( 5, 13 );
this->ClientSize = System::Drawing::Size( 768, 340 );
this->MinimumSize = System::Drawing::Size( 750, 340 );
array<System::Windows::Forms::Control^>^myControl = {this->textBox1,this->run_button,this->compile_button,this->generate_button,this->comboBox1,this->label1};
this->Controls->AddRange( myControl );
this->Name = "CodeDomExampleForm";
this->Text = "CodeDom Hello World Example";
this->ResumeLayout( false );
}
public:
~CodeDomExampleForm()
{
}
};
}
[STAThread]
int main()
{
Application::Run( gcnew CodeDOMExample::CodeDomExampleForm );
}
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Microsoft.CSharp;
using Microsoft.VisualBasic;
using Microsoft.JScript;
// This example demonstrates building a Hello World program graph
// using System.CodeDom elements. It calls code generator and
// code compiler methods to build the program using CSharp, VB, or
// JScript. A Windows Forms interface is included. Note: Code
// must be compiled and linked with the Microsoft.JScript assembly.
namespace CodeDOMExample
{
class CodeDomExample
{
// Build a Hello World program graph using
// System.CodeDom types.
public static CodeCompileUnit BuildHelloWorldGraph()
{
// Create a new CodeCompileUnit to contain
// the program graph.
CodeCompileUnit compileUnit = new CodeCompileUnit();
// Declare a new namespace called Samples.
CodeNamespace samples = new CodeNamespace("Samples");
// Add the new namespace to the compile unit.
compileUnit.Namespaces.Add(samples);
// Add the new namespace import for the System namespace.
samples.Imports.Add(new CodeNamespaceImport("System"));
// Declare a new type called Class1.
CodeTypeDeclaration class1 = new CodeTypeDeclaration("Class1");
// Add the new type to the namespace type collection.
samples.Types.Add(class1);
// Declare a new code entry point method.
CodeEntryPointMethod start = new CodeEntryPointMethod();
// Create a type reference for the System.Console class.
CodeTypeReferenceExpression csSystemConsoleType = new CodeTypeReferenceExpression("System.Console");
// Build a Console.WriteLine statement.
CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(
csSystemConsoleType, "WriteLine",
new CodePrimitiveExpression("Hello World!"));
// Add the WriteLine call to the statement collection.
start.Statements.Add(cs1);
// Build another Console.WriteLine statement.
CodeMethodInvokeExpression cs2 = new CodeMethodInvokeExpression(
csSystemConsoleType, "WriteLine",
new CodePrimitiveExpression("Press the Enter key to continue."));
// Add the WriteLine call to the statement collection.
start.Statements.Add(cs2);
// Build a call to System.Console.ReadLine.
CodeMethodInvokeExpression csReadLine = new CodeMethodInvokeExpression(
csSystemConsoleType, "ReadLine");
// Add the ReadLine statement.
start.Statements.Add(csReadLine);
// Add the code entry point method to
// the Members collection of the type.
class1.Members.Add(start);
return compileUnit;
}
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 static CompilerResults CompileCode(CodeDomProvider provider,
String sourceFile,
String exeFile)
{
// Configure a CompilerParameters that links System.dll
// and produces the specified executable file.
String[] referenceAssemblies = { "System.dll" };
CompilerParameters cp = new CompilerParameters(referenceAssemblies,
exeFile, false);
// Generate an executable rather than a DLL file.
cp.GenerateExecutable = true;
// Invoke compilation.
CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceFile);
// Return the results of compilation.
return cr;
}
}
public class CodeDomExampleForm : System.Windows.Forms.Form
{
private System.Windows.Forms.Button run_button = new System.Windows.Forms.Button();
private System.Windows.Forms.Button compile_button = new System.Windows.Forms.Button();
private System.Windows.Forms.Button generate_button = new System.Windows.Forms.Button();
private System.Windows.Forms.TextBox textBox1 = new System.Windows.Forms.TextBox();
private System.Windows.Forms.ComboBox comboBox1 = new System.Windows.Forms.ComboBox();
private System.Windows.Forms.Label label1 = new System.Windows.Forms.Label();
private void generate_button_Click(object sender, System.EventArgs e)
{
CodeDomProvider provider = GetCurrentProvider();
CodeDomExample.GenerateCode(provider, CodeDomExample.BuildHelloWorldGraph());
// 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;
}
// Read in the generated source file and
// display the source text.
StreamReader sr = new StreamReader(sourceFile);
textBox1.Text = sr.ReadToEnd();
sr.Close();
}
private void compile_button_Click(object sender, System.EventArgs e)
{
CodeDomProvider provider = GetCurrentProvider();
// 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;
}
// Compile the source file into an executable output file.
CompilerResults cr = CodeDomExample.CompileCode(provider,
sourceFile,
"TestGraph.exe");
if (cr.Errors.Count > 0)
{
// Display compilation errors.
textBox1.Text = "Errors encountered while building " +
sourceFile + " into " + cr.PathToAssembly + ": \r\n\n";
foreach (CompilerError ce in cr.Errors)
textBox1.AppendText(ce.ToString() + "\r\n");
run_button.Enabled = false;
}
else
{
textBox1.Text = "Source " + sourceFile + " built into " +
cr.PathToAssembly + " with no errors.";
run_button.Enabled = true;
}
}
private void run_button_Click(object sender,
System.EventArgs e)
{
Process.Start("TestGraph.exe");
}
private CodeDomProvider GetCurrentProvider()
{
CodeDomProvider provider;
switch ((string)this.comboBox1.SelectedItem)
{
case "CSharp":
provider = CodeDomProvider.CreateProvider("CSharp");
break;
case "Visual Basic":
provider = CodeDomProvider.CreateProvider("VisualBasic");
break;
case "JScript":
provider = CodeDomProvider.CreateProvider("JScript");
break;
default:
provider = CodeDomProvider.CreateProvider("CSharp");
break;
}
return provider;
}
public CodeDomExampleForm()
{
this.SuspendLayout();
// Set properties for label1
this.label1.Location = new System.Drawing.Point(395, 20);
this.label1.Size = new Size(180, 22);
this.label1.Text = "Select a programming language:";
// Set properties for comboBox1
this.comboBox1.Location = new System.Drawing.Point(560, 16);
this.comboBox1.Size = new Size(190, 23);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Items.AddRange(new string[] { "CSharp", "Visual Basic", "JScript" });
this.comboBox1.Anchor = System.Windows.Forms.AnchorStyles.Left
| System.Windows.Forms.AnchorStyles.Right
| System.Windows.Forms.AnchorStyles.Top;
this.comboBox1.SelectedIndex = 0;
// Set properties for generate_button.
this.generate_button.Location = new System.Drawing.Point(8, 16);
this.generate_button.Name = "generate_button";
this.generate_button.Size = new System.Drawing.Size(120, 23);
this.generate_button.Text = "Generate Code";
this.generate_button.Click += new System.EventHandler(this.generate_button_Click);
// Set properties for compile_button.
this.compile_button.Location = new System.Drawing.Point(136, 16);
this.compile_button.Name = "compile_button";
this.compile_button.Size = new System.Drawing.Size(120, 23);
this.compile_button.Text = "Compile";
this.compile_button.Click += new System.EventHandler(this.compile_button_Click);
// Set properties for run_button.
this.run_button.Enabled = false;
this.run_button.Location = new System.Drawing.Point(264, 16);
this.run_button.Name = "run_button";
this.run_button.Size = new System.Drawing.Size(120, 23);
this.run_button.Text = "Run";
this.run_button.Click += new System.EventHandler(this.run_button_Click);
// Set properties for textBox1.
this.textBox1.Anchor = (System.Windows.Forms.AnchorStyles.Top
| System.Windows.Forms.AnchorStyles.Bottom
| System.Windows.Forms.AnchorStyles.Left
| System.Windows.Forms.AnchorStyles.Right);
this.textBox1.Location = new System.Drawing.Point(8, 48);
this.textBox1.Multiline = true;
this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(744, 280);
this.textBox1.Text = "";
// Set properties for the CodeDomExampleForm.
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(768, 340);
this.MinimumSize = new System.Drawing.Size(750, 340);
this.Controls.AddRange(new System.Windows.Forms.Control[] {this.textBox1,
this.run_button, this.compile_button, this.generate_button,
this.comboBox1, this.label1 });
this.Name = "CodeDomExampleForm";
this.Text = "CodeDom Hello World Example";
this.ResumeLayout(false);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
[STAThread]
static void Main()
{
Application.Run(new CodeDomExampleForm());
}
}
}
Imports System.CodeDom
Imports System.CodeDom.Compiler
Imports System.Collections
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Drawing
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.CSharp
Imports Microsoft.JScript
' This example demonstrates building a Hello World program graph
' using System.CodeDom elements. It calls code generator and
' code compiler methods to build the program using CSharp, VB, or
' JScript. A Windows Forms interface is included. Note: Code
' must be compiled and linked with the Microsoft.JScript assembly.
Namespace CodeDOMExample
Class CodeDomExample
' Build a Hello World program graph using
' System.CodeDom types.
Public Shared Function BuildHelloWorldGraph() As CodeCompileUnit
' Create a new CodeCompileUnit to contain
' the program graph.
Dim compileUnit As New CodeCompileUnit()
' Declare a new namespace called Samples.
Dim samples As New CodeNamespace("Samples")
' Add the new namespace to the compile unit.
compileUnit.Namespaces.Add(samples)
' Add the new namespace import for the System namespace.
samples.Imports.Add(New CodeNamespaceImport("System"))
' Declare a new type called Class1.
Dim class1 As New CodeTypeDeclaration("Class1")
' Add the new type to the namespace type collection.
samples.Types.Add(class1)
' Declare a new code entry point method.
Dim start As New CodeEntryPointMethod()
' Create a type reference for the System.Console class.
Dim csSystemConsoleType As New CodeTypeReferenceExpression( _
"System.Console")
' Build a Console.WriteLine statement.
Dim cs1 As New CodeMethodInvokeExpression( _
csSystemConsoleType, "WriteLine", _
New CodePrimitiveExpression("Hello World!"))
' Add the WriteLine call to the statement collection.
start.Statements.Add(cs1)
' Build another Console.WriteLine statement.
Dim cs2 As New CodeMethodInvokeExpression( _
csSystemConsoleType, "WriteLine", _
New CodePrimitiveExpression("Press the Enter key to continue."))
' Add the WriteLine call to the statement collection.
start.Statements.Add(cs2)
' Build a call to System.Console.ReadLine.
Dim csReadLine As New CodeMethodInvokeExpression( _
csSystemConsoleType, "ReadLine")
' Add the ReadLine statement.
start.Statements.Add(csReadLine)
' Add the code entry point method to
' the Members collection of the type.
class1.Members.Add(start)
Return compileUnit
End Function
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
Public Shared Function CompileCode(ByVal provider As CodeDomProvider, _
ByVal sourceFile As String, _
ByVal exeFile As String) As CompilerResults
' Configure a CompilerParameters that links System.dll
' and produces the specified executable file.
Dim referenceAssemblies As String() = {"System.dll"}
Dim cp As New CompilerParameters(referenceAssemblies, exeFile, False)
' Generate an executable rather than a DLL file.
cp.GenerateExecutable = True
' Invoke compilation.
Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, _
sourceFile)
' Return the results of compilation.
Return cr
End Function
End Class
Public Class CodeDomExampleForm
Inherits System.Windows.Forms.Form
Private run_button As New System.Windows.Forms.Button()
Private compile_button As New System.Windows.Forms.Button()
Private generate_button As New System.Windows.Forms.Button()
Private textBox1 As New System.Windows.Forms.TextBox()
Private comboBox1 As New System.Windows.Forms.ComboBox()
Private label1 As New System.Windows.Forms.Label()
Private Sub generate_button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim provider As CodeDomProvider = GetCurrentProvider()
CodeDomExample.GenerateCode(provider, CodeDomExample.BuildHelloWorldGraph())
' 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
' Read in the generated source file and
' display the source text.
Dim sr As New StreamReader(sourceFile)
textBox1.Text = sr.ReadToEnd()
sr.Close()
End Sub
Private Sub compile_button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim provider As CodeDomProvider = GetCurrentProvider()
' 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
Dim cr As CompilerResults = CodeDomExample.CompileCode(provider, _
sourceFile, _
"TestGraph.EXE")
If cr.Errors.Count > 0 Then
' Display compilation errors.
textBox1.Text = "Errors encountered while building " + _
sourceFile + " into " + _
cr.PathToAssembly + ": " + ControlChars.CrLf
Dim ce As System.CodeDom.Compiler.CompilerError
For Each ce In cr.Errors
textBox1.AppendText(ce.ToString() + ControlChars.CrLf)
Next ce
run_button.Enabled = False
Else
textBox1.Text = "Source " + sourceFile + " built into " + _
cr.PathToAssembly + " with no errors."
run_button.Enabled = True
End If
End Sub
Private Sub run_button_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Process.Start("TestGraph.EXE")
End Sub
Private Function GetCurrentProvider() As CodeDomProvider
Dim provider As CodeDomProvider
Select Case CStr(Me.comboBox1.SelectedItem)
Case "CSharp"
provider = CodeDomProvider.CreateProvider("CSharp")
Case "Visual Basic"
provider = CodeDomProvider.CreateProvider("VisualBasic")
Case "JScript"
provider = CodeDomProvider.CreateProvider("JScript")
Case Else
provider = CodeDomProvider.CreateProvider("CSharp")
End Select
Return provider
End Function
Public Sub New()
Me.SuspendLayout()
' Set properties for label1.
Me.label1.Location = New System.Drawing.Point(395, 20)
Me.label1.Size = New Size(180, 22)
Me.label1.Text = "Select a programming language:"
' Set properties for comboBox1.
Me.comboBox1.Location = New System.Drawing.Point(560, 16)
Me.comboBox1.Size = New Size(190, 23)
Me.comboBox1.Name = "comboBox1"
Me.comboBox1.Items.AddRange(New String() {"CSharp", "Visual Basic", "JScript"})
Me.comboBox1.Anchor = System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right Or System.Windows.Forms.AnchorStyles.Top
Me.comboBox1.SelectedIndex = 0
' Set properties for generate_button.
Me.generate_button.Location = New System.Drawing.Point(8, 16)
Me.generate_button.Name = "generate_button"
Me.generate_button.Size = New System.Drawing.Size(120, 23)
Me.generate_button.Text = "Generate Code"
AddHandler generate_button.Click, AddressOf Me.generate_button_Click
' Set properties for compile_button.
Me.compile_button.Location = New System.Drawing.Point(136, 16)
Me.compile_button.Name = "compile_button"
Me.compile_button.Size = New System.Drawing.Size(120, 23)
Me.compile_button.Text = "Compile"
AddHandler compile_button.Click, AddressOf Me.compile_button_Click
' Set properties for run_button.
Me.run_button.Enabled = False
Me.run_button.Location = New System.Drawing.Point(264, 16)
Me.run_button.Name = "run_button"
Me.run_button.Size = New System.Drawing.Size(120, 23)
Me.run_button.Text = "Run"
AddHandler run_button.Click, AddressOf Me.run_button_Click
' Set properties for textBox1.
Me.textBox1.Anchor = System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right
Me.textBox1.Location = New System.Drawing.Point(8, 48)
Me.textBox1.Multiline = True
Me.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.textBox1.Name = "textBox1"
Me.textBox1.Size = New System.Drawing.Size(744, 280)
Me.textBox1.Text = ""
' Set properties for the CodeDomExampleForm.
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(768, 340)
Me.MinimumSize = New System.Drawing.Size(750, 340)
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.textBox1, _
Me.run_button, Me.compile_button, Me.generate_button, _
Me.comboBox1, Me.label1})
Me.Name = "CodeDomExampleForm"
Me.Text = "CodeDom Hello World Example"
Me.ResumeLayout(False)
End Sub
Protected Overloads Sub Dispose(ByVal disposing As Boolean)
MyBase.Dispose(disposing)
End Sub
<STAThread()> _
Shared Sub Main()
Application.Run(New CodeDomExampleForm())
End Sub
End Class
End Namespace
注釈
を CodeDomProvider 使用して、コード ジェネレーターとコード コンパイラのインスタンスを作成および取得できます。 コード ジェネレーターを使用して特定の言語のコードを生成でき、コード コンパイラを使用してコードをアセンブリにコンパイルできます。
注意
.NET Framework 2.0 では、コード ジェネレーターとコード コンパイラで使用できるメソッドは、コード プロバイダーから直接使用できます。 メソッドにアクセスするために または CreateCompiler を呼び出すCreateGenerator必要はありません。これらのメソッドは古いものとしてマークされています。 これは、既存のコード と新しいコード プロバイダーの実装に適用されます。
実装では CodeDomProvider 、通常、コード生成インターフェイスやコード コンパイル インターフェイスを使用して、コードを生成し、1 つのプログラミング言語のコンパイルを管理します。 Windows SDK に付属する実装では CodeDomProvider 、いくつかの言語がサポートされています。 これらの言語には、C#、Visual Basic、C++、JScript が含まれます。 開発者またはコンパイラ ベンダーは、 インターフェイスと ICodeCompiler インターフェイスをICodeGenerator実装し、CodeDOM のサポートを他のプログラミング言語に拡張する を提供CodeDomProviderできます。
マシン構成ファイル (Machine.config) の system.codedom> 要素は、開発者とコンパイラ ベンダーが追加の実装用の構成設定を追加するためのメカニズムを提供します。<CodeDomProvider
クラスには CodeDomProvider 、コンピューター上の実装を検出して列挙 CodeDomProvider するための静的メソッドが用意されています。 メソッドは GetAllCompilerInfo 、コンピューター上のすべての CodeDomProvider 実装の設定を返します。 メソッドは GetCompilerInfo 、プログラミング言語名に基づいて、特定 CodeDomProvider の実装の設定を返します。 メソッドは CreateProvider 、特定の言語の実装の CodeDomProvider インスタンスを返します。
構成ファイルの言語プロバイダー設定の詳細については、「 コンパイラと言語プロバイダーの設定スキーマ」を参照してください。
注意
このクラスは、クラス レベルでリンク要求と継承要求を行います。 SecurityException直接呼び出し元または派生クラスに完全信頼アクセス許可がない場合は、 がスローされます。 セキュリティ要求の詳細については、「 リンクの要求 と継承の 要求」を参照してください。
注意 (実装者)
.NET Framework バージョン 1.0 および 1.1 では、コード プロバイダーは、 ICodeGeneratorICodeParserICodeCompilerのCodeDomProvider実装で構成されています。 .NET Framework 2.0 では、CreateGenerator()および メソッドは古く、および のICodeCompilerICodeGeneratorメソッドは クラスでCodeDomProvider直接使用できます。CreateCompiler()CreateParser() これらのメソッドは、コード プロバイダーの実装でオーバーライドし、基本メソッドを呼び出さないでください。
コンストラクター
CodeDomProvider() |
CodeDomProvider クラスの新しいインスタンスを初期化します。 |
プロパティ
CanRaiseEvents |
コンポーネントがイベントを発生させることがきるかどうかを示す値を取得します。 (継承元 Component) |
Container |
IContainer を含む Component を取得します。 (継承元 Component) |
DesignMode |
Component が現在デザイン モードかどうかを示す値を取得します。 (継承元 Component) |
Events |
Component に結び付けられているイベント ハンドラーのリストを取得します。 (継承元 Component) |
FileExtension |
現在の言語のソース コード ファイルに使用する既定のファイル名拡張子を取得します。 |
LanguageOptions |
言語機能識別子を取得します。 |
Site |
Component の ISite を取得または設定します。 (継承元 Component) |
メソッド
CompileAssemblyFromDom(CompilerParameters, CodeCompileUnit[]) |
指定したコンパイラ設定を使用して、指定した System.CodeDom オブジェクトの配列に含まれている CodeCompileUnit ツリーに基づいてアセンブリをコンパイルします。 |
CompileAssemblyFromFile(CompilerParameters, String[]) |
指定したコンパイラ設定を使用して、指定したファイルに格納されているソース コードからアセンブリをコンパイルします。 |
CompileAssemblyFromSource(CompilerParameters, String[]) |
指定したコンパイラ設定を使用して、ソース コードが格納されている指定した文字列の配列からアセンブリをコンパイルします。 |
CreateCompiler() |
古い.
古い.
派生クラスでオーバーライドされると、新しいコード コンパイラを作成します。 |
CreateEscapedIdentifier(String) |
指定した値のエスケープ識別子を作成します。 |
CreateGenerator() |
古い.
古い.
派生クラスでオーバーライドされると、新しいコード ジェネレーターを作成します。 |
CreateGenerator(String) |
派生クラスでオーバーライドされると、出力用に指定されているファイル名を使用して、新しいコード ジェネレーターを作成します。 |
CreateGenerator(TextWriter) |
派生クラスでオーバーライドされると、出力用に指定されている TextWriter を使用して、新しいコード ジェネレーターを作成します。 |
CreateObjRef(Type) |
リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。 (継承元 MarshalByRefObject) |
CreateParser() |
古い.
古い.
派生クラスでオーバーライドされると、新しいコード パーサーを作成します。 |
CreateProvider(String) |
指定した言語の CodeDomProvider インスタンスを取得します。 |
CreateProvider(String, IDictionary<String,String>) |
指定された言語オプションおよびプロバイダー オプションの CodeDomProvider インスタンスを取得します。 |
CreateValidIdentifier(String) |
指定した値の有効な識別子を作成します。 |
Dispose() |
Component によって使用されているすべてのリソースを解放します。 (継承元 Component) |
Dispose(Boolean) |
Component によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。 (継承元 Component) |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GenerateCodeFromCompileUnit(CodeCompileUnit, TextWriter, CodeGeneratorOptions) |
指定した CodeDOM (Code Document Object Model) コンパイル単位のコードを生成し、指定したオプションを使用して、指定したテキスト ライターに生成されたコードを送信します。 |
GenerateCodeFromExpression(CodeExpression, TextWriter, CodeGeneratorOptions) |
指定した CodeDOM (Code Document Object Model) 式のコードを生成し、指定したオプションを使用して、指定したテキスト ライターに生成されたコードを送信します。 |
GenerateCodeFromMember(CodeTypeMember, TextWriter, CodeGeneratorOptions) |
指定した CodeDOM (Code Document Object Model) メンバー宣言のコードを生成し、指定したオプションを使用して、指定したテキスト ライターに生成されたコードを送信します。 |
GenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions) |
指定した CodeDOM (Code Document Object Model) 名前空間のコードを生成し、指定したオプションを使用して、指定したテキスト ライターに生成されたコードを送信します。 |
GenerateCodeFromStatement(CodeStatement, TextWriter, CodeGeneratorOptions) |
指定した CodeDOM (Code Document Object Model) ステートメントのコードを生成し、指定したオプションを使用して、指定したテキスト ライターに生成されたコードを送信します。 |
GenerateCodeFromType(CodeTypeDeclaration, TextWriter, CodeGeneratorOptions) |
指定した CodeDOM (Code Document Object Model) 型宣言のコードを生成し、指定したオプションを使用して、指定したテキスト ライターに生成されたコードを送信します。 |
GetAllCompilerInfo() |
このコンピューターの言語プロバイダーおよびコンパイラの構成設定を返します。 |
GetCompilerInfo(String) |
指定した言語の言語プロバイダーおよびコンパイラの構成設定を返します。 |
GetConverter(Type) |
指定したデータ ソースの TypeConverter を取得します。 |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetLanguageFromExtension(String) |
CodeDomProvider のコンパイラ構成セクションに構成されている、指定したファイル名拡張子に関連付けられた言語名を返します。 |
GetLifetimeService() |
古い.
対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
GetService(Type) |
Component またはその Container で提供されるサービスを表すオブジェクトを返します。 (継承元 Component) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
GetTypeOutput(CodeTypeReference) |
指定した CodeTypeReference で示される型を取得します。 |
InitializeLifetimeService() |
古い.
このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
IsDefinedExtension(String) |
コンピューター上に、ファイル名拡張子の関連する CodeDomProvider 実装が構成されているかどうかを調べます。 |
IsDefinedLanguage(String) |
コンピューター上に、言語の CodeDomProvider 実装が構成されているかどうかを調べます。 |
IsValidIdentifier(String) |
指定した値が現在の言語で有効な識別子かどうかを示す値を返します。 |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
MemberwiseClone(Boolean) |
現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。 (継承元 MarshalByRefObject) |
Parse(TextReader) |
指定したテキスト ストリームから読み取ったコードを CodeCompileUnit にコンパイルします。 |
Supports(GeneratorSupport) |
指定したコードを生成できるかどうかを示す値を返します。 |
ToString() |
Component の名前 (存在する場合) を格納する String を返します。 このメソッドはオーバーライドできません。 (継承元 Component) |
イベント
Disposed |
Dispose() メソッドの呼び出しによってコンポーネントが破棄されるときに発生します。 (継承元 Component) |
適用対象
こちらもご覧ください
.NET