CodeDOM 提供了表示许多常见的源代码元素类型的类型。您可以设计一个生成源代码模型的程序,使用 CodeDOM 元素构成一个对象图。可以使用受支持的编程语言的 CodeDOM 代码生成器,将该对象图呈现为源代码。CodeDOM 也可以用于将源代码编译成二进制程序集。
CodeDOM 的一些一般用途包括:
-
模板化代码生成:生成 ASP.NET、XML Web 服务客户端代理、代码向导、设计器或其他代码发出机制的代码。
-
动态编译:支持以一种或多种语言进行代码编译。
代码:
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Text;
using Microsoft.CSharp;
using System.IO;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
create();
}
private static void create()
{
CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider();
CodeCompileUnit unit = new CodeCompileUnit();
CodeNamespace nameSpace = new CodeNamespace("samples");
unit.Namespaces.Add(nameSpace);
nameSpace.Imports.Add(new CodeNamespaceImport("System"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Xml"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Text"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Workflow.Activities"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Workflow.Runtime"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Workflow.ComponentModel"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.ComponentModel.Design"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.ComponentModel"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Collections"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Drawing"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Workflow.ComponentModel.Compiler"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Workflow.ComponentModel.Serialization"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Workflow.ComponentModel.Design"));
nameSpace.Imports.Add(new CodeNamespaceImport("System.Workflow.Activities.Rules"));
CodeTypeDeclaration class1 = new CodeTypeDeclaration("aa.xoml");
nameSpace.Types.Add(class1);
CodeMemberMethod code1_execute = new CodeMemberMethod();
code1_execute.Name = "code1_execute";
//code1_execute.ReturnType=new CodeTypeReference(""
code1_execute.Parameters.Add(new CodeParameterDeclarationExpression("System.Object", "sender"));
code1_execute.Parameters.Add(new CodeParameterDeclarationExpression("System.EventArgs ", "e"));
CodeMethodInvokeExpression express = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"), "WriteLine", new CodePrimitiveExpression("aa"));
code1_execute.Statements.Add(express);
class1.Members.Add(code1_execute);
string sourceFile = "";
sourceFile = "Text.cs";
IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), " ");
provider.GenerateCodeFromCompileUnit(unit, tw, new CodeGeneratorOptions());
tw.Close();
StreamReader reader = new StreamReader("Text.cs");
Console.WriteLine(reader.ReadToEnd());
reader.Close();
Console.Read();
}
}
}
运行效果:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace samples {
using System;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using System.Workflow.Activities;
using System.Workflow.Runtime;
using System.Workflow.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel;
using System.Collections;
using System.Drawing;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.ComponentModel.Design;
using System.Workflow.Activities.Rules;
public class aa.xoml {
private void code1_execute(object sender, System.EventArgs e) {
System.Console.WriteLine("aa");
}
}
}