c# - 如何使用简单应用程序中的.cs文件编译文件夹

时间:2012-08-27 04:16:44

标签: c# asp.net compiler-construction compilation

我得到了.NET 2.0的应用程序。我想用反射来收集类信息。但首先我需要在文件夹中编译.cs文件。我如何从应用程序中执行此操作?从我的应用程序自动执行它非常重要。例如,我想有一个方法可以将路径传递给带.cs文件的文件夹,这个方法将为我编译所有.cs文件。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.CodeDom;

public static Assembly CreateFromCSFiles(string pathName)
{
        CSharpCodeProvider csCompiler = new CSharpCodeProvider();

        CompilerParameters compilerParams = new CompilerParameters();
        compilerParams.GenerateInMemory = true;

        // here you must add all the references you need. 
        // I don't know whether you know all of them, but you have to get them
        // someway, otherwise it can't work

        compilerParams.ReferencedAssemblies.Add("system.dll");
        compilerParams.ReferencedAssemblies.Add("system.Data.dll");
        compilerParams.ReferencedAssemblies.Add("system.Windows.Forms.dll");
        compilerParams.ReferencedAssemblies.Add("system.Drawing.dll");
        compilerParams.ReferencedAssemblies.Add("system.Xml.dll");

        DirectoryInfo csDir = new DirectoryInfo(pathName);
        FileInfo[] files = csDir.GetFiles();
        string[] csPaths = new string[files.Length];
        foreach (int i = 0; i < csPaths.Length; i++)
            csPaths[i] = files[i].FullName;
        CompilerResults result = csCompiler.CompileAssemblyFromFile(compilerParams, csPaths);
        if (result.Errors.HasErrors)
            return null;
        return result.CompiledAssembly;
}

答案 1 :(得分:0)

您可以通过编程方式和命令行编译cs文件。 要以编程方式执行此操作,您需要使用CSharpCodeProvider您可以在此处找到有关此主题的更多信息:http://support.microsoft.com/kb/304655