我的程序经常编译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将字符串传递给文件,有时候他会尝试在同一个文件中写两次。
答案 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;
}