[Visual Studio 2017、.csprojプロパティ]
PackageVersion / Version / AssemblyVersionプロパティ(またはその他のプロパティ)を自動的に更新するには、まず、Microsoft.Build.Utilities.Task
現在のビルド番号を取得して更新された番号を返す新しいクラスを作成します(そのクラス専用の別のプロジェクトを作成することをお勧めします)。
私は手動で自動的にビルド番号(1.1を更新するためのMSBuildをメジャー。マイナー番号を更新しますが、してみましょう。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プロセスでTaskを呼び出し、.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プッシュ呼び出しにキーを含めることを忘れないでください)。
万一に備えて^ _ ^。