使用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,一经查实,立即删除!

相关文章

UVA 11136——Hoax or what

题意:超市搞促销,每天都从箱子里拿出最大和最小的差作为促销金额,给出n天的促销情况,问最后总的促销金额。 思路:set构造,当有小票的时候放入set,每天结束的时候取出头和尾即可。 code&#xff…

SQL Server与Oracle、DB2三种数据库比较

开发数据库应用,选择一个好的数据库是非常重要的。本文从一些方面比较了SQL Server与Oracle、DB2三种数据库,为你选择数据库提供一些参考。开放性 SQL Server只能在Windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库…

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

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

codeforce 185 A——Plant

题意:给定一个大三角形,然后每次按照图片分割成4个小三角形,问n次后有多少个向上的三角形。 思路:矩阵快速幂,可以发现,每一个向上的的可以在下一次产生3个向上的,1个向下的,向下的每…

uva 10534——Wavio Sequence

题意:给定一个序列,求一个最长的序列,使得他的前半部分是递增的,而后半部分是递减的,且两部分的长度一样。 思路:经典的LIS问题,和openjudge登山问题一样,前后各扫一遍,找…

在asp.net中调用process.start执行程序

试了N次,发现不行,原来需要设置运行iis进程用户的权限,比较麻烦, MS的站点上有一篇说明:http://support.microsoft.com/default.aspx/kb/555134再找了找,可以先执行cmd.exe,然后以参数形式调用bat文件即可,参考文章:http://codebetter.com/blogs/brendan.tompkins/archive/2004…

UVA 11584—— Partitioning by Palindromes

题意&#xff1a;给定一个串&#xff0c;然后问最少可以分割成多少个回文串。 思路&#xff1a;简单dp&#xff0c;dp[i]min(dp[j]1,1<j<i),两次循环扫一遍即可&#xff0c;考察dp的思想。 code&#xff1a; #include <bits/stdc.h> using namespace std;const int…

UVA 10635——Prince and Princess

题意&#xff1a;给定两个长度为p1和q1的序列&#xff0c;求两个序列的LCS。 思路&#xff1a;如果直接使用朴素的LCS算法则O&#xff08;pq&#xff09;会超时&#xff0c;可以把A中出现的元素编码&#xff0c;然后映射到B&#xff08;只保留AB都存在的元素&#xff09;&…

Windows环境下smarty安装简明教程

整个配置过程分为九步走&#xff0c;文章看起来比较长&#xff0c;那是因为站长对每一个步骤都给出了没法再详细的解释&#xff0c;非常浅显&#xff0c;绝对是名副其实的“最简明教程”。按照这个教程&#xff0c;智商大于零的用户都能顺利配置好Smarty!~_~ 本文适用平台&…

UVA 10891——Game of Sum

题意&#xff1a;给定一个长度为n的序列&#xff0c;两个人分别从两端开始取若干数&#xff0c;但是规定要么左&#xff0c;要么右&#xff0c;问双方都采取最优策略下A的总和减去B的值。 思路&#xff1a;区间dp&#xff0c;dp&#xff08;i&#xff0c;j)表示先手的总和&…

SQL 分页存储过程(转)

因为邹建的分页存储过程不能返回记录总数&#xff0c;所以每次分页还又要统计一次&#xff0c;所以自己在里面加了个返回记录数&#xff0c;这下就好用了。 iPageCount int OUTPUT --定义输出变量&#xff0c;放在QueryStr上面 .... exec(selectFdShowfromQueryStrFdOrder) --…

[转]javascript小技巧,超强推荐

事件源对象event.srcElement.tagName event.srcElement.type 捕获释放event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键event.keyCode event.shiftKey event.altKey event.ctrlKey 事件返回值event.returnValue 鼠标位置event.x event.y 窗体活动元…

UVA 10453—— Make Palindrome

题意&#xff1a;给定一个字符串&#xff0c;求添加最少的字母使得该串是回文串。 思路&#xff1a;区间dp记忆化搜索。dp[i][j]为区间的最小添加数&#xff0c;那么dp[i][j]min(dp[i1][j],dp[i][j-1])1&#xff1b;相等时则为dp[i1][j-1]; code&#xff1a; #include <bits…

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

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

UVA 11552——Fewest Flops

题意&#xff1a;给定一个长为s的字符串&#xff08;其中s为k的倍数&#xff09;&#xff0c;然后按照前后分成s/k 组&#xff0c;每组之内可以重排&#xff0c;使得重排后的块数最少&#xff08;一段连续的字母算是一块&#xff09;。 思路&#xff1a;区间dp&#xff0c;dp[i…

中文简体字-繁体字转换 WEB 服务(源代码)

[ C#代码 ]//先需要引用&#xff1a;Microsoft.VisualBasic 这样就能使用VB函数了。using Microsoft.VisualBasic;繁体字转换为简体字 public string toSimplifiedChinese(string sText) { return Microsoft.VisualBasic.Strings.StrConv(sText, VbSt…

uva 10254——The Priest Mathematician

题意&#xff1a;汉诺塔题目的变形&#xff0c;有4根柱子&#xff0c;可以把顶部的k个盘子移到最后的柱子上&#xff0c;然后按照汉诺塔&#xff0c;问最后走的最小步数。 思路&#xff1a;递推&#xff0c;经过递推可以发现f[n] f[k]*2g[n-k]&#xff0c;其中f[n]为4个柱子时…

Resin-IOException: write() forbidden after writer is closed

今天 AMXSA刚刚拿下一个站PCANYWHERE本来打算上传WEBSHELL的&#xff01;谁知道跟我说 resin的机器报告错误&#xff01;晕死&#xff01;测试了所有的JSP-WEBSHELL都不支持 郁闷啊&#xff01;报告了一大堆错误 java.io.IOException: write() forbidden after writer is close…

IMUL、MUL和div的用法

MUL是进行无符号乘法的指令。MUL(无符号乘法)指令有三种格式:第一种是将8位的操作数于al相乘。第二种是将16位的操作数与ax相乘; 第三种是将32位的操作数与eax进行相乘 乘数和被乘数大小必须相同&#xff0c;乘积的尺寸是乘数/被乘数大小的两倍。 三种格式都既接受寄…

jQuery 1.2 带来的兼容问题及对策

jQuery 1.2 中抛弃了不少之前的功能&#xff0c;因此不能向前兼容&#xff0c;而有不少非官方的 jQuery 插件&#xff08;比如 thickbox&#xff09;&#xff0c;使用的是 jQuery 1.2 之前的语法开发的&#xff0c;如果这次还未根据新版本更新的&#xff0c;则可能会出现问题。…