usingSystem;
usingMicrosoft.CSharp;
usingSystem.CodeDom.Compiler;
usingSystem.CodeDom;

namespaceTest.CUI
{
classProgram
{
staticvoidMain()
{
//创建编译器对象CSharpCodeProvider p=newCSharpCodeProvider();
      ICodeCompiler cc
=p.CreateCompiler();

//设置编译参数CompilerParameters options=newCompilerParameters();
      options.ReferencedAssemblies.Add(
"System.dll");
      options.GenerateExecutable
=true;
      options.OutputAssembly
="HelloWorld.exe";

//options.ReferencedAssemblies.Add("System.Windows.Forms.dll");
//options.EmbeddedResources.Add("Data.xml");//添加内置资源
//options.CompilerOptions += " /target:winexe";
//options.CompilerOptions += " /res:Resource1.res";
//options.CompilerOptions += " /win32icon:test.ico";
      
//创建源码

//1. 使用CodeDom创建源码
//CodeCompileUnit cu = new CodeCompileUnit();
//CodeNamespace Samples = new CodeNamespace("Samples");
//cu.Namespaces.Add(Samples); 
//Samples.Imports.Add(new CodeNamespaceImport("System")); 
//CodeTypeDeclaration Class1 = new CodeTypeDeclaration("Class1"); 
//Samples.Types.Add(Class1); 
//CodeEntryPointMethod Start = new CodeEntryPointMethod(); 
//CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression( 
//new CodeTypeReferenceExpression("System.Console"), "WriteLine", 
//new CodePrimitiveExpression("Hello World!") );
//Start.Statements.Add(new CodeExpressionStatement(cs1));
//Class1.Members.Add(Start); 

//2. 直接指定源码字符串stringcode=@"        using System;
        namespace Samples
        {
          public class Class1
          {
            static void Main(string[] args)
            {
              Console.WriteLine(""Hello, World!"");
              Console.WriteLine(DateTime.Now.ToString());
            }
          }
        }
";
      CodeSnippetCompileUnit cu
=newCodeSnippetCompileUnit(code);

//开始编译CompilerResults cr=cc.CompileAssemblyFromDom(options, cu);

//显示编译信息if(cr.Errors.Count==0)
        Console.WriteLine(
"\" {0}\"compiled ok!", cr.CompiledAssembly.Location);
else{
        Console.WriteLine(
"Complie Error:");
foreach(CompilerError errorincr.Errors)
          Console.WriteLine(
"{0}", error);
      }

      Console.WriteLine(
"Press Enter key to exit...");
      Console.ReadLine();
    }
  }
}

ICodeCompiler 除了 CompileAssemblyFromDom 方法外,还有:

CompileAssemblyFromDom
使用指定的编译器设置从指定的 CodeCompileUnit 所包含的 System.CodeDom 树中编译程序集。

CompileAssemblyFromDomBatch
基于包含在 CodeCompileUnit 对象的指定数组中的 System.CodeDom 树,使用指定的编译器设置编译程序集。

CompileAssemblyFromFile
从包含在指定文件中的源代码,使用指定的编译器设置编译程序集。

CompileAssemblyFromFileBatch
从包含在指定文件中的源代码,使用指定的编译器设置编译程序集。

CompileAssemblyFromSource
从包含源代码的指定字符串,使用指定的编译器设置编译程序集。

CompileAssemblyFromSourceBatch
从包含源代码的字符串的指定数组,使用指定的编译器设置编译程序集。

如此我们可以非常方便编译一个复杂的程序集。

转载于:https://www.cnblogs.com/kyovcs/archive/2007/07/24/829338.html

使用CodeDom生成程序集相关推荐

  1. vs2012中程序集生成无法自动在网站Bin目录下生成Dll文件?(已解决!)

    最近,突然发现生成程序集后,网站bin目录下dll没有更新,也没有自动生成dll文件,通过近半个小时的摸索和实验,找到了解决方法: 1.右键网站,不是项目,选择[属性页],在左侧[引用]中如果没有,就 ...

  2. 通过NHibernate ORM和CodeDom在任何数据库中自动生成表以生成代码

    目录 介绍 NHibernate NHibernate的优点: NHibernate缺点: NHibernate如何运作? CodeDOM CodeDOM的优点: CodeDOM缺点: 逐步使用代码 ...

  3. 在 C# 中生成代码的四种方式——包括.NET 5中的Source Generators

    Microsoft在最新的C#版本中引入了Source Generator.这是一项新功能,可以让我们在代码编译时生成源代码.在本文中,我将介绍四种C#中的代码生成方式,以简化我们的日常工作.然后,您 ...

  4. 共享程序集和强命名程序集(3):强命名程序集的一些作用

    强命名程序集能防篡改 用私钥对程序集进行签名,并将公钥和签名嵌入程序集,CLR就可以炎症程序集未被修改或破坏.程序集安装到GAC时,系统对包含清单的那个文件的内容进行哈希处理,将Hash值与PE文件中 ...

  5. .NET 之路 | 007 详解 .NET 程序集

    上一篇我们介绍了 Roslyn 编译器,我们知道,我们编写的 C#/VB 代码经过 Roslyn 编译器编译后会生成程序集文件.按照之前讲的 .NET 执行模型的顺序,这一篇我具体讲讲程序集. 什么是 ...

  6. 使用 Visual C# .NET 生成 Office COM 外接程序

    Microsoft Office XP 和 Microsoft Office 2003 都支持一种新的统一的设计结构,这种结构用于生成应用程序外接程序以增强和控制 Office 应用程序.这些外接程序 ...

  7. .NET基础 (03)生成、部署和管理

    生成.部署和管理 1 如何生成强签名的程序集 2 如何把程序集放入GAC中 3 延迟签名及其作用 4 程序集的版本分哪几部分 1 如何生成强签名的程序集 在生成程序集时,CLR提供了两种可选类型: 强 ...

  8. [007] 详解 .NET 程序集

    上一篇我们介绍了 Roslyn 编译器,我们知道,我们编写的 C#/VB 代码经过 Roslyn 编译器编译后会生成程序集文件.按照之前讲的 .NET 执行模型的顺序,这一篇我具体讲讲程序集. 1什么 ...

  9. 用C#编写的代码经C#编译器后,并非生成本地代码而是生成托管代码

    用C#编写的代码经C#编译器后,并非生成本地代码而是生成托管代码.也就是说,程序集在打包时是连同CLR一起打包的.在客户端的机器上,CLR一行行的读取IL,在读取每行IL时,CLR利用JIT编译器将I ...

最新文章

  1. Java 8系列之Stream的强大工具Collector
  2. find 按文件修改时间查找文件
  3. 4.帧循环(游戏主循环),schedule
  4. python基础语法-三大内建数据结构之集合(set)
  5. 对于大型公司项目平台选择j2ee的几层认识
  6. Python基础(七)--模块和包
  7. 使用conda/pip安装pytorch 0.3.1教程(mac/windos/linux) pytorch 0.2.1
  8. 免费人脸识别工具可以跟踪社交媒体网站上的人
  9. 程序设计工程师c语言,《C语言程序设计》自学百问.doc
  10. 3个平台下的ffmpeg——ffmpeg编译
  11. php与drupal,php-将网站转换为Drupal-噩梦已经开始
  12. Xshell连接redhat乱码问题
  13. Android之——AsyncTask和Handler对照
  14. IT项目失败的常见原因分析
  15. 如何选择一款合适的福禄克数字万用表?FLUKE
  16. ViacomCBS与Sky合作在欧洲推出Paramount+
  17. [内存泄漏]pppd程序导致的内存泄漏
  18. 参赛【GGJ2022】回顾,作品--双生共合
  19. 计算机网络 | 构造超网 | CIDR
  20. 亮通道先验Retinex对低照度图像的光照补偿——思路总结

热门文章

  1. 虚拟鼠标代替安卓触屏_美术学院18级虚拟空间设计专业数字图像程序基础课程优秀结课成果展示优秀学生王雨禾作品展示...
  2. Phinecos(洞庭散人) 专注于开源技术的研究与应用 TinyXML:一个优秀的C++ XML解析器
  3. linux gpt引导分区,linux 引导gpt分区windows及clover
  4. Matlab非线性拟合工具箱cftool
  5. Liunx 命令大全
  6. AUTOSAR从入门到精通100讲(三十八)-通信网络中的⽐特和帧同步技术
  7. 汽车电子专业知识篇(四)-一文详解无人驾驶中的各种感知传感器
  8. python如果选择不在列表里_Python-list.remove(x)x不在列表中
  9. 系统已有MYSQL环境,如何安装宝塔面板
  10. 输出空格隔开换行_【前端干货】CSS 的空格处理