断点仅在某些位置的项目 运行 时有效
Break Points Only Working When Project Run From Certain Locations
我有一个问题 Visual Studio 没有在我的任何断点处中断并显示以下消息:
The breakpoint will not currently be hit. No symbols have been loaded for this document
我已经尝试了几乎所有我能找到的相关解决方案,但都没有成功(包括 the answers here)。
幸运的是,我在 .git
上有版本,在推送它时它正在运行,所以我测试了将存储库克隆到各种驱动器上,看看会发生什么:
C:
(本地)- 这是我 运行 我所有其他项目的来源,并且从未遇到过这个问题。但是,我不能为这个项目使用任何断点。
Y:
(remote) - 这是我的部门驱动器,我过去也在那里做过很多调试,没有这个问题。 这里的断点起作用了!
H:
(远程)-这是我的个人网络驱动器-断点在这里不起作用。
我还尝试在驱动器中移动项目文件夹,但每个结果都相同
我对此完全迷失了,非常感谢任何帮助!如果有人能想到的话,我也很乐意 运行 更多测试。
事实证明,这是由我的 Post-构建操作引起的,ILMerge.bat
:
CMD
ECHO parameter=%1
CD %1
COPY WpfFileDeleter.exe temp.exe
ECHO "..\..\ILMerge.exe"
"..\..\ILMerge.exe" /out:"WpfFileDeleter.exe" /targetPlatform:"v4" "temp.exe" "Microsoft.WindowsAPICodePack.dll" "Microsoft.WindowsAPICodePack.ExtendedLinguisticServices.dll" "Microsoft.WindowsAPICodePack.Sensors.dll" "Microsoft.WindowsAPICodePack.Shell.dll" "Microsoft.WindowsAPICodePack.ShellExtensions.dll"
DEL temp.exe
此操作工作正常,但问题在于我如何访问 .sln
本地驱动器
在 C:
上进行本地构建时,构建操作成功,但是一旦二进制文件与所需的 .dll 合并,断点将不再正常工作,因为 .exe
不会重合与现有 .pdb
(不受 ILMerge
影响)。
通过 \\
访问的网络驱动器
如果我(在资源管理器中)导航到 \\file\test\
,构建操作不会 运行 因为 .bat
文件无法在 UNC 路径上运行:
CMD does not support UNC paths as current directories
当 post-build 操作失败时,调试将使用断点正确工作。
运行 来自映射的网络驱动器
如果我只是通过 Y:\test
导航到文件夹,那么 post-build 操作会起作用,因为它读取 Y:
而不是 \
。但是,类似于本地驱动器中的情况,这使我无法正常调试。
这解释了为什么它在 1 个(映射的)网络驱动器上工作,而不是另一个,以及为什么它在 c:
上不工作(因为 post-build 操作不会允许调试)。
此问题的解决方案是仅 运行 post-build 操作 Release
程序集而不是 Debug
。
我有一个问题 Visual Studio 没有在我的任何断点处中断并显示以下消息:
The breakpoint will not currently be hit. No symbols have been loaded for this document
我已经尝试了几乎所有我能找到的相关解决方案,但都没有成功(包括 the answers here)。
幸运的是,我在 .git
上有版本,在推送它时它正在运行,所以我测试了将存储库克隆到各种驱动器上,看看会发生什么:
C:
(本地)- 这是我 运行 我所有其他项目的来源,并且从未遇到过这个问题。但是,我不能为这个项目使用任何断点。
Y:
(remote) - 这是我的部门驱动器,我过去也在那里做过很多调试,没有这个问题。 这里的断点起作用了!
H:
(远程)-这是我的个人网络驱动器-断点在这里不起作用。
我还尝试在驱动器中移动项目文件夹,但每个结果都相同
我对此完全迷失了,非常感谢任何帮助!如果有人能想到的话,我也很乐意 运行 更多测试。
事实证明,这是由我的 Post-构建操作引起的,ILMerge.bat
:
CMD
ECHO parameter=%1
CD %1
COPY WpfFileDeleter.exe temp.exe
ECHO "..\..\ILMerge.exe"
"..\..\ILMerge.exe" /out:"WpfFileDeleter.exe" /targetPlatform:"v4" "temp.exe" "Microsoft.WindowsAPICodePack.dll" "Microsoft.WindowsAPICodePack.ExtendedLinguisticServices.dll" "Microsoft.WindowsAPICodePack.Sensors.dll" "Microsoft.WindowsAPICodePack.Shell.dll" "Microsoft.WindowsAPICodePack.ShellExtensions.dll"
DEL temp.exe
此操作工作正常,但问题在于我如何访问 .sln
本地驱动器
在 C:
上进行本地构建时,构建操作成功,但是一旦二进制文件与所需的 .dll 合并,断点将不再正常工作,因为 .exe
不会重合与现有 .pdb
(不受 ILMerge
影响)。
通过 \\
如果我(在资源管理器中)导航到 \\file\test\
,构建操作不会 运行 因为 .bat
文件无法在 UNC 路径上运行:
CMD does not support UNC paths as current directories
当 post-build 操作失败时,调试将使用断点正确工作。
运行 来自映射的网络驱动器
如果我只是通过 Y:\test
导航到文件夹,那么 post-build 操作会起作用,因为它读取 Y:
而不是 \
。但是,类似于本地驱动器中的情况,这使我无法正常调试。
这解释了为什么它在 1 个(映射的)网络驱动器上工作,而不是另一个,以及为什么它在 c:
上不工作(因为 post-build 操作不会允许调试)。
此问题的解决方案是仅 运行 post-build 操作 Release
程序集而不是 Debug
。