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

时间:2019-03-04 09:39:26

标签: visual-studio azure-devops nuget-package debug-symbols sourcelink

Internet上有多种记录的方法,涉及如何使用Symbols源文件和Source Link在Nuget程序包内进行调试,但说实话,很难理解对我来说什么是好方法。

我们有一台Azure DevOps服务器,在其上生成Nuget程序包,同时使用.pdb在构建管道中将Index Sources & Publish Symbols文件发布到Azure DevOps Symbol Server,{{3 }}

“我的项目”也引用了Microsoft.SourceLink.Vsts.Git.csproj文件中的这段代码

<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>

我已经阅读了几篇博客文章,但是我最相信最新的消息来源当然是官方described here

readme.md文件说

  

通常不再建议在.nupkg中包含PDB,因为这会增加包的大小,从而为使用您的包的项目恢复时间,无论用户是否需要通过库的源代码进行调试

我同意这一点,这就是为什么我要使用Symbol Server而不在Nuget软件包中包括.pdb文件的原因。因此,请不要将我的问题标记为Source Link Git repository的重复项,因为接受的答案正是我不想做的。

自述文件还指出

  

.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缓存文件夹中,但是如果我尝试使用F11插入Nuget软件包中的代码,它只是不会工作。 (但是,它进入System.String.Concat是因为我的简单测试Nuget Package实际上是串联了一些字符串)

我尝试运行sourcelink test TestSourceLink.pdb,但得到error: url hash does not match。我读过this one,发现sourcelink test是旧事物,不支持对像我们这样的私有存储库的身份验证。

使用浏览器,如果我访问sourcelink print-json TestSourceLink.pdb给出的URL,则可以看到最新的源代码。但是现在的问题是,为什么Visual Studio无法下载源代码?我已通过VS在此Azure DevOps服务器上进行身份验证,因为我能够安装来自该服务器的Nuget程序包。

这是我的调试设置:

here

非常感谢。我真的不知道这个谜题缺少什么

1 个答案:

答案 0 :(得分:4)

好吧,在发布问题之前,我应该已经阅读并遵循了this answer,因为这是难题的一部分。

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

[编辑2]:

注意:到目前为止,只有使用 Debug Build Configuration (调试构建配置)生成Nuget软件包时,我才能使此工作正常。如果您找到让Nulink包中的Release DLL使用Source Link的方法,请回答my other question。谢谢

[EDIT]:由于我为公司编写了文档,因此这里是:

摘要:

这需要两件事:

  • 可以访问项目的符号文件(.pdb),该文件是调试器使用的映射文件。
  • 启用Source Link支持,以便Visual Studio知道调试时应该在哪里下载源代码

设置:

Component的项目

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

  1. 仅当您计划Nuget软件包的使用者使用Visual Studio 2017时。如果要在Visual Studio 2019中使用Source Link,则不需要此步骤

    在Visual Studio中,右键单击您的项目-> Properties,然后转到Build -> Advanced,并将Debugging InformationPortable(默认值)更改为{{1} }

    Advanced build settings

  2. 安装Microsoft.SourceLink.Vsts.Git Nuget程序包(必须在Visual Studio中选中Full复选框)

  3. 编辑Include prerelease文件,并在第一个.csproj元素中包含以下代码:

PropertyGroup

Azure DevOps构建管道

  1. 创建名为 <PublishRepositoryUrl>true</PublishRepositoryUrl> <EmbedUntrackedSources>true</EmbedUntrackedSources> 的管道变量(如果尚不存在)并将其值设置为BuildConfiguration

    • 在您的Debug任务中,将此变量用作参数:.NET Core Build
    • 在您的--configuration $(BuildConfiguration)任务中,在.NET Core Pack字段中使用此变量:Configuration to Package
  2. 在管道的最后,您必须有一个任务$(BuildConfiguration)

    • Index Sources & Publish Symbols字段中,也必须使用Artifact name变量:BuildConfiguration
  3. 当然,您还必须具有一个Symbols_$(BuildConfiguration)任务,才能将Nuget程序包推送到Azure DevOps Nuget Feed

Azure DevOps build pipeline

Visual Studio

  1. .NET Core Push单击Tools -> Options -> Debugging -> Symbols按钮并验证服务器
    • 将缓存文件夹设置到方便的位置,例如New Azure DevOps Symbol Server Location...。这是您所有C:\Symbols\文件的存储位置

Adding Symbol Server to Visual Studio

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

    如果不执行此操作,并将默认值保留为Load only specified modules,则在调试模式下运行程序时,Visual Studio将花费很长时间加载所有内容。

    提示::要在调试时查看项目加载的所有DLL,请单击Load all modules, unless excluded。在这里您可以查看完整列表,选择多个列表,然后右键单击Debug -> Windows -> Modules

Load only specified modules

  1. Copy Value -> Copy Name
    • 取消选中Tools -> Options -> Debugging -> General
    • 检查Enable Just My Code
    • 检查Enable source server support

Debugging Settings

消费项目

当您想在Nuget软件包的代码中进行调试时,自然按下Enable Source Link Support进入其中,Visual Studio会询问您是否同意从Azure DevOps存储库中下载源代码

consuming the project