互联网上有几种关于如何使用符号源文件和源链接在 Nuget 包中进行调试的记录方法,但老实说,很难理解对我来说什么是好方法。
我们有一个 Azure DevOps 服务器,我们在其上生成 Nuget 包,同时使用我们的构建管道中.pdb
的任务将文件发布到 Azure DevOps 符号服务器,如此处所述Index Sources & Publish Symbols
我的项目'在文件中也有参考Microsoft.SourceLink.Vsts.Git
和这段代码.csproj
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
我已经阅读了几篇博客文章,但我最相信最新的来源当然是官方的Source Link Git 存储库。
文件readme.md
说
通常不再建议在 .nupkg 中包含 PDB,因为它会增加包的大小,从而为使用您的包的项目恢复时间,无论用户是否需要通过库的源代码进行调试
我同意这一点,这就是为什么我想使用符号服务器,而不是将.pdb
文件包含在 Nuget 包中。因此,请不要将我的问题标记为与此问题重复,因为接受的答案正是我不想做的。
自述文件还指出
.snupkg 符号包有一些限制:
- 它们目前不支持 Windows PDB(由 VC++ 生成,或用于将构建属性 DebugType 设置为 full 的托管项目)
- 它们要求库由较新的 C#/VB 编译器(Visual Studio 2017 Update 9)构建。
- 包的使用者还需要 Visual Studio 2017 Update 9 调试器。
- Azure DevOps Artifacts 服务不支持。
所以至少我知道我不能使用它。
但是,设置 Source Link 并开始工作的正确方法是什么?
当我调试我的测试控制台应用程序时,它成功地将.pdb
文件下载到我的 Symbols 缓存文件夹,但是如果我尝试使用来自我的 Nuget 包的代码单步执行F11
,它就不起作用。(但是它System.String.Concat
介入是因为我的简单测试 Nuget 包实际上是连接一些字符串)
我试图跑sourcelink test TestSourceLink.pdb
,但我得到了一个error: url hash does not match
. 我在这里读到这sourcelink test
是一个遗留问题,不支持对像我们这样的私有存储库进行身份验证。
使用我的浏览器,如果我访问给出的 URL,sourcelink print-json TestSourceLink.pdb
我可以看到最新的源代码。但现在的问题是,为什么 Visual Studio 无法下载源代码?我在 VS 中已通过此 Azure DevOps 服务器的身份验证,因为我能够安装来自此服务器的 Nuget 包。
这是我的调试设置:
非常感谢。我真的无法弄清楚这个谜题中缺少的部分是什么