我正在从事一个项目,该项目从团队基础服务器检索许多解决方案到临时文件夹,使用 Microsoft.Build.Execution.BuildManager.Build 为这些解决方案构建发布版本,并清理之后带有源代码的临时文件夹。
在附加调试器的情况下运行我的项目时出现问题: 在清理过程中,我得到一个带有消息的 system.UnauthorizedAccessException
"Access to the path ...\obj\release\CalithaLibrary.pdb denied".
使用 sysinternals Process Explorer 我发现锁是由 devenv.exe 获取的。
当我构建项目的发布版本并在 visual studio 之外运行它时,问题不会出现。
关于为什么 Visual Studio 会获取属于 Visual Studio 从未打开的项目的 PDB 的锁,有什么想法吗?
编辑:我收到的第一个答案让我觉得我可能对情况还不够清楚:
我正在调试一个名为“AutoReleaseService.exe”的项目,它使用 Microsoft.Build.Execution.Buildmanager 构建(但不运行或调试!)许多其他项目,其中包括 CalithaLibrary。
如果我试图从我自己的项目中删除 AutoReleaseService.pdb,实际上我附加了调试器,我会理解,但是被锁定的 pdb 文件所属的项目没有甚至在我的机器上运行过,更不用说调试了。我只构建了项目。
最佳答案
I'm debugging a project named "AutoReleaseService.exe" which uses Microsoft.Build.Execution.Buildmanager to build (but not run or debug!) a number of other projects, among which 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/