自动发布使用VS2017构建的NuGet包

时间:2017-12-13 20:10:14

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

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

这很好用,.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打包过程在构建后事件之后发生,所以在构建后,包还没有生成!
  3. Microsoft提供了这种kick-ass自动NuGet打包,但无法将其推送到本地存储库(或者看起来如此)!

    有没有人让这个工作?我错过了什么吗?有解决方法吗?这件事正在进行吗?

2 个答案:

答案 0 :(得分:6)

您可以直接将以下行添加到库 csproj ,从而将发布自动化为nuget。您需要将环境变量设置为nuget.exe的位置,将位置添加到系统的路径中,或者将其硬输入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目标的文档

答案 1 :(得分:2)

此处已请求此功能:MDN join

NuGet发布通常使用构建/部署自动化软件(如TFS,VSTS,Jenkins等)进行处理。