将 *.snupkg 符号包发布到 VSTS 中的私人提要

Publish *.snupkg symbol package to private feed in VSTS

我想使用 VSTS 构建将基于 .net 标准的代码打包并发布为 nuget 包。我创建了一个私人 nuget 提要(在 VSTS Artifacts 中),我想将 nuget 包和符号包一起发布到它。

我尝试使用 dotnet CLI 任务来构建和发布,但它只将 .nupkg 而不是 *.snupkg 发布到 nuget 提要。

我用谷歌搜索了很多,但我只找到了与发布到 nuget.org 而不是私人供稿相关的文章。

Publish *.snupkg symbol package to private feed in VSTS

您可以将 .snupkg 符号包发布到 NuGet.org,或发布到任何选择加入此体验的 NuGet 服务器。但是azure devops private feed没有这个经验。

您可以从这个 wiki 获取详细信息 NuGet Package Debugging & Symbols Improvements:

  • When publishing packages, both the symbols package and the .nupkg will be easily published to NuGet.org, or to any NuGet server that opts into this experience.

原因:

我们知道,当我们在 Visual Studio 中使用 .snupkg 时,我们在符号文件 (.pdb) 位置下添加了一个新的符号服务器位置:

但是Visual Studio只能直接解析符号文件(.pdb)而不是.snupkg包,所以需要NuGet服务器来帮忙我们从 .snupkg 包中读取 .pdb 文件。 Azure devops feed 更倾向于成为包的共享存储库。

因此,我们必须将 *.snupkg 符号包发布到 NuGet.org,或发布到任何选择加入此体验的 NuGet 服务器

如果您不想在 nuget.org 上共享您的包,您可以 host your own NuGet server or you can use a 解决此问题(您可以使用私人提要调试 nuget 包)。

希望这对您有所帮助。

Azure Artifacts 目前不支持 .snupkgs,但它有一个符号服务器,如果您使用 Azure Pipelines 进行构建,您可以将其发布到该服务器。 This doc 介绍如何设置发布符号的管道。

您可以将 snupkg 文件发布到 Azure DevOps,但此时,您不能使用 VS 使用它们进行调试。这是我的做法:

1) 设置一个 "Use .Net Core" 任务来将 .net sdk 升级到支持它的版本(如下所示)

2) 设置自定义 dotnet pack 命令(如下所示)

3) 使用 dotnet push 命令将其推送到 Azure(如下所示)

这导致 snupkg 被推送到 Azure DevOps Artifacts,因此:

您可能只想将符号 PDB 嵌入主 NuGet 包本身。 IMO 这是今天最好的方法 - 它更简单,完全不需要符号服务器并且适用于所有存储库类型,私有 VSTS/Azure DevOps 提要 public 回购。唯一的缺点是客户端即使不使用调试信息也必须下载稍大的 NuGet 包,但这似乎很小。

在 NuGet 包中添加 PDB 通常只需将其添加到您的项目文件中即可:

<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>

参见NuGet #4142 and