CSharpCodeProvider编译异常

本文关键字:异常 编译 CSharpCodeProvider | 更新日期: 2023-09-27 17:52:52

我的程序经常编译c#代码,有时我得到一个ArgumentException,如"文件名' c:'Users- 'AppData'Local'Temp'wvpc3m5m.0.cs'已经在集合中了。参数名称:fileName".

下一个是编译器的设置:

public void Init()
{
    this.compilerParameters = new CompilerParameters
    {
        GenerateExecutable = false,
        GenerateInMemory = true
    };
}
编译:

public CompilerResults Compile(String code)
{
    CompilerResults result = this.codeProvider
        .CompileAssemblyFromSource(this.compilerParameters, code);
    return result;
}

我认为codeProvider将传递的字符串写入文件,有时他试图在同一个文件中写入两次。

CSharpCodeProvider编译异常

问题是所有CSharpCodeProvider的实例都可以在一个时隙编译一次代码。这个代码解决了以下问题:

    private readonly Object lockCompile = new Object();
    public CompilerResults Compile(String code)
    {
        CompilerResults result = null;
        lock (lockCompile)
        {
            using (CSharpCodeProvider codeProvider = new CSharpCodeProvider())
            {
                result = codeProvider
                   .CompileAssemblyFromSource(this.compilerParameters, code);
            }
        }
        return result;
    }