首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与Azure DevOps符号服务器的源链接

与Azure DevOps符号服务器的源链接
EN

Stack Overflow用户
提问于 2019-03-04 17:39:26
回答 1查看 5.4K关注 0票数 18

关于如何在Nuget包中使用Symbols、Source files和Source Link进行调试,互联网上有几种记录在案的方法,但老实说,很难理解哪种方法对我来说是好的。

我们有一台Azure Nuget服务器,我们在其上生成DevOps包,同时使用构建管道中的described here任务将.pdb文件发布到Azure DevOps符号服务器

我的项目‘在.csproj文件中还引用了Microsoft.SourceLink.Vsts.Git和以下代码

代码语言:javascript
复制
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>

我读过几篇博客文章,但我最相信的更新来源当然是官方Source Link Git repository

readme.md文件说

通常不再推荐在.nupkg中包含PDB的

,因为这样会增加软件包的大小,从而恢复使用软件包的项目的时间,而不管用户是否需要通过库的源代码进行调试

我同意这一点,这就是为什么我要使用Symbol Server,而不是将.pdb文件包含在Nuget包中。因此,请不要将我的问题标记为this one的副本,因为被接受的答案正是我不想做的。

自述文件还指出,

.snupkg符号包有一些限制

  • 它们当前不支持Windows (由VC++生成,或者对于将build属性DebugType设置为full的托管项目)
  • 它们需要使用更新的C#/VB编译器(Visual Studio2017 debugger.
  • Not 9)来构建库。
  • 包的使用者还需要Azure DevOps工件PDB支持的Visual Studio2017更新9 PDB

所以至少我知道我不能用它。

但是什么才是正确的设置Source Link并工作的方法呢?

当我调试我的测试控制台应用程序时,它成功地将.pdb文件下载到我的Symbols缓存文件夹中,但是如果我尝试使用F11单步执行来自我的Nuget包的代码,它就不能工作。(但是,它会步入System.String.Concat,因为我的简单测试Nuget包实际上是连接一些字符串)

我试图运行sourcelink test TestSourceLink.pdb,但我得到了一个error: url hash does not match。我在here上读到sourcelink test是一个遗留的东西,不支持像我们这样的私有存储库的身份验证。

使用我的浏览器,如果我访问sourcelink print-json TestSourceLink.pdb提供的网址,我可以看到最新的源代码。但现在的问题是,为什么Visual Studio无法下载源代码?我在VS中通过了这个Azure DevOps服务器的身份验证,因为我能够安装来自这个服务器的Nuget包。

以下是我的调试设置:

非常感谢。我真的搞不懂这块拼图缺失的部分是什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-04 18:07:57

嗯,在发布我的问题之前,我应该阅读并关注this answer,因为这是拼图中缺失的一部分。

我需要遵循Eric's blog post的步骤5和6,但实际上我不需要修改我的pack命令,因为我没有在Nuget包中包含.pdb文件。

编辑2

注意:到目前为止,只有在使用调试构建配置生成Nuget包的情况下,我才能让它正常工作。如果你能找到在Nuget包中使用发布动态链接库的源码链接,请回答my other question。谢谢

编辑:因为我为我的公司写了一份文档,所以它是:

摘要:

这需要两件事:

Visual Studio可以访问项目的符号文件(.pdb),该文件是debugger

  • Enable源代码链接支持使用的映射文件,因此
  • 知道在调试

时应从何处下载源代码

设置:

组件的项目

对于解决方案中的每个项目:

如果您计划Nuget包的消费者使用Visual Studio2017,请使用

  1. Only。如果你想在Visual Studio2019中使用源链接,这一步不是必需的:

在Visual Studio中,右键单击项目-> Properties,然后转到Build -> Advanced并将Debugging InformationPortable (缺省值)更改为Full

  1. 安装Microsoft.SourceLink.AzureDevOpsServer.Git Nuget包
  2. 编辑.csproj文件,并在第一个PropertyGroup元素中包含以下代码:

代码语言:javascript
复制
 <PublishRepositoryUrl>true</PublishRepositoryUrl>
 <EmbedUntrackedSources>true</EmbedUntrackedSources>

Azure DevOps构建管道

  1. 创建一个名为BuildConfiguration的管道变量(如果该变量尚不存在),并将其值设置为Debug

代码语言:javascript
复制
- Use this variable as argument in your `.NET Core Build` task: `--configuration $(BuildConfiguration)`
- In your `.NET Core Pack` task, use this variable in the `Configuration to Package` field: `$(BuildConfiguration)`

在流水线的末尾,你必须有一个任务Index Sources & Publish Symbols (

代码语言:javascript
复制
- In the `Artifact name` field, the `BuildConfiguration` variable must be used too: `Symbols_$(BuildConfiguration)`

当然,您还必须有一个.NET Core Push任务才能将您的Nuget包推送到您的Azure DevOps Nuget Feed

Visual Studio

  1. Tools -> Options -> Debugging -> Symbols单击New Azure DevOps Symbol Server Location...按钮并向服务器进行身份验证
    • 将缓存文件夹设置到一个方便的位置,如C:\Symbols\。这就是你所有的stored

文件的.pdb文件

  1. Tools -> Options -> Debugging -> Symbols单击Load only specified modules。您可以在此处指定要加载的DLL的符号文件。

如果您不这样做并将默认值保留为Load all modules, unless excluded,则当您在调试模式下运行程序时,Visual Studio将花费非常长的时间来加载所有内容。

提示:要查看项目加载的所有all,请在调试时单击Debug -> Windows -> Modules。从这里您可以查看完整的列表,选择multiple,然后右键单击Copy Value -> Copy Name

取消选中Enable Just My Code

  • Check Enable source server support

  • Check Enable Source Link Support

  1. Tools -> Options -> Debugging -> General

消费项目

当您想要在Nuget包的代码中进行调试时,很自然地按下F11进入其中,Visual Studio将询问您是否同意从您的Azure DevOps存储库下载源代码

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54980381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档