[Visual Studio 2017, .csproj özellikleri]
PackageVersion / Version / AssemblyVersion özelliğinizi (veya başka herhangi bir mülkü) otomatik olarak güncellemek için, önce Microsoft.Build.Utilities.Task
mevcut yapı numaranızı alacak ve güncellenmiş numarayı geri gönderecek yeni bir sınıf oluşturun (sadece bu sınıf için ayrı bir proje oluşturmanızı öneririm).
Büyük.minor sayıları manuel olarak güncelliyorum, ancak MSBuild'in yapı numarasını otomatik olarak güncellemesine izin veriyorum (1.1. 1 , 1.1. 2 , 1.1. 3 , vb. :)
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;
}
}
Daha sonra MSBuild işleminde son oluşturduğunuz Görev'i çağırarak sonraki kodu .csproj dosyanıza ekleyin:
<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>
..
Visual Studio Pack proje seçeneğini seçerken (yalnızca BeforeTargets="Build"
, Oluşturmadan önce görevi yürütmek için değiştirin ), RefreshVersion kodu yeni sürüm numarasını hesaplamak için tetiklenir ve XmlPoke
görev .csproj özelliğinizi buna göre günceller (evet, dosyayı değiştirir).
NuGet kitaplıkları ile çalışırken, sadece bir sonraki derleme görevini önceki örneğe ekleyerek paketi NuGet deposuna da gönderiyorum.
<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
NuGet istemcisine sahip olduğum yerdir ( nuget SetApiKey <my-api-key>
NuGet push çağrısına anahtarı çağırarak veya anahtarı dahil ederek NuGet API anahtarınızı kaydetmeyi unutmayın ).
Birine yardım etmesi ihtimaline karşı ^ _ ^.