zoukankan      html  css  js  c++  java
  • 代码文档模型

    //1、生成c#CodeDom
    using System;

    using System.CodeDom;

    using System.CodeDom.Compiler;

    using Microsoft.CSharp;

    using System.IO;

    using System.Collections;

     

    namespace DemoCodeDOM

    {

         class Class1

         {

              [STAThread]

              static void Main(string[] args)

               {

                    GenerateCode();

                    System.Console.WriteLine("Generate Code OK");

                    CompilerResults crt = CompileCode("GenCodeHello.cs");

     

                    //下面是编译的结果

                    // If errors occurred during compilation, output the compiler output and errors.

                    if( crt.Errors.Count > 0 ) {

                         for( int i=0; i<crt.Output.Count; i++ )               

                              Console.WriteLine( crt.Output[i] );

                         for( int i=0; i<crt.Errors.Count; i++ )               

                              Console.WriteLine( i.ToString() + ": " + crt.Errors[i].ToString() );

           

                    }

                    else {

                         // Display information about the compiler's exit code and the generated assembly.

                         Console.WriteLine( "Compiler returned with result code: " + crt.NativeCompilerReturnValue.ToString() );

                         Console.WriteLine( "Generated assembly name: " + crt.CompiledAssembly.FullName );

                         if( crt.PathToAssembly == null )

                              Console.WriteLine( "The assembly has been generated in memory." );

                         else

                              Console.WriteLine( "Path to assembly: " + crt.PathToAssembly );

            

                         // Display temporary files information.

                         if( !crt.TempFiles.KeepFiles )               

                              Console.WriteLine( "Temporary build files were deleted." );

                         else {

                              Console.WriteLine( "Temporary build files were not deleted." );

                               // Display a list of the temporary build files

                              IEnumerator enu = crt.TempFiles.GetEnumerator();                                       

                              for( int i=0; enu.MoveNext(); i++ )                                         

                                    Console.WriteLine( "TempFile " + i.ToString() + ": " + (string)enu.Current );                 

                         }

                    }

     

                    System.Console.Read();

               }

     

               //生成CodeDOM图,这一步是最复杂的部分,后面生成代码与编译都是以这里的东西为蓝本

              private static CodeCompileUnit ComplieUnit() {

                    //生成一个可编译的单元,这是最根部的东西

                    CodeCompileUnit compunit = new CodeCompileUnit();

                    CodeNamespace sample = new CodeNamespace("Sample");//定义一个名为Sample的命名空间

                   

     

                    CodeTypeDeclaration MyClass = new CodeTypeDeclaration("DemoClass");//定义一个名为DemoClass的类

                   

                    CodeEntryPointMethod Start = new CodeEntryPointMethod();//定义程序入口点,就是Main()

                    //下面两句产生调用方法的语句

                    CodeMethodInvokeExpression cs = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"),

                         "WriteLine",new CodePrimitiveExpression("Hello World!"));//这句会产生如下的C#代码 System.Console.WriteLine("Hello World!");

                    CodeMethodInvokeExpression wt = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"),

                         "Read");//这句是 System.Console.Read();

     

                    //下面一系列语句把上述定义好的元素联接起来

                    compunit.Namespaces.Add(sample);

                    sample.Imports.Add(new CodeNamespaceImport("System"));//导入System命名空间

                    sample.Types.Add(MyClass);

                    MyClass.Members.Add(Start);

                    Start.Statements.Add(cs);

                    Start.Statements.Add(wt);

              

                    return compunit;

               }

     

               //根据CodeDOM产生程序代码,代码文件就是GenCodeHello.cs

              public static void GenerateCode() {

                   CSharpCodeProvider cprovider = new CSharpCodeProvider();//CSharpCodeProvider//当然换个CSharpCodeProvider就产生VB.NET的代码

                    ICodeGenerator gen = cprovider.CreateGenerator();

                    StreamWriter sw = new StreamWriter("GenCodeHello.cs",false);

                    gen.GenerateCodeFromCompileUnit(ComplieUnit(),sw,new CodeGeneratorOptions());

     

                    sw.Close();

               }

     

               //编译源代码

              public static CompilerResults CompileCode(string filepath) {

                    CSharpCodeProvider cprovider = new CSharpCodeProvider();

                    ICodeCompiler compiler = cprovider.CreateCompiler();

     

                    //编译参数

                    CompilerParameters cp = new CompilerParameters(new string[] {"System.dll"},filepath.Substring(0,filepath.LastIndexOf(".") + 1) + "exe",false);

                    cp.GenerateExecutable = true;//生成EXE,不是DLL

     

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

                    return cr;

               }

         }

    }

    //2、生成VBcodeDOM
    using System;

    using System.CodeDom;

    using System.CodeDom.Compiler;

    using Microsoft.CSharp;

    using System.IO;

    using System.Collections;

     

    namespace DemoCodeDOM

    {

         class Class1

         {

              [STAThread]

              static void Main(string[] args)

               {

                    GenerateCode();

                    System.Console.WriteLine("Generate Code OK");

                    CompilerResults crt = CompileCode("GenCodeHello.cs");

     

                    //下面是编译的结果

                    // If errors occurred during compilation, output the compiler output and errors.

                    if( crt.Errors.Count > 0 ) {

                         for( int i=0; i<crt.Output.Count; i++ )               

                              Console.WriteLine( crt.Output[i] );

                         for( int i=0; i<crt.Errors.Count; i++ )               

                              Console.WriteLine( i.ToString() + ": " + crt.Errors[i].ToString() );

           

                    }

                    else {

                         // Display information about the compiler's exit code and the generated assembly.

                         Console.WriteLine( "Compiler returned with result code: " + crt.NativeCompilerReturnValue.ToString() );

                         Console.WriteLine( "Generated assembly name: " + crt.CompiledAssembly.FullName );

                         if( crt.PathToAssembly == null )

                              Console.WriteLine( "The assembly has been generated in memory." );

                         else

                              Console.WriteLine( "Path to assembly: " + crt.PathToAssembly );

            

                         // Display temporary files information.

                         if( !crt.TempFiles.KeepFiles )               

                              Console.WriteLine( "Temporary build files were deleted." );

                         else {

                              Console.WriteLine( "Temporary build files were not deleted." );

                               // Display a list of the temporary build files

                              IEnumerator enu = crt.TempFiles.GetEnumerator();                                       

                              for( int i=0; enu.MoveNext(); i++ )                                         

                                    Console.WriteLine( "TempFile " + i.ToString() + ": " + (string)enu.Current );                 

                         }

                    }

     

                    System.Console.Read();

               }

     

               //生成CodeDOM图,这一步是最复杂的部分,后面生成代码与编译都是以这里的东西为蓝本

              private static CodeCompileUnit ComplieUnit() {

                    //生成一个可编译的单元,这是最根部的东西

                    CodeCompileUnit compunit = new CodeCompileUnit();

                    CodeNamespace sample = new CodeNamespace("Sample");//定义一个名为Sample的命名空间

                   

     

                    CodeTypeDeclaration MyClass = new CodeTypeDeclaration("DemoClass");//定义一个名为DemoClass的类

                   

                    CodeEntryPointMethod Start = new CodeEntryPointMethod();//定义程序入口点,就是Main()

                    //下面两句产生调用方法的语句

                    CodeMethodInvokeExpression cs = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"),

                         "WriteLine",new CodePrimitiveExpression("Hello World!"));//这句会产生如下的C#代码 System.Console.WriteLine("Hello World!");

                    CodeMethodInvokeExpression wt = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("System.Console"),

                         "Read");//这句是 System.Console.Read();

     

                    //下面一系列语句把上述定义好的元素联接起来

                    compunit.Namespaces.Add(sample);

                    sample.Imports.Add(new CodeNamespaceImport("System"));//导入System命名空间

                    sample.Types.Add(MyClass);

                    MyClass.Members.Add(Start);

                    Start.Statements.Add(cs);

                    Start.Statements.Add(wt);

              

                    return compunit;

               }

     

               //根据CodeDOM产生程序代码,代码文件就是GenCodeHello.cs

              public static void GenerateCode() {

                   Microsoft.VisualBasic.VBCodeProvider cprovider = new Microsoft.VisualBasic.VBCodeProvider();//CSharpCodeProvider//当然换个Microsoft.VisualBasic.VBCodeProvider就产生VB.NET的代码

                    ICodeGenerator gen = cprovider.CreateGenerator();

                    StreamWriter sw = new StreamWriter("GenCodeHello.cs",false);

                    gen.GenerateCodeFromCompileUnit(ComplieUnit(),sw,new CodeGeneratorOptions());

     

                    sw.Close();

               }

     

               //编译源代码

              public static CompilerResults CompileCode(string filepath) {

                    Microsoft.VisualBasic.VBCodeProvider cprovider = new Microsoft.VisualBasic.VBCodeProvider();

                    ICodeCompiler compiler = cprovider.CreateCompiler();

     

                    //编译参数

                    CompilerParameters cp = new CompilerParameters(new string[] {"System.dll"},filepath.Substring(0,filepath.LastIndexOf(".") + 1) + "exe",false);

                    cp.GenerateExecutable = true;//生成EXE,不是DLL

     

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

                    return cr;

               }

         }

    }

     声明:代码引自:http://lichdr.cnblogs.com/category/12610.html

  • 相关阅读:
    Adobe Flex初记
    将获得datebox值的文本形式转为日期格式
    Java代码中获取Json的key值
    SortedMap与TreeMap的一个典型应用
    上传本地代码到github&&从github下载源码
    springMVC第一课--配置文件
    MySQL视图的优缺点以及如何创建视图
    一张图看懂IaaS, PaaS和SaaS的区别
    二十三种设计模式-六大原则
    数据库设计三大范式
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/660421.html
Copyright © 2011-2022 走看看