zoukankan      html  css  js  c++  java
  • C#动态编译dll或exe

    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);
  • 相关阅读:
    洛谷P1628 合并序列
    洛谷 P1334 瑞瑞的木板==P2664 【题目待添加】
    洛谷P1090 合并果子
    洛谷P3378 【模板】堆
    codevs 3129 奶牛代理商IX
    codevs 3344 迷宫
    codevs 2549 自然数和分解
    codevs 3096 流输入练习——寻找Sb.VI
    洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party
    洛谷 P1629 邮递员送信
  • 原文地址:https://www.cnblogs.com/a849788087/p/6689180.html
Copyright © 2011-2022 走看看