[Visual Studio 2017, .csproj properti ]
Untuk memperbarui properti PackageVersion / Version / AssemblyVersion Anda (atau properti lainnya) secara otomatis, pertama, buat Microsoft.Build.Utilities.Task
kelas baru yang akan mendapatkan nomor build Anda saat ini dan kirim kembali nomor yang diperbarui (saya sarankan untuk membuat proyek terpisah hanya untuk kelas itu).
Saya memperbarui nomor mayor.minor secara manual, tetapi biarkan MSBuild memperbarui nomor build secara otomatis (1.1. 1 , 1.1. 2 , 1.1. 3 , dll. :)
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;
}
}
Kemudian panggil Tugas yang baru saja Anda buat di proses MSBuild menambahkan kode berikutnya pada file .csproj Anda:
<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>
..
Saat memilih opsi proyek Visual Studio Pack (ubah saja menjadi BeforeTargets="Build"
untuk menjalankan tugas sebelum Build) kode RefreshVersion akan dipicu untuk menghitung nomor versi baru, danXmlPoke
tugas akan memperbarui properti .csproj Anda sesuai (ya, itu akan mengubah file).
Saat bekerja dengan pustaka NuGet, saya juga mengirim paket ke repositori NuGet dengan hanya menambahkan tugas build berikutnya ke contoh sebelumnya.
<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
adalah tempat saya memiliki klien NuGet (ingatlah untuk menyimpan kunci API NuGet Anda dengan menelepon nuget SetApiKey <my-api-key>
atau memasukkan kunci tersebut pada panggilan push NuGet).
Untuk berjaga-jaga jika itu membantu seseorang ^ _ ^.