Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果使用调试信息,动态加载的文件将被锁定_C#_.net_Visual Studio_Visual Studio 2013 - Fatal编程技术网

C# 如果使用调试信息,动态加载的文件将被锁定

C# 如果使用调试信息,动态加载的文件将被锁定,c#,.net,visual-studio,visual-studio-2013,C#,.net,Visual Studio,Visual Studio 2013,我使用以下代码动态加载cs文件: CSharpCodeProvider codeProvider = new CSharpCodeProvider(); System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters(); //add referenced assemblies parameters.ReferencedAssemblies.Add(...); //filePath is a const

我使用以下代码动态加载cs文件:

CSharpCodeProvider codeProvider = new CSharpCodeProvider();
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
//add referenced assemblies
parameters.ReferencedAssemblies.Add(...);
//filePath is a constant path.
parameters.OutputAssembly = filePath + ".dll";
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, loadedFile);
if (results.Errors.Count > 0)
{
     //error reporting
     return;
}
else
{
     //success reporting
}
byte[] assemblyBytes = File.ReadAllBytes(results.PathToAssembly);
Assembly AssemblyReference = Assembly.Load(assemblyBytes);
Type CompiledClass = AssemblyReference.GetType(/*some class in code*/);
InvokeStringMethod(CompiledClass, "Do_things", new object[] { /*some objects*/ });
单击一个按钮就会发生这种情况,当多次单击时,将成功编译文件并调用该方法

但是,当添加
参数时,includedebuginfo=true
对于编译器参数,第一次成功编译文件。但如果我再次尝试编译它,会出现以下错误:

“创建调试信息文件'\\AAA.PDB'-'\\AAA.PDB'时出现意外错误:该进程无法访问该文件,因为它正被另一个进程使用。”

我搜索了此问题并找到了此解决方案:
。但是,如果加载文件会锁定它,为什么不包括调试信息时不会发生此问题?这不应该在所有情况下都发生吗?

您链接到的问题。对我来说,有效的方法是不将您链接到的问题分配给
参数。OutputAssembly

。对我来说,有效的方法是不给
参数赋值。OutputAssembly

是一个pdb,如果您将
IncludeDebugInformation
设置为
false
?不,但您实际上不是在访问相同的
.dll
文件吗?从我收集的链接问题的答案来看,只有.pdb文件被锁定。因此,如果只在属性设置为
true
时创建它,它将解释为什么在属性设置为
false
时不会出现任何问题。如果未创建任何文件,则不会锁定任何文件;)如果将
includedebuginfo
设置为
false
,是否创建了pdb?否,但实际上您不是在访问相同的
.dll
文件吗?根据我收集的链接问题的答案,只有.pdb文件被锁定。因此,如果只在属性设置为
true
时创建它,它将解释为什么在属性设置为
false
时不会出现任何问题。如果未创建任何文件,则不会锁定任何文件;)