【问题标题】:Automatically publish a NuGet package built with VS2017自动发布使用 VS2017 构建的 NuGet 包
【发布时间】:2019-11-01 05:20:56
【问题描述】:

Visual Studio 2017 中的新功能是能够在构建时为某些目标类型(即我正在使用的 .NET Standard 2.0)生成 NuGet 包。

这很好用,在成功构建时会生成.nupkg 文件。

但是,我无法弄清楚如何将构建的包自动发布到我们的本地存储库。

我已经尝试过以下构建后事件:

nuget push -Source https://my.nuget.server/nuget/ "C:\Source\MyProject\bin\Release\MyProject.1.0.0.nupkg"

但这会带来两个问题:

  1. 包的名称包括版本号,它不能用作构建后事件变量,所以我不能说,例如nuget push $(NugetPackage)。我也想不出一个宏/变量的组合可以有效地让我得到包名。
  2. 自动 NuGet 打包过程发生在 post-build 事件之后,因此在 post-build 时,甚至还没有生成包!

Microsoft 提供了这种出色的自动 NuGet 打包功能,但无法将其推送到本地存储库(或者看起来如此)!

有人让这个工作吗?我错过了什么吗?有解决方法吗?这是正在处理的事情吗?

【问题讨论】:

    标签: visual-studio-2017 nuget-package .net-standard


    【解决方案1】:

    您可以通过将以下行直接添加到您的库 csproj 来自动发布到 nuget。您需要将环境变量设置为 nuget.exe 的位置,将该位置添加到系统的 PATH 中,或者将其硬输入到 Command 参数中。

    就个人而言,我更喜欢下载latest version of nuget.exe 并将其放入用户的%userprofile%\.nuget 文件夹中。这是 nuget 存储包的本地缓存的地方,所以它应该已经创建了。

    发布到远程存储库的示例。

    <Target Name="PostPackNugetDeploy" AfterTargets="Pack" Condition="'$(Configuration)' == 'Release'">
      <Exec Command="="%userprofile%\.nuget\nuget.exe push &quot;$(OutputPath)$(PackageId).$(PackageVersion).nupkg&quot; -Source &quot;$(NuGetSourceRelease)&quot; -Verbosity Detailed" />
    </Target>
    

    发布到本地存储库的示例。

    <Target Name="PostPackNugetDeploy" AfterTargets="Pack" Condition="'$(Configuration)' == 'Release'">
     <Exec Command="%userprofile%\.nuget\nuget.exe add &quot;$(OutputPath)$(PackageId).$(PackageVersion).nupkg&quot; -source \\Server\Packages" />
    </Target>
    

    您可以在此处https://docs.microsoft.com/en-us/nuget/reference/msbuild-targets 找到有关 nuget 的 MSBuild 目标的文档

    更新

    我已将其包装到一个 nuget 包中,可以在您的项目中引用。它会处理所有这些,您所要做的就是为您的项目添加一个属性。

    您可以在这里完善代码和完整指南。
    https://github.com/SimplerSoftware/SS.NuGet.Publish

    【讨论】:

    • 为我工作,但我使用“复制”命令而不是“执行”命令:&lt;Copy SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg" DestinationFolder="\\networkshare\folder" /&gt;
    • 这不会发布它,它会复制文件。如果您发布它,它将创建用于版本控制的文件夹结构。
    • 感谢您的提示。我是nuget的新手,所以我会尝试“添加”命令进行比较。
    • 约翰是对的。将其更改为 exec nuget 后,一个代表版本的文件夹、一个 sha 文件和一个 nuspec 文件都出现在 Nuget Feed Repository 中。
    【解决方案2】:

    已在此处请求此功能:Enable push from VS

    NuGet 发布通常使用 TFS、VSTS、Jenkins 等构建/部署自动化软件来处理。

    【讨论】:

    • 谢谢 - 我在该功能请求中添加了评论以跟踪它。似乎还有其他一些人也需要这个 - 不是每个人都有功能齐全的 ALM 设置,我们中的一些人喜欢直接从 VS 发布,因为它快速且无摩擦。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多