Leave a comment (0) 作者:adwin

最近想学学C#,简单看了一下语法,对当年远控能够直接生成exe文件的功能比较好奇,想要一探究竟,竟然发现C#中可以直接编译C#代码成dll或者exe文件。(类似PHP中的eval,只不过PHP属于解释型语言,只要一个函数便可执行代码,但编译型语言中想要执行代码必须先编译,所以才有了程序中将其他的代码编译的需求)

在网上简单找了一下,发现好多文件里都是一样的示例代码,示例中演示里如何编译成DLL文件并且进行调用,我稍加改动,编译成了exe文件。

代码如下:

using System;

using System.CodeDom.Compiler;

using Microsoft.CSharp;

using System.Reflection;

namespace eval//编译C#代码为EXE/DLL

{

    class Program

    {

        static void Main(string[] args)

        {

            CreateCodeDll1();

            Console.Read();

        }

        

        public static void CreateCodeDll1()

        {

            CSharpCodeProvider provider = new CSharpCodeProvider();

            CompilerParameters parameters = new CompilerParameters();

 

            parameters.GenerateExecutable = true;

            parameters.GenerateInMemory = false;

            string path = "test.exe";

            parameters.OutputAssembly = path;

            parameters.ReferencedAssemblies.Add("System.dll");

 

            string sourceFile = @"

            using System;

            public class MyCode

            {

                 public static void Main(string[] args)

                 {

                     Console.Write(""i'm running!"");

                     Console.Read();

                 }

             }

        ";

            

            CompilerResults cr = provider.CompileAssemblyFromSource(parameters, sourceFile);

            

            if (cr.Errors.Count > 0)

            {

                Console.Write("Errors building " + sourceFile + " into " + cr.PathToAssembly);

                foreach (CompilerError ce in cr.Errors)

                {

                    Console.Write(ce.ToString());

                }

            }

            else

            {

                Console.Write("编译成功");

            }

            Console.Read();

        }

    }

}

 

其中parameters.ReferencedAssemblies.Add("System.dll");这里注意是system.dll,网上的代码都是system,实测报错,必须加上.dll。

如果要编译DLL文件,parameters.GenerateExecutable = true;这里的true要改成false

 

 

分类:C# | 标签: 编程 编译 C#
分享到:

我也说两句 »