[Visual Studio 2017, Csproj propiedades]
Para actualizar automáticamente su propiedad PackageVersion / Versión / AssemblyVersion (o cualquier otra propiedad), en primer lugar, crear una nueva Microsoft.Build.Utilities.Task
clase que hará que su número de versión actual y enviar de vuelta el número actualizado (recomiendo para crear un proyecto separado sólo por esa clase).
Puedo actualizar manualmente los números MAJOR.MINOR, ¡pero MSBuild para actualizar 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;
}
}
A continuación, llame a su reciente creación de tareas en proceso de MSBuild de añadir el siguiente código en el archivo de .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 escoger la opción de proyecto de Visual Studio Pack (sólo cambia a BeforeTargets="Build"
para la ejecución de la tarea antes de la Estructura) el código RefreshVersion se activará para calcular el nuevo número de versión y XmlPoke
la tarea se actualizará su propiedad .csproj en consecuencia (sí, va a modificar el archivo).
Cuando se trabaja con bibliotecas NuGet, también enviar el paquete a repositorio NuGet con sólo añadir la siguiente tarea de construcción para el 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 (no olvide guardar su clave API NuGet llamando nuget SetApiKey <my-api-key>
o incluir la clave en el impulso de llamadas NuGet).
Sólo en caso de que ayuda a alguien ^ _ ^.