在 VS2017RC 中构建 .netcore 项目时对 .pdb 文件的访问被拒绝错误

Access denied error to .pdb files when building .netcore project in VS2017RC

环境:

微软 Visual Studio 专业版 2017 RC

版本 15.0.26206.0 D15REL

微软 .NET 框架

版本 4.6.01586

错误:

错误 CS2012:无法打开 [file.pdb] 进行写入 -- 'Access to path [path to pdb file] is denied'.

描述:

我正在为 .net core 1.1 和其他针对 .netstandard1.6 的库构建 .netcore 应用程序。当我构建项目时,出现上述错误。当项目处于这种状态时,我无法 clean/build 或 运行 项目。第一次打开项目时不会发生,看起来很随机,因为它可能在我得到错误之前运行几次。

当我通过资源管理器导航到它时,我也无法删除 .pdb 文件或父文件夹,即调试目录中的 netcore1.0 或 netstandard1.6 文件夹。我什至无法更改文件或文件夹的权限。我是电脑管理员。

当我关闭 Visual Studio 并再次打开它时一切正常,我可以再次构建,这不是答案。

Link to my question on the Visual Studio forum.

谢谢

此问题与 Visual Studio 在 Visual Studio 执行构建操作时无法写入 [file.pdb] 文件有关。由于这个问题,Visual Studio 无法完成构建过程,然后它将保持此文件锁定。因此,您无法 clean/build 或 运行 项目,也无法删除处于此状态的 .pdb 文件或父文件夹。

很难弄清楚 Visual Studio 的根无法打开 [file.pdb] 进行写入。因为这个问题是随机出现的,我们无法重现。但是您可以尝试关闭Visual Studio,然后删除[file.pdb]文件并重建项目

注意:感谢 Jean Roux 的贡献,他使用 Process Explorer 找到了名为 ServiceHub.DataWarehouseHost.exe 的进程,该进程具有文件句柄。杀死那个句柄然后构建再次工作。

这是另一个不太好的解决方案:

工具 -> 选项 -> 调试 -> 常规,取消选中 "Enable Diagnostic Tools while debugging"

很难知道它是否会再次发生,但我现在已经 debugged/rebuilt 连续大约 10 次,比以前多了大约 9 倍。为了获得可靠的 debug/build 周期,必须关闭一个有用的功能,这仍然是一个非常可悲的情况。

引用 Visual Studio 开发者社区页面 here 上的 Aaron Robinson 先生(写于 2017 年 3 月 11 日),这似乎是一个已知问题:

This is a known issue VS 2017 when targeting .NET Core projects for CPU profiling (during debugging or Profiling (Alt+F2)). This will be addressed in an upcoming release. The workaround is to either:

A) Not enable CPU profiling (during F5 or Alt+F2) for .Net Core projects

B) Change the PDB format in the project properties from Portable PDB to PDB Full

Note that this should only impact projects that can output a Portable PDB format.

Aaron

我自己尝试了 B,首先在我的测试项目上将 PDB 格式更改为完整格式,并在 VS 2017 找不到我的测试时出现错误,然后也为我正在测试的项目更改了 PDB 格式这解决了这个问题。没测试过A.

要更改 PDB 格式,请转至项目的 Properties,转至 Build 选项卡并单击 右下角的高级按钮。在那里你会得到一个带有 Full 选项的下拉菜单。 (在输出->调试信息headers下)

它已通过 15.2 更新修复,请关注通知区域,您将找到所有可用的更新。

https://developercommunity.visualstudio.com/content/problem/25390/warning-msb3026-could-not-copy-objdebugnetcoreapp1.html

我处理这个问题有一段时间了,我的原因是打开了多个 VS2017 实例,其中有一个或多个不同的解决方案 运行。

我的解决方法是在尝试构建具有此问题的解决方案时,简单地不让任何 VS 运行 实例处于调试状态。

我假设另一个实例在 运行 时出于某种原因锁定了文件。

如果您在关闭 VS 后甚至无法手动删除 .pdb 文件,请检查您是否没有另一个 VS 调试实例引用您正在尝试构建的解决方案(不一定直接,它可能像我的情况一样通过 NuGet 包。

VS“自动”查找 .pdb 文件很好,这样您就可以在其他解决方案中调试问题,但这似乎是一个令人不快的副作用。