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

qJa*_*ake 7 nuget-package visual-studio-2017 .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"
Run Code Online (Sandbox Code Playgroud)

但这提出了两个问题:

  1. 包的名称包括版本号,这不能作为构建后的事件变量,因此我不能说,例如,nuget push $(NugetPackage).我也无法找出能够有效获得包名称的宏/变量组合.
  2. 自动NuGet打包过程发生在构建后事件之后,因此在构建后,包甚至尚未生成!

微软提供了这种kick-ass自动NuGet包装,但无法将其推送到本地存储库(或者看起来如此)!

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

Joh*_*n C 7

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

就个人而言,我更喜欢下载最新版本的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>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

  • 那不会发布,它会复制文件。如果发布它,它将创建用于版本控制的文件夹结构。 (2认同)

des*_*dgc 3

此处已请求此功能:Enable Push from VS

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