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