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

问题描述 投票:3回答:1

关于如何使用符号源文件和源链接在Nuget包内调试,互联网上有几种记录的方法,但老实说很难理解对我来说什么是好方法。

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

我的项目'也在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 Packages。

这是我的调试设置:

VS debugging settings

非常感谢。我真的无法弄清楚这个谜题中缺少的是什么

visual-studio azure-devops nuget-package debug-symbols sourcelink
1个回答
6
投票

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

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

[EDIT 2]:

注意:到目前为止,如果使用Debug Build Configuration生成Nuget Package,我只能使用它。如果您找到一种方法让Source Link使用Nuget包中的Release DLL,请回答my other question。谢谢

[EDIT]: Since I wrote a documentation for my company, here it is:

摘要:

这需要两件事:

  • 可以访问项目的Symbol文件(.pdb),它是调试器使用的映射文件
  • 启用源链接支持,以便Visual Studio知道在调试时下载源代码的位置

建立:

Component's project

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

  1. 仅当您规划Nuget包的使用者才能使用Visual Studio 2017时。如果您想要使用Visual Studio 2019的Source Link,则不需要执行此步骤: 在Visual Studio中,右键单击您的项目 - > Properties然后转到Build -> Advanced并将Debugging InformationPortable(默认值)更改为Full Advanced build settings
  2. 安装Microsoft.SourceLink.Vsts.Git Nuget包(您必须检查Visual Studio中的Include prerelease复选框)
  3. 编辑.csproj文件并在第一个PropertyGroup元素中包含以下代码:
 <PublishRepositoryUrl>true</PublishRepositoryUrl>
 <EmbedUntrackedSources>true</EmbedUntrackedSources>

Azure DevOps build pipeline

  1. 创建一个名为BuildConfiguration的管道变量(如果它已经不存在)并将值设置为Debug.NET Core Build任务中使用此变量作为参数:--configuration $(BuildConfiguration) 在你的.NET Core Pack任务中,在Configuration to Package字段中使用此变量:$(BuildConfiguration)
  2. 在管道的最后,你必须有一个任务Index Sources & Publish SymbolsArtifact name领域,必须使用BuildConfiguration变量:Symbols_$(BuildConfiguration)
  3. 当然你还必须有一个.NET Core Push任务来推动你的Nuget包到你的Azure DevOps Nuget Feed

Azure DevOps build pipeline

Visual Studio

  1. Tools -> Options -> Debugging -> Symbols点击New Azure DevOps Symbol Server Location...按钮并对服务器进行身份验证 将缓存文件夹设置为C:\Symbols\等方便的位置。这是您存储所有.pdb文件的地方

Adding Symbol Server to Visual Studio

  1. Tools -> Options -> Debugging -> Symbols点击Load only specified modules。您可以在此处指定要加载的DLL的符号文件。 如果不这样做并将默认设置保留为Load all modules, unless excluded,则在调试模式下运行程序时,Visual Studio将花费很长时间来加载所有内容。 提示:要查看项目加载的所有DLL,在进行调试时,请单击Debug -> Windows -> Modules。从这里您可以查看完整列表,选择多个,然后右键单击Copy Value -> Copy Name

Load only specified modules

  1. Tools -> Options -> Debugging -> General 取消选中Enable Just My Code 检查Enable source server support 检查Enable Source Link Support

Debugging Settings

Consuming project

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

consuming the project

© www.soinside.com 2019 - 2024. All rights reserved.