gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:48:05 25 4
gpt4 key购买 nike

互联网上有几种关于如何使用符号源文件和源链接在 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文件说

Including PDBs in the .nupkg is generally no longer recommended as it increases the size of the package and thus restore time for projects that consume your package, regardless of whether the user needs to debug through the source code of your library or not



我同意这一点,这就是为什么我要使用符号服务器,而不是包含 .pdb。 Nuget 包中的文件。因此,请不要将我的问题标记为 this one 的重复项。 ,因为接受的答案正是我不想做的。

自述文件还指出

.snupkg symbol packages have some limitations:

  • They do not currently support Windows PDBs (generated by VC++, or for managed projects that set build property DebugType to full)
  • They require the library to be built by newer C#/VB compiler (Visual Studio 2017 Update 9).
  • The consumer of the package also needs Visual Studio 2017 Update 9 debugger.
  • Not supported by Azure DevOps Artifacts service.


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

但是,设置 Source Link 并开始工作的正确方法是什么?

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

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

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

这是我的调试设置:

VS debugging settings

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

最佳答案

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

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

[编辑 2]:

注意:到目前为止,我只能在使用 生成 Nuget 包时才能使用它。调试构建配置 .如果您找到了让源链接与 Nuget 包中的发布 DLL 一起工作的方法,请回答 my other question .谢谢

[编辑]:因为我为我的公司写了一份文档,所以这里是:

概括:

这需要两件事:

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

  • 设置:

    组件的项目

    对于解决方案中的每个项目:
  • 仅当您计划 Nuget 包的使用者使用 Visual Studio 2017 时。如果您想将 Source Link 与 Visual Studio 2019 一起使用,则不需要此步骤。 :

    在 Visual Studio 中,右键单击您的项目 -> Properties然后转到Build -> Advanced并更改 Debugging Information来自 Portable (默认值)到 Full
    Advanced build settings
  • 安装 Microsoft.SourceLink.AzureDevOpsServer.Git Nuget 包
  • 编辑.csproj文件并在第一个 PropertyGroup 中包含以下代码元素:

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

    Azure DevOps 构建管道
  • 创建一个名为 BuildConfiguration 的管道变量(如果它不存在)并将值设置为 Debug
  • 将此变量用作 .NET Core Build 中的参数任务:--configuration $(BuildConfiguration)
  • 在您的 .NET Core Pack任务,在 Configuration to Package 中使用此变量字段:$(BuildConfiguration)
  • 在管道结束时,您必须有一个任务 Index Sources & Publish Symbols
  • Artifact name字段,BuildConfiguration变量也必须使用:Symbols_$(BuildConfiguration)
  • 当然你还必须有一个.NET Core Push将 Nuget 包推送到 Azure DevOps Nuget Feed
  • 的任务

    Azure DevOps build pipeline

    Visual Studio
  • Tools -> Options -> Debugging -> Symbols点击New Azure DevOps Symbol Server Location...按钮并对服务器进行身份验证
  • 将缓存文件夹设置到方便的位置,例如 C:\Symbols\ .这是您所有的.pdb文件将被存储

  • Adding Symbol Server to Visual Studio
  • Tools -> Options -> Debugging -> Symbols点击Load only specified modules .您可以在此处指定要加载的 DLL 的符号文件。

    如果您不这样做并将默认设置为 Load all modules, unless excluded ,当您在 Debug模式下运行程序时,Visual Studio 将需要很长时间才能加载所有内容。

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

  • Load only specified modules
  • Tools -> Options -> Debugging -> General
  • 取消选中 Enable Just My Code
  • 查看 Enable source server support
  • 查看 Enable Source Link Support

  • Debugging Settings

    消费项目

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

    consuming the project

    关于visual-studio - 与 Azure DevOps 符号服务器的源链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54980381/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com