c# - 附加调试器时 Visual Studio 2013 锁定 PDB 文件

标签 c# visual-studio-2013 msbuild

我正在从事一个项目,该项目从团队基础服务器检索许多解决方案到临时文件夹,使用 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/

相关文章:

c# - ZPL:二进制 B64 和压缩 Z64 编码

c# - JOINS 或多个查询

c# - 使用 LAMBDA 表达式获取具有相同类型的对象的对象树的深度

c++ - 有没有办法使属性页中的 vcxproj 的属性不使用 Visual Studio 2013 加粗?

c# - 正则表达式删除尾随空格和多个空行

c# - 尝试设置类属性时出现 NullReferenceException

visual-studio-2013 - 错误 MSB4025 : The project file could not be loaded. 找不到文件(项目文件名).metaproj

.net - 在实现 microsoft.build.utilities.task 时,如何访问构建的各种环境变量?

msbuild - 代码覆盖率结果的 MSBuild.SonarQube.Runner.exe 结束命令出错

c# - 将 MSBuild 参数传递给 Cake 构建脚本以生成 _PublishedWebsites