【问题标题】:Debug NuGet package with Azure Devops and Source Link使用 Azure Devops 和 Source Link 调试 NuGet 包
【发布时间】:2019-03-24 03:52:02
【问题描述】:

我正在尝试让 SourceLink 使用私有 NuGet 包。 我正在运行一个 netcore2.1 Web 应用程序,它引用托管在我们的 Azure Devops NuGet 源上的 netstandard2.0 NuGet 包。

问题 1:Source Link 是否支持 .NET Standard 包?

我已经按照这里https://docs.microsoft.com/en-us/azure/devops/artifacts/symbols/setting-up-github-sourcelinking?view=vsts的指南中的说明进行操作,基本上是:

  1. 将索引源和发布符号包添加到我的 Azure Devops 构建中。

  2. 在 Visual Studio 中,将我们的 VSTS 服务器添加为符号服务器

  3. 在 Visual Studio 中,启用源链接支持。我还尝试启用源服务器支持。

构建管道发布符号路径似乎正在工作 - 在我看到的日志中: Succeeded processing D:\a\1\s\src\MyCompany.Core.Services.SnapshotClient\bin\release\netstandard2.0\MyCompany.Core.Services.SnapshotClient.pdb:

当我开始调试我的应用程序时,我在 VS 输出窗口中看到一堆输出: 'dotnet.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\2.1.4\Microsoft.AspNetCore.Hosting.dll'. Cannot find or open the PDB file.

对于我的 NuGet 包,我看到“已加载符号”,这似乎很有希望。

FWIW 我没有看到 Visual Studio 提示“源链接将从 Internet 下载”。

当我调试并尝试步入我的 NuGet 包时,它只是跳过它。

然后我尝试了:

  1. 前往 https://github.com/dotnet/sourcelink 并按照他们的说明安装 Microsoft.SourceLink.Vsts.Git 包(问题 2 有必要吗?)

  2. 当这不起作用时,我升级了我的应用程序中的每个该死的包,这迫使我安装 .NET Core SDK 2.1.403

  3. 在搜索 GitHub 问题后,尝试向我的 NuGet 包的 .csproj 添加一些内容 <PublishRepositoryUrl>true</PublishRepositoryUrl> <AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder> <DebugType>portable</DebugType> <ci>true</ci> 现在我的 .nupkg 也包含 .pdb 文件,这些文件以前不存在。不过仍然不能帮助我进行调试。

  4. https://www.nuget.org/packages/sourcelink/ 安装了 sourcelink cli 工具,并从我的 .nupkg 在 .pdb 上运行 sourcelink print-urls。看起来正确,我想?存在 URL。

  5. 在看到来自 @mitchdenny 的评论 https://github.com/MicrosoftDocs/vsts-docs/issues/1336#issuecomment-414415049 后禁用索引。还是不行。

现在我很困惑为什么它不起作用。

【问题讨论】:

    标签: azure-devops sourcelink


    【解决方案1】:

    我写了一个完整的 blog 来说明如何使用 .NET Core 和 AzureDevops 来完成这项工作,但这些步骤也应该适用于 .NET Standard 项目。

    也就是说,您应该知道的 Microsoft 文档中缺少的一些关键要点是:

    • 项目的调试信息需要从“Portable”改为“Full”
    • AzureDevOps Nuget(恢复、构建、打包和推送)需要使用 .NET Core 任务。
    • .NET Core 构建任务应该有一个参数“--configuration”,它传入值“debug”。这样做会生成 .PDB 文件
    • .NET Core pack 任务应使用“custom”命令,自定义命令为“pack”并具有以下参数:“--include-symbols -vd”和传入值“调试”。这样做会告诉 pack 命令将 .PDB 文件包含在包中。

    【讨论】:

    • 感谢埃里克。当时我至少花了一天时间试图弄清楚,并尝试了其中的一些选项。从那以后我就离开了那场演出,但如果我再试一次,我会参考你的博客。
    • 哇,我应该在发布我的问题之前阅读这个答案。这现在应该是公认的答案,因为不再推荐在 Nuget 包中包含 .pdb 文件
    • @Eric 您网站的证书无效。你可能想检查一下。
    【解决方案2】:

    问题 1:Source Link 是否支持 .NET Standard 包?

    是的。我在 Azure DevOps Pipeline 上成功构建了一个 .NET Standard 2.0 库,之后它被推送到我们的私有 Azure DevOps Artifacts NuGet 源。然后,在一个本地项目中,我可以进入库(Visual Studio 弹出一个关于下载远程源代码的提示)。

    以下是我必须在库的 .csproj 文件中进行的更改:

    <PropertyGroup>
      <PublishRepositoryUrl>true</PublishRepositoryUrl>
      <EmbedUntrackedSources>true</EmbedUntrackedSources>
      <AllowedOutputExtensionsInPackageBuildOutputFolder>
        $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb
      </AllowedOutputExtensionsInPackageBuildOutputFolder>
    </PropertyGroup>
    ...
    <ItemGroup>
      <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0-beta-63127-02" PrivateAssets="All"/>
    </ItemGroup>
    

    问题 2: [PackageReference to Microsoft.SourceLink.GitHub] 有必要吗?

    我不确定。 docs 建议是。但我删除了引用,在 Azure DevOps 上重新构建,并且仍然能够单步执行该库。对于不同的环境可能需要它(我保留它以防万一)。

    FWIW:

    • 我正在使用 Visual Studio 15.8.9 进行调试
    • 我最新安装的 .NET Core SDK 是 2.1.403
    • 我的库的使用者是 .NET Core 2.1 可执行文件
    • 我使用Cake 编译了我的库,我已经调用了dotnet msbuild

    【讨论】:

    • 我试过了,我得到了包元数据中的链接,但它仍然无法正常工作。我看到我的包不包含任何 pub 文件,而只包含一个 dll。你能告诉我们你的包裹里有什么吗?我也在使用 cake 中的 Nuget Package 任务。有什么特殊设置吗?你能提供更多关于这座建筑的信息吗?
    • 我发现没有包含 pdb 文件,因为我拼错了 AllowedOutputExtensionsInPackageBuildOutputFolder 标签。有了那个,包含了 pub 文件。无论如何,我仍然无法进入包裹。您能否提供一些有关 Visual Studio 选项中调试设置的详细信息?
    • 嗯,这听起来令人沮丧!在 VS 中,当我转到 Debug -> Options -> General 时,我选中了 Enable Just My CodeEnable Source Link support(这些看起来可能是相关的)。
    • @fra 当你说你不能进入包裹时,到底发生了什么?您是否看到一个弹出窗口询问您是否要从远程仓库下载源代码?
    • 这听起来很令人沮丧,但很高兴你终于找到了根本问题!
    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2021-08-18
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多