Azure devops 将*.snupkg符号包发布到VSTS中的专用源

Azure devops 将*.snupkg符号包发布到VSTS中的专用源,azure-devops,nuget,azure-pipelines,azure-artifacts,Azure Devops,Nuget,Azure Pipelines,Azure Artifacts,我想使用VSTS build将基于.net标准的代码打包并发布为nuget包。我已经创建了一个私有的nuget提要(在VSTS工件中),我希望将nuget包与symbols包一起发布到该提要 我尝试使用dotnet CLI任务来构建和发布,但它只将.nupkg而不是*.snupkg发布到nuget提要 我在谷歌上搜索了很多,但我只找到了与发布到nuget.org相关的文章,而没有找到与私人订阅源相关的文章 将*.snupkg符号包发布到VSTS中的专用源 您可以将.snupkg符号包发布到NuG

我想使用VSTS build将基于.net标准的代码打包并发布为nuget包。我已经创建了一个私有的nuget提要(在VSTS工件中),我希望将nuget包与symbols包一起发布到该提要

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

我在谷歌上搜索了很多,但我只找到了与发布到nuget.org相关的文章,而没有找到与私人订阅源相关的文章

将*.snupkg符号包发布到VSTS中的专用源

您可以将.snupkg符号包发布到NuGet.org,或发布到选择此体验的任何NuGet服务器上。但是azure devops私有提要没有这种体验

您可以从此wiki获取详细信息:

  • 发布包时,symbols包和.nupkg都可以轻松发布到NuGet.org,或任何选择此体验的NuGet服务器
原因

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

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

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

如果您不想在nuget.org上共享您的包,您可以或可以使用来解决此问题(您可以使用私有提要调试nuget包)


希望这能有所帮助。

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

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

1) 设置“使用.Net核心”任务以将.Net sdk升级到支持此功能的版本(如下所示)

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

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

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


您可能只想将符号PDB嵌入主NuGet包本身。依我看,这是目前最好的方法——它简单得多,根本不需要符号服务器,并且可以很好地与所有存储库类型、私有VST/Azure DevOps馈送公共repo一起使用。唯一的缺点是,即使客户机不使用调试信息,也必须下载稍大的NuGet软件包,但这似乎很小

在NuGet包中添加PDB通常只是将其添加到项目文件中:

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

和。

谢谢您的解决方案。我是否可以将.nupkg文件发布到*.pkgs.visualstudio.com,并将.snupkg文件发布到nuget.org以获得相同的nuget软件包代码?使用*.snupkg和使用VSTS Symbol Server(使用发布符号构建任务)来处理nuget软件包的.pdb文件有什么区别?@Prado,恐怕您不能这样做。查看wiki,“为了确保上传的符号与上传的.dll完全匹配,我们正在与编译器团队合作,将从.dll生成的.pdb散列存储在.dll中。这是上传.nupkgs和.snupkgs到NuGet.org的一个要求”。*.snupkg用于调试NuGet包,VSTS符号服务器用于发布符号以进行调试。一般来说,一个用于直接调试nuget包,一个用于发布符号文件。实际上,您可以将snupkg文件发布到Azure Artifacts-您不能使用它们进行调试(在编写本文时)。我已经稍微更新了答案。您可以将.snupks发布到服务,并且它们将被接受,这是正确的。但是,它们不能用于在VS中进行调试,并且它们还将“占用”您的nupkg使用的包名称/版本,因此您将无法发布该名称/版本,因此无法共享您尝试共享的位。我们目前正在将nupkg和snupkg文件推送到Azure DevOps,而没有看到“占用”在您所在的包名称/版本上。不知道为什么我们的经验和你的不同@默认行为是创建
symbols.nupkg
文件,而不是
.snupkg
。这导致了您看到的蹲式行为,根据,符号包“不受Azure DevOps工件服务支持”。我设法实现了这一点,但在AzureDevops工件中查看工件时,似乎没有可用的符号。您是否曾经使用过它们?@JoHam我最近没有尝试过,但当我发布此答案时,Azure DevOps没有将工件存储库识别为有效的符号位置。我最后一次听说,这是一段距离。