使用CodeDom生成程序集

None.gifusing System;
None.gif
using Microsoft.CSharp;
None.gif
using System.CodeDom.Compiler;
None.gif
using System.CodeDom;
None.gif
None.gif
namespace Test.CUI
ExpandedBlockStart.gifContractedBlock.gif
{
InBlock.gif  
class Program
ExpandedSubBlockStart.gifContractedSubBlock.gif  
{
InBlock.gif    
static void Main()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
InBlock.gif      
// 创建编译器对象
InBlock.gif
      CSharpCodeProvider p = new CSharpCodeProvider();
InBlock.gif      ICodeCompiler cc 
= p.CreateCompiler();
InBlock.gif
InBlock.gif      
// 设置编译参数
InBlock.gif
      CompilerParameters options = new CompilerParameters();
InBlock.gif      options.ReferencedAssemblies.Add(
"System.dll");
InBlock.gif      options.GenerateExecutable 
= true;
InBlock.gif      options.OutputAssembly 
= "HelloWorld.exe";
InBlock.gif
InBlock.gif      
//options.ReferencedAssemblies.Add("System.Windows.Forms.dll");
InBlock.gif      
//options.EmbeddedResources.Add("Data.xml"); // 添加内置资源
InBlock.gif      
//options.CompilerOptions += " /target:winexe";
InBlock.gif      
//options.CompilerOptions += " /res:Resource1.res";
InBlock.gif      
//options.CompilerOptions += " /win32icon:test.ico";
InBlock.gif      
InBlock.gif      
// 创建源码
InBlock.gif
InBlock.gif      
// 1. 使用CodeDom创建源码
InBlock.gif      
//CodeCompileUnit cu = new CodeCompileUnit();
InBlock.gif      
//CodeNamespace Samples = new CodeNamespace("Samples");
InBlock.gif      
//cu.Namespaces.Add(Samples); 
InBlock.gif      
//Samples.Imports.Add(new CodeNamespaceImport("System")); 
InBlock.gif      
//CodeTypeDeclaration Class1 = new CodeTypeDeclaration("Class1"); 
InBlock.gif      
//Samples.Types.Add(Class1); 
InBlock.gif      
//CodeEntryPointMethod Start = new CodeEntryPointMethod(); 
InBlock.gif      
//CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression( 
InBlock.gif      
//  new CodeTypeReferenceExpression("System.Console"), "WriteLine", 
InBlock.gif      
//  new CodePrimitiveExpression("Hello World!") );
InBlock.gif      
//Start.Statements.Add(new CodeExpressionStatement(cs1));
InBlock.gif      
//Class1.Members.Add(Start); 
InBlock.gif
InBlock.gif      
// 2. 直接指定源码字符串
InBlock.gif
      string code = @"
InBlock.gif        using System;
InBlock.gif        namespace Samples
InBlock.gif        {
InBlock.gif          public class Class1
InBlock.gif          {
InBlock.gif            static void Main(string[] args)
InBlock.gif            {
InBlock.gif              Console.WriteLine(""Hello, World!"");
InBlock.gif              Console.WriteLine(DateTime.Now.ToString());
InBlock.gif            }
InBlock.gif          }
InBlock.gif        }
InBlock.gif      
";
InBlock.gif      CodeSnippetCompileUnit cu 
= new CodeSnippetCompileUnit(code);
InBlock.gif
InBlock.gif      
// 开始编译
InBlock.gif
      CompilerResults cr = cc.CompileAssemblyFromDom(options, cu);
InBlock.gif
InBlock.gif      
// 显示编译信息
InBlock.gif
      if (cr.Errors.Count == 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif        Console.WriteLine(
"\" {0}\" compiled ok!", cr.CompiledAssembly.Location);
InBlock.gif      
else
ExpandedSubBlockStart.gifContractedSubBlock.gif      
{
InBlock.gif        Console.WriteLine(
"Complie Error:");
InBlock.gif        
foreach (CompilerError error in cr.Errors)
InBlock.gif          Console.WriteLine(
" {0}", error);
ExpandedSubBlockEnd.gif      }

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

ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif}

None.gif
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编语言——第1次上机实验

准备: 硬件:pc机,32位win操作系统,能够运行dos,某些64位win10系统可能会不支持 软件:masm程序 实验内容: 1.winr运行dos,cd到指定的masm目录(为了调试方便,所…

[导入]一再的变故,终于决定何去何从.

dudu文章来源:http://blog.csdn.net/veiny/archive/2007/09/12/1781906.aspx 转载于:https://www.cnblogs.com/veiny/articles/904703.html

汇编语言——第2次上机实验

实验要求: 求表达式x*yz-200的值 实验步骤: 1.按照实验要求,画出相应的计算流程图 可以看到,先算x*y(保存在dx:cx),然后扩展z为双字节(dx:ax)&am…

SQL Server 2005 中附加只有mdf文件的数据库(修复置疑的数据库)

在利用VSTS中,VSTS不能创建团队项目,数据库ReportServer出现置疑现象,数据库无法打开。修复过程中,由于想利用SQL SERVER 2000的功能,先备份了ReportServer库文件和日志文件,然后删除数据库。在此之前先进行…

是否会成为问题——Linq to Sql的执行可能无法复用查询计划

查询计划 Sql Server在执行一条查询语句之前都对对它进行“编译”并生成“查询计划”,查询计划告诉Sql Server的查询引擎应该用什么方式进行工作。Sql Server会根据当前它可以收集到的各种信息(例如内存大小,索引的统计等等)把一条…

介绍及安装

不知读者是否听说过“宠物大战”?大意为Sun公司为帮助开发人员和架构师使用J2EE技术,发布了一个在线宠物商店Sun Java Pet Store。而微软公司则利用.NET技术也发布了一个实现同样功能的PetShop,并且在代码数量、性能等各方面对二者进行了比较…

自定函数获取datagrid,datalist,rpeater控件中header,footer栏中控件

在论坛上看到很多关于datagrid,gridview,datalist,rpeater提取header,footer中控件的问题,整理了一下.供大家分享下面我以DataGrid为便进行说明.footer栏又称页脚栏,在很多时候我们可以在该栏放页码及相当的功能键.但是最后在获得这些控件引用的时候就会有点麻烦,由于footer(页…

随机广告图片

1<script language”JavaScript”>2var imageList newArray;3imageList[0] “image1.jpg”;4imageList[1] “image2.jpg”;5imageList[2] “image3.jpg”;6imageList[3] “image4.jpg”;7var urlList newArray;8urlList[0] “http://some.host/”;9urlList[1] “http://a…

Core IO学习心得

最近看Core IO的内容&#xff0c;有一些心得给大家共享一下&#xff1a; Core IO作为微软IT基础架构优化框架中的一个部分。该框架包含三个部分&#xff1a;CIO&#xff0c;BPIO和APIO&#xff1a; CIO&#xff08;核心基础架构优化&#xff09;专注于核心基础机构组件&#x…

经典算法研究系列:十、从头到尾彻底理解傅里叶变换算法、上

经典算法研究系列&#xff1a;十、从头到尾彻底理解傅里叶变换算法、上 作者&#xff1a;July、dznlong 二零一一年二月二十日 推荐阅读&#xff1a;The Scientist and Engineers Guide to Digital Signal Processing&#xff0c;By Steven W. Smith, Ph.D。此书地址&#xf…

经典算法研究系列:十、从头到尾彻底理解傅里叶变换算法、下

经典算法研究系列&#xff1a;十、从头到尾彻底理解傅里叶变换算法、下 作者&#xff1a;July、dznlong 二零一一年二月二十二日 推荐阅读&#xff1a;The Scientist and Engineers Guide to Digital Signal Processing&#xff0c;By Steven W. Smith, Ph.D。此书地址&#…

调出sharepoint错误的详细页面

记录一个小技巧&#xff1a; 在开发sharepoint的时候经常出现" An unexpected error has occurred."的页面&#xff0c;让人非常的郁闷。 打开web.config, 找到&#xff1a; <SafeMode MaxControls"200" CallStack"false" DirectFileDepende…

职业生涯中12个最致命的想法

1、总觉得自己不够好  这种人虽然聪明、有历练&#xff0c;但是一旦被提拔&#xff0c;反而毫无自信&#xff0c;觉得自己不胜任。4、无条件地回避冲突  这种人一般会不惜一切代价&#xff0c;避免冲突。一位本来应当为部属据理力争的主管&#xff0c;为了回避冲突&#xf…

树链剖分入门讲解

“在一棵树上进行路径的修改、求极值、求和”乍一看只要线段树就能轻松解决&#xff0c;实际上&#xff0c;仅凭线段树是不能搞定它的。我们需要用到一种貌似高级的复杂算法——树链剖分。 树链&#xff0c;就是树上的路径。剖分&#xff0c;就是把路径分类为重链和轻链。 记…

选择模块数据读取

1if(Bname"")2{ 3 Response.Write("<script languagejavascript>alert(错误的链接地址&#xff01;);history.go(-1);</script>"); 4 Response.End(); 5 }6if(Bid106&&Sid!0)7{ 8 //<!-- 标准法规--> 9 if(Sid127…

Terrafugia希望在今年夏天带来真正可飞的Airplane

Terrafugia希望在今年夏天带来真正可飞的Airplane 大家都知道&#xff0c;Terrafugia的汽车飞机混合机种&#xff0c;他是是辆双座的汽车&#xff0c;拥有100-500英里的速度范围&#xff0c;一个独立的无铅汽油储备箱&#xff0c;同时配置有电子计算机&#xff0c;用来在空中飞…

四川汶川地震祈福赈灾宣传画、报纸头版精选第二版(超多图)

本篇Key词&#xff1a; 汶川地震祈福图片汶川地震祈福壁纸四川汶川地震祈福赈灾宣传画 四川汶川地震祈福赈灾宣传画 天使 不要害怕&#xff0c;手牵手渡过难关 孩子不哭 生命奇迹 从废墟中站起来 祝福灾区人民 众志成城&#xff0c;抗震救灾 众志成城&#xff0c;抗震救灾2 众…

2016年湖南省第十二届大学生计算机程序设计竞赛

题目&#xff1a; 任意门 听说这套题目是叉姐出的&#xff0c;感觉呵呵了。。。 据说现场牌都不够发的&#xff01;&#xff01;&#xff01;只能说给湖南省出的题目太强了&#xff0c;不适合新手去做&#xff0c;当然我这种老手也不见得做的多好&#xff0c;出了3题&#xf…

控件中的Events个人理解。

首先&#xff0c;了解一下与事件和委托有关的几个类和属性&#xff1a;Delegate, MulticastDelegate, EventHandler, EventHandlerList, EventHandlerList.ListEntry, Control, ComponentControl的Events属性是由System.ComponentModel.Component 继承而来,它是EventHandlerLis…

ManualResetEvent用法

ManualResetEvent 允许线程通过发信号互相通信。通常&#xff0c;此通信涉及一个线程在其他线程进行之前必须完成的任务。 public static ManualResetEvent mre new ManualResetEvent(false); ManualResetEvent建立时是把false作为start的初始状态&#xff0c;这个类用于通知另…