C# CSharpCodeProvider编译异常

C# CSharpCodeProvider编译异常,c#,compilation,csharpcodeprovider,C#,Compilation,Csharpcodeprovider,我的程序经常编译c#代码,有时我会遇到一个ArgumentException,如“文件名'c:\Users--\AppData\Local\Temp\wvpc3m5m.0.cs'已在集合中。参数名:fileName” 接下来是编译器的设置: public void Init() { this.compilerParameters = new CompilerParameters { GenerateExecutable = false, Gener

我的程序经常编译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的实例都可以在一个时间段编译一次代码。 此代码可解决以下问题:

    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;
    }

保留代码提供者是没有意义的。只要用新操作符创建一个新的,我会这样做,但异常会继续抛出