如何在VS 2017中自动化NuGet包和发布

时间:2018-03-09 12:27:00

标签: visual-studio-2017 nuget version

寻找允许我们自动化NuGet包部署过程的解决方案。目前" Pack"选项只是构建包,但其他一切都需要手动完成。我希望将这些步骤内置到这个新的" Pack and Deploy"任务:

  1. 增量包版本 - 类似于" npm版本补丁"
  2. Builg package
  3. 将刚创建的包推送到NuGet存储库
  4. 也许有人已经这样做并且可以分享经验?

    经过更多研究后发现如何在包装后推送:Automating Nuget Package Push With .NetCore RC2

1 个答案:

答案 0 :(得分:3)

  
      
  1. 增量包版本 - 与“npm版本补丁”类似的东西
  2.   

在回答此问题之前,我们需要了解有关AssemblyVersionAssemblyInformationalVersion和NuGet版本的一些信息,请查看this thread以获取详细信息。那你就会知道:

Nuget不会在AssemblyVersion文件中使用AssemblyFileVersionAssemblyInfo.cs。它使用第三个版本控制属性:AssemblyInformationalVersion

Nuget实际上将该字符串中的任何内容应用为包版本。因此,要增加包版本,我们需要在AssemblyInfo.cs

中手动添加以下代码
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("2.0.0")]

因此,当我们需要发布新版本的软件包时,我们只需更新AssemblyInformationalVersion文件中AssemblyInfo.cs的值。

  
      
  1. 构建包
  2.   

此问题的答案取决于项目的样式,旧项目样式或新项目样式(VS2017-SDK)。

来源Old csproj to new csproj: Visual Studio 2017 upgrade guide

当你进入旧式项目时:

您可以通过构建后事件自动打包nuget包:

$(PathOfYourNuGet)\nuget.exe pack "$(ProjectPath)"

使用此构建事件,MSBuild将在您构建项目时自动创建nuget包。

当您进入新风格项目时 在新款式项目中,packagin nuget包变得非常容易。只需选中项目属性的包标签上的复选框Generate NuGet packafe on build

enter image description here

注意:当您处于新样式项目中时,可以在包选项卡上的包版本中增加包版本。

  
      
  1. 将刚创建的包推送到NuGet存储库
  2.   

正如您所发现的,在自动发布nuget包后,您可以添加自定义目标来推送它:

  <Target Name="PushNuGetPackage" AfterTargets="GenerateNuspec">
    <Message Text="Push NuGet Package to NuGet Feed" Importance="high"></Message>
    <Exec Command="$(PathOfYourNuGet)\nuget.exe push $(TargetDir)\xxx.1.0.0.nupkg -Source NuGetrepository"></Exec>
  </Target>

来源Automatic NugetPackage upload to Nuget feed

注意:您不能将具有相同名称和相同版本的nuget包推送到nuget.org。