使用Azure Devops和Source Link调试NuGet程序包

时间:2018-10-19 09:10:25

标签: azure-devops sourcelink

我正在尝试让SourceLink与私有的NuGet包一起使用。 我正在运行一个netcore2.1 Web应用程序,该应用程序引用了托管在Azure Devops NuGet feed上的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 Output窗口中看到一堆输出: '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中看到“源链接将从互联网下载”的提示。

当我调试并尝试单步进入我的NuGet程序包时,它会单步执行。

然后我尝试:

  1. 前往https://github.com/dotnet/sourcelink,并按照他们的说明安装Microsoft.SourceLink.Vsts.Git程序包(是否需要问题2 ?)

  2. 如果该命令不起作用,我升级了应用程序中的每个darn包,这迫使我安装.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。看起来正确,我认为吗?存在网址。

  5. 在看到@mitchdenny的评论https://github.com/MicrosoftDocs/vsts-docs/issues/1336#issuecomment-414415049后,禁用了索引编制。仍然不起作用。

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

2 个答案:

答案 0 :(得分:3)

  

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

是的。我在Azure DevOps Pipeline上成功构建了.NET Standard 2.0库,然后将其推送到我们的私有Azure DevOps Artifacts NuGet feed中。然后,在一个本地项目中,我能够进入该库(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

答案 1 :(得分:3)

我就如何使用.NET Core和AzureDevops编写了完整的blog,但这些步骤也应适用于.NET Standard项目。

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

  • 项目的调试信息需要从“便携式”更改为“完整”
  • AzureDevOps Nuget(还原,生成,打包和推送)需要使用.NET Core任务。
  • .NET Core构建任务应具有一个传递值“ debug”的参数“ --configuration”。这样做会生成.PDB文件
  • .NET Core pack任务应使用“ custom”命令,该自定义命令为“ pack”,并具有以下参数:“-include-symbols -vd”和在其中传递的“ -c”值“调试”。这样做可以告诉pack命令将.PDB文件包含在软件包中。