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);
  • 相关阅读:
    Retrofit/Okhttp API接口加固技术实践(上)
    浅析C#中的结构体和类
    iOS中 支付宝钱包具体解释/第三方支付 韩俊强的博客
    Java并发之volatile二
    dynamic initializer和全局变量
    二叉树转换成森林&森林变成二叉树
    这才是真正的裸眼3D!超级震撼!!
    每一个开发人员都应该有一款自己的App
    Hibernate HQL的使用
    我的Android进阶之旅------>Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
  • 原文地址:https://www.cnblogs.com/a849788087/p/6689180.html
Copyright © 2011-2022 走看看