使用CodeProvider将许多外部.cs文件编译成.dll

本文关键字:文件 编译 dll cs CodeProvider 许多外 使用 | 更新日期: 2023-09-27 18:09:31

我试图写一个程序,可以采取用户生成的。cs文件,并将它们编译成一个库,供以后使用(真的只是为了防止重新编译他们下次程序启动)。当我试图将它们编译成.dll时,我得到一个错误,说该文件正在被另一个程序使用。

这是我的实现:

CompilerParameters params = new CompilerParameters();
params.GenerateExecutable = false;
params.GenerateInMemory = false;
params.OutputAssembly = "test.dll";
params.TreatWarningsAsErrors = true;
CSharpCodeProvider provider = new CSharpCodeProvider();
DirectoryInfo di = DirectoryInfo di = new DirectoryInfo(path);
FileInfo[] files = di.GetFiles("*.cs", SearchOption.AllDirectories);
foreach(FileInfo fi in files)
{
    CompilerResults cr = provider.CompileAssemblyFromFile(params, fi.FullName);
    if(cr.Errors.Count > 0)
    {
        foreach(CompilerError ce in cr.Errors)
        {
            Console.WriteLine(ce.ToString());
        }
    }
}

第一个文件编译得很好。但是,之后的每个文件都给出了这个错误:

CS0016: Cannot write to output file "temp.dll" -- The process cannot access the file because it is being used by another process.

为什么给我这个错误?如果我打算向程序集中添加许多类,是否需要以不同的方式调用编译器?

谢谢你的帮助。

使用CodeProvider将许多外部.cs文件编译成.dll

CodeProvider类可以一次将多个文件编译成一个程序集。

与其传递单个文件名信息CompileAssemblyFromFile,不如给它一个数组。像这样:

string[] files = { "a.cs", "b.cs", "c.cs" };
sCodeProvider.CompileAssemblyFromFile(sCompilerParams, files);