[Visual Studio 2017, thuộc tính .csproj ]
Để tự động cập nhật thuộc tính PackageVersion / Version / AssemblyVersion của bạn (hoặc bất kỳ thuộc tính nào khác), trước tiên, hãy tạo một Microsoft.Build.Utilities.Task
lớp mới sẽ lấy số bản dựng hiện tại của bạn và gửi lại số đã cập nhật (tôi khuyên bạn nên tạo một dự án riêng chỉ cho lớp đó).
Tôi cập nhật thủ công các số major.minor, nhưng hãy để MSBuild tự động cập nhật số bản dựng (1.1. 1 , 1.1. 2 , 1.1. 3 , v.v. :)
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;
}
}
Sau đó, gọi quy trình Tác vụ trên MSBuild được tạo gần đây của bạn, thêm mã tiếp theo vào tệp .csproj của bạn:
<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>
..
Khi chọn tùy chọn dự án Visual Studio Pack (chỉ cần thay đổi để BeforeTargets="Build"
thực thi tác vụ trước khi Xây dựng), mã RefreshVersion sẽ được kích hoạt để tính toán số phiên bản mới và XmlPoke
tác vụ sẽ cập nhật thuộc tính .csproj của bạn cho phù hợp (có, nó sẽ sửa đổi tệp).
Khi làm việc với các thư viện NuGet, tôi cũng gửi gói đến kho lưu trữ NuGet bằng cách thêm tác vụ xây dựng tiếp theo vào ví dụ trước.
<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
là nơi tôi có ứng dụng NuGet (hãy nhớ lưu khóa NuGet API của bạn bằng cách gọi nuget SetApiKey <my-api-key>
hoặc đưa khóa vào lệnh gọi đẩy NuGet).
Chỉ trong trường hợp nó giúp ai đó ^ _ ^.