我正在一个项目中,该项目将一些解决方案从团队基础服务器检索到一个临时文件夹,并使用Microsoft.Build.Execution.BuildManager.Build来为这些解决方案生成发行版,并使用之后的源代码。
在运行带有调试器的项目时出现问题:
在清理过程中,我得到一个system.UnauthorizedAccessException与消息
“拒绝访问路径... \ obj \ release \ CalithaLibrary.pdb”。
使用sysinternals Process Explorer,我发现该锁是devenv.exe获取的。
当我构建项目的发行版本并在Visual Studio外部运行它时,不会出现此问题。
关于为什么Visual Studio会获取属于从未由Visual Studio打开的项目的PDB锁的任何想法?
编辑:我收到的第一个答案使我觉得我可能对这种情况还不够清楚:
我正在调试一个名为“ AutoReleaseService.exe”的项目,该项目使用Microsoft.Build.Execution.Buildmanager来构建(但不能运行或调试!)许多其他项目,其中包括CalithaLibrary。
如果我试图从自己的项目中删除AutoReleaseService.pdb,我确实知道要附加调试器,但是我知道,但是被锁定的pdb文件所属的项目甚至都没有运行过在我的机器上,更不用说调试了。我只建立了项目。
最佳答案
我正在调试一个名为“ AutoReleaseService.exe”的项目,该项目使用Microsoft.Build.Execution.Buildmanager来构建(但不能运行或调试!)许多其他项目,其中包括CalithaLibrary。
好吧,CalithaLibrary看起来像一个DLL项目,当您运行AutoReleaseService.exe时,肯定可以使用该项目。这很简单-运行exe项目时,它将使用它依赖的所有dll-s。 Visual Studio(devenv.exe)会锁定.pdb文件,因为它们是调试应用程序时源代码和可执行文件之间的链接,并且如果您从Visual Studio外部打开可执行文件-它们不会被锁定,因为您然后不需要它们。
关于c# - 附加调试器时,Visual Studio 2013锁定PDB文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29650450/