[Visual Studio 2017, proprietà .csproj ]
Per aggiornare automaticamente la proprietà PackageVersion / Version / AssemblyVersion (o qualsiasi altra proprietà), innanzitutto creare una nuova Microsoft.Build.Utilities.Task
classe che otterrà il numero di build corrente e restituirà il numero aggiornato (consiglio di creare un progetto separato solo per quella classe).
Aggiorno manualmente i numeri major.minor, ma lascio che MSBuild aggiorni automaticamente il numero di build (1.1. 1 , 1.1. 2 , 1.1. 3 , ecc. :)
using Microsoft.Build.Framework;
using System;
using System.Collections.Generic;
using System.Text;
public class RefreshVersion : Microsoft.Build.Utilities.Task
{
[Output]
public string NewVersionString { get; set; }
public string CurrentVersionString { get; set; }
public override bool Execute()
{
Version currentVersion = new Version(CurrentVersionString ?? "1.0.0");
DateTime d = DateTime.Now;
NewVersionString = new Version(currentVersion.Major,
currentVersion.Minor, currentVersion.Build+1).ToString();
return true;
}
}
Quindi chiama la tua attività creata di recente nel processo MSBuild aggiungendo il codice successivo sul tuo file .csproj:
<Project Sdk="Microsoft.NET.Sdk">
...
<UsingTask TaskName="RefreshVersion" AssemblyFile="$(MSBuildThisFileFullPath)\..\..\<dll path>\BuildTasks.dll" />
<Target Name="RefreshVersionBuildTask" BeforeTargets="Pack" Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<RefreshVersion CurrentVersionString="$(PackageVersion)">
<Output TaskParameter="NewVersionString" PropertyName="NewVersionString" />
</RefreshVersion>
<Message Text="Updating package version number to $(NewVersionString)..." Importance="high" />
<XmlPoke XmlInputPath="$(MSBuildProjectDirectory)\mustache.website.sdk.dotNET.csproj" Query="/Project/PropertyGroup/PackageVersion" Value="$(NewVersionString)" />
</Target>
...
<PropertyGroup>
..
<PackageVersion>1.1.4</PackageVersion>
..
Quando si seleziona l'opzione del progetto Visual Studio Pack (basta passare a BeforeTargets="Build"
per eseguire l'attività prima di Build), il codice RefreshVersion verrà attivato per calcolare il nuovo numero di versione e l' XmlPoke
attività aggiornerà di conseguenza la proprietà .csproj (sì, modificherà il file).
Quando si lavora con le librerie NuGet, invio anche il pacchetto al repository NuGet semplicemente aggiungendo l'attività di compilazione successiva all'esempio precedente.
<Message Text="Uploading package to NuGet..." Importance="high" />
<Exec WorkingDirectory="$(MSBuildProjectDirectory)\bin\release" Command="c:\nuget\nuget push *.nupkg -Source https://www.nuget.org/api/v2/package" IgnoreExitCode="true" />
c:\nuget\nuget
è dove ho il client NuGet (ricordarsi di salvare la chiave API NuGet chiamando nuget SetApiKey <my-api-key>
o di includere la chiave nella chiamata push NuGet).
Nel caso in cui aiuti qualcuno ^ _ ^.