[Visual Studio 2017, propiedades de .csproj ]
Para actualizar automáticamente su propiedad PackageVersion / Version / AssemblyVersion (o cualquier otra propiedad), primero, cree una nueva Microsoft.Build.Utilities.Task
clase que obtenga su número de compilación actual y envíe el número actualizado (recomiendo crear un proyecto separado solo para esa clase).
Actualizo manualmente los números principales y menores, pero dejo que MSBuild actualice automáticamente el número de compilación (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;
}
}
Luego llame a su tarea recientemente creada en el proceso de MSBuild agregando el siguiente código en su archivo .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>
..
Al elegir la opción de proyecto Visual Studio Pack (simplemente cambie a BeforeTargets="Build"
para ejecutar la tarea antes de la compilación), el código RefreshVersion se activará para calcular el nuevo número de versión y la XmlPoke
tarea actualizará su propiedad .csproj en consecuencia (sí, modificará el archivo).
Cuando trabajo con bibliotecas NuGet, también envío el paquete al repositorio NuGet simplemente agregando la siguiente tarea de compilación al ejemplo anterior.
<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
es donde tengo el cliente NuGet (recuerde guardar su clave API de NuGet llamando nuget SetApiKey <my-api-key>
o incluir la clave en la llamada push de NuGet).
Por si acaso ayuda a alguien ^ _ ^.