[คุณสมบัติ Visual Studio 2017, .csproj ]
หากต้องการอัปเดตคุณสมบัติ PackageVersion / Version / AssemblyVersion ของคุณโดยอัตโนมัติ (หรือคุณสมบัติอื่น ๆ ) ขั้นแรกให้สร้างMicrosoft.Build.Utilities.Task
คลาสใหม่ที่จะรับหมายเลขบิลด์ปัจจุบันของคุณและส่งหมายเลขที่อัปเดตกลับไป (ขอแนะนำให้สร้างโปรเจ็กต์แยกเฉพาะสำหรับคลาสนั้น)
ฉันอัปเดตหมายเลข major.minor ด้วยตนเอง แต่ให้ MSBuild อัปเดตหมายเลขบิลด์โดยอัตโนมัติ (1.1. 1 , 1.1. 2 , 1.1. 3ฯลฯ :)
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;
}
}
จากนั้นเรียกใช้งานที่เพิ่งสร้างขึ้นในกระบวนการ MSBuild โดยเพิ่มรหัสถัดไปในไฟล์. 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>
..
เมื่อเลือกอ็อพชันโปรเจ็กต์ Visual Studio Pack (เพียงแค่เปลี่ยนเป็นการBeforeTargets="Build"
ดำเนินงานก่อนสร้าง) โค้ด RefreshVersion จะถูกทริกเกอร์เพื่อคำนวณหมายเลขเวอร์ชันใหม่และXmlPoke
งานจะอัปเดตคุณสมบัติ. csproj ของคุณตามนั้น (ใช่มันจะแก้ไขไฟล์)
เมื่อทำงานกับไลบรารี NuGet ฉันยังส่งแพ็กเกจไปยังที่เก็บ NuGet โดยเพียงแค่เพิ่มงานบิลด์ถัดไปในตัวอย่างก่อนหน้า
<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 (อย่าลืมบันทึกคีย์ NuGet API ของคุณโดยการโทรnuget SetApiKey <my-api-key>
หรือรวมคีย์ไว้ในการโทรแบบพุช NuGet)
เผื่อว่าจะช่วยใคร ^ _ ^