zoukankan      html  css  js  c++  java
  • 使用CodeDom来生成.cs文件

    在学使用CodeDom来动态生成.cs文件,使用帮助里的例子,代码居然编译不通过
    自己修改,调试通过,整理后主要代码如下:

    命名空间:
    using System.CodeDom;
    using System.CodeDom.Compiler;
    using Microsoft.CSharp;
    using System.IO;

      private void button1_Click(object sender, System.EventArgs e)
      {
       CodeCompileUnit CompileUnit = new CodeCompileUnit();
       CodeNamespace Samples = new CodeNamespace("Samples");
       Samples.Imports.Add( new CodeNamespaceImport("System") );
       CompileUnit.Namespaces.Add( Samples );
       CodeTypeDeclaration Class1 = new CodeTypeDeclaration("Class1");
       Samples.Types.Add(Class1);

       CodeEntryPointMethod Start = new CodeEntryPointMethod();
       
       //输出HelloWord
       CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression( new
        CodeTypeReferenceExpression("System.Console"), "WriteLine", new
        CodePrimitiveExpression("Hello World!") );
       
       Start.Statements.Add(cs1);
       

       Class1.Members.Add( Start );
       
    //CSharpCodeProvider provider = new CSharpCodeProvider();
       //ICodeGenerator gen = provider.CreateGenerator();
       GenerateGraph(CompileUnit);

      }
      public void GenerateGraph(CodeCompileUnit compileunit)
      {
       // Obtains an ICodeGenerator from a CodeDomProvider class.
       CSharpCodeProvider provider = new CSharpCodeProvider();
       ICodeGenerator gen = provider.CreateGenerator();
      
       // Creates a StreamWriter to an output file.
       StreamWriter sw = new StreamWriter("d:\\TestGraph.cs", false);

       // Generates source code using the code generator.
       gen.GenerateCodeFromCompileUnit(compileunit, sw, new    CodeGeneratorOptions());
      
      
     // Closes the output files.
       sw.Close();
      }

      private void button2_Click(object sender, System.EventArgs e)
      {
       CompileCode("d:\\TestGraph.cs");
      }
      //编辑生成Exe
      public CompilerResults CompileCode(string filepath)
      {
      
     // Obtains an ICodeCompiler from a CodeDomProvider class.
       CSharpCodeProvider provider = new CSharpCodeProvider();
       ICodeCompiler compiler = provider.CreateCompiler();

       // Configures a compiler parameters object which links System.dll and
       // generates a file name based on the specified source file name.
       CompilerParameters cp = new CompilerParameters(new string[] {"System.dll"}, filepath.Substring(0, filepath.LastIndexOf(".")+1)+"exe", false);

       // Indicates that an executable rather than a .dll should be generated.
       cp.GenerateExecutable = true;

       // Invokes compilation.
       CompilerResults cr = compiler.CompileAssemblyFromFile(cp, filepath);  

       // Returns the results of compilation.
       return cr;       
      }

    帮助里的例子在:
    .NET Framework->使用 .NET Framework 编程->动态生成和编译以多种语言表示的源代码

  • 相关阅读:
    Delphi中DLL初始化和退出处理
    03003_Http响应
    雷林鹏分享:CSS 属性 选择器
    雷林鹏分享:CSS 媒体类型
    雷林鹏分享:CSS 图像拼合技术
    雷林鹏分享:CSS 图像透明/不透明
    雷林鹏分享:CSS 图片廊
    雷林鹏分享:CSS 提示工具(Tooltip)
    雷林鹏分享:CSS 下拉菜单
    雷林鹏分享:CSS 导航栏
  • 原文地址:https://www.cnblogs.com/dahuzizyd/p/18119.html
Copyright © 2011-2022 走看看