CSharpCodeProvider编译异常



我的程序经常编译c#代码,有时我得到一个ArgumentException,如"文件名' c:Users- AppDataLocalTempwvpc3m5m.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;
    }

相关内容

  • 没有找到相关文章

最新更新