string strCode = @"
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Reflection; namespace aaaa
{
public class Program
{
static void Main(string[] args)
{
GetDoc(""Testdoc.doc"");
Console.WriteLine(""输出成功"");
Console.ReadLine();
} public static void GetDoc(string name)
{
try
{
Assembly ass = Assembly.GetExecutingAssembly();
Stream ss = ass.GetManifestResourceStream(name);
if (ss != null)
{
byte[] buffer = new byte[ss.Length];
ss.Read(buffer, 0, buffer.Length);
File.WriteAllBytes(Environment.CurrentDirectory + ""\\ProbeDoc.doc"", buffer);
}
}
catch
{
Console.WriteLine(""error"");
}
}
}
}"; CompilerParameters objCompilerParams = new CompilerParameters();
objCompilerParams.GenerateExecutable = true; //编译成exe还是dll
objCompilerParams.GenerateInMemory = false; //是否写入内存,不写入内存就写入磁盘
objCompilerParams.OutputAssembly = "F:\\abcd.exe"; //输出路径
objCompilerParams.IncludeDebugInformation = false; //是否产生pdb调试文件 默认是false
objCompilerParams.ReferencedAssemblies.Add("System.dll");
objCompilerParams.ReferencedAssemblies.Add("System.Core.dll");
objCompilerParams.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
objCompilerParams.EmbeddedResources.Add("D:\\Testdoc.doc"); //编译器选项:编译成(存储在内存中)的DLL
/*objCompilerParams.CompilerOptions = "/target:library /optimize";
//编译时在内存输出
objCompilerParams.GenerateInMemory = true;
//不生成调试信息
objCompilerParams.IncludeDebugInformation = false;*/
//创建编译类
CSharpCodeProvider objCompiler = new CSharpCodeProvider();
//进行编译
CompilerResults objCompileResults = objCompiler.CompileAssemblyFromSource(objCompilerParams, strCode); //获取编译结果:程序集
Assembly objAssembly = objCompileResults.CompiledAssembly; ////获取编译成的程序集的信息
//object objMainClassInstance = objAssembly.CreateInstance("Program");
//Type objMainClassType = objMainClassInstance.GetType(); ////调用程序集中的类,执行类中的方法,得到结果
//objMainClassType.GetMethod("Main").Invoke(objMainClassInstance, null);
//objMainClassType.GetMethod("PrintWorld").Invoke(objMainClassInstance, null);

C#动态编译dll或exe的更多相关文章

  1. OpenCV:Debug和Release模式 && 静态和动态编译

    1.Release和Debug的区别 Release版称为发行版,Debug版称为调试版. Debug中可以单步执行.跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢.Release版运行速度较 ...

  2. 将Qt5.5 动态链接生成的exe及依赖dll打包方法

    Qt静态编译链接生成的exe文件,不需依赖七大姑八大姨的一堆dll,可以独立运行,发布很方便.但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制.那有没有办法即能享受静态编译的方便,又不受开源 ...

  3. win环境下,用虚拟化工具打包Qt动态编译exe的过程(使用Enigma Virtual Box)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://goldlion.blog.51cto.com/4127613/834075 引子 ...

  4. 将Qt 动态链接生成的exe及依赖dll打包方法

    源地址:http://blog.csdn.net/ztz0223/article/details/8939341 将Qt 动态链接生成的exe及依赖dll打包方法 原文:http://www.qtcn ...

  5. Qt--将Qt 动态链接生成的exe及依赖dll打包方法

    Qt静态编译链接生成的exe文件,不需依赖dll,可以独立运行,发布很方便. 但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制. 方法之一,就是用动态编译,然后把exe和需要的dll整合成一 ...

  6. c#动态编译并动态生成dll

    /// <summary> /// 动态编译并执行代码 /// </summary> /// <param name="code">代码< ...

  7. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)0-------通过应用程序域AppDomain加载和卸载程序集

    本博客中以“C#.Net 如何动态加载与卸载程序集(.dll或者.exe)”开头的都是引用莫问奴归处 微软装配车的大门似乎只为货物装载敞开大门,却将卸载工人拒之门外.车门的钥匙只有一把,若要获得还需要 ...

  8. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)1----C#中动态加载和卸载DLL

    我们知道在C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后在任何地方卸载. 在C#中我们也能使用Assembly.Load ...

  9. Qt_技巧_将Qt动态链接生成的exe与dll打包方法

    刚开始接触Qt,发现mac平台直接release编译一下就能够直接生成.app文件,并且可以直接运行..app位于工程文件内. 同样发方法在Windows直接运行exe却出现缺失dll情况. 讲过网上 ...

随机推荐

  1. Spring事务支持:利用继承简化配置

    因为事务代理的实现类是 TransactionProxyFactoryBean . 事务代理Bean必须注入事务管理器. 大部分情况下,每个事务代理的事务属性大同小异,对于这种情况,Spring提供了 ...

  2. Jeddict:怎样在window系统下,成功打包Angular

    在Jeddict的应用过程中,发现了一个问题.如果前端视图选择Angular(具体版本,需要根据插件版本确定.此处理解为非Angular JS),那么在自动构建的过程中,会发现,每当在安装NodeJS ...

  3. poj3255 Roadblocks 次短路

    Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10098   Accepted: 3620 Descr ...

  4. 设计模式(二 & 三)工厂模式:2-工厂方法模式

    模拟场景: 沿用 设计模式(二)工厂模式:1-简单工厂模式 中关于运算器 Operation 的例子. 思想: 针对在 Easy Factory 中提出的,破坏“开-闭原则”的问题,Factory M ...

  5. 第002弹:Java 中的值传递和引用传递

    在 Java 的代码开发过程中,为了尽可能提高方法的复用性,明确方法的作用,同时防止一个方法内部过于臃肿的问题,往往会创建许多方法,那么不可避免地会涉及到参数传递的问题.通常来说,我们将 Java 中 ...

  6. HDU——1042N!(大数阶乘乘法)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Subm ...

  7. BZOJ3505 & 洛谷P3166 [Cqoi2014]数三角形 【数学、数论】

    题目 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数m和n. 输出格式 输出 ...

  8. C语言扩展题

    1.使用cmake来创建c语言工程 2.使用gcc来编译源代码 3.下载redis,并且编译运行redis(注:redis目前是c语言编写的,而且是主要是linux平台,在windows平台编译比较麻 ...

  9. net6:用户添加到角色和移出角色,角色的创建与删除等Roles与Membership的使用

    原文发布时间为:2008-07-30 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  10. node--http小爬虫&事件模块

    //http小爬虫 var http=require('http') var cheerio=require('cheerio') var url='http://www.imooc.com/lear ...