C# CSharpCodeProvider编译异常
我的程序经常编译c#代码,有时我会遇到一个ArgumentException,如“文件名'c:\Users--\AppData\Local\Temp\wvpc3m5m.0.cs'已在集合中。参数名:fileName” 接下来是编译器的设置: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
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;
}
保留代码提供者是没有意义的。只要用新操作符创建一个新的,我会这样做,但异常会继续抛出