[Visual Studio 2017, .csproj propriétés ]
Pour mettre à jour automatiquement votre propriété PackageVersion / Version / AssemblyVersion (ou toute autre propriété), commencez par créer un nouveau Microsoft.Build.Utilities.Task
classe qui obtiendra votre numéro de build actuel et renvoyer le numéro mis à jour (je recommande de créer un projet séparé uniquement pour cette classe).
Mettre à jour manuellement les numéros MAJOR.MINOR, mais laissez - MSBuild mettre à jour automatiquement le numéro de build (1.1. 1 , 1,1. 2 , 1.1. 3 , etc. :)
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;
}
}
Appelez ensuite votre processus de tâche récemment créé sur MSBuild en ajoutant le code suivant sur votre fichier .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>
..
Lors de la sélection de l'option de projet Visual Studio Pack (il suffit de changer BeforeTargets="Build"
pour exécuter la tâche avant la génération) le code RefreshVersion sera déclenché pour calculer le nouveau numéro de version, etXmlPoke
tâche mettra à jour votre propriété .csproj en conséquence (oui, cela modifiera le fichier).
Lorsque vous travaillez avec des bibliothèques NuGet, j'envoie également le package au référentiel NuGet en ajoutant simplement la tâche de construction suivante à l'exemple précédent.
<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
est l'endroit où j'ai le client NuGet (n'oubliez pas d'enregistrer votre clé d'API NuGet en appelant nuget SetApiKey <my-api-key>
ou d'inclure la clé dans l'appel push NuGet).
Juste au cas où cela aiderait quelqu'un ^ _ ^.