CSharpCodeProvider编译异常

时间:2014-03-25 09:25:51

标签: c# compilation csharpcodeprovider

我的程序经常编译c#-code,有时候我得到了一个类似#34的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将字符串传递给文件,有时候他会尝试在同一个文件中写两次。

1 个答案:

答案 0 :(得分:1)

问题是所有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;
    }