[Visual Studio中2017,的.csproj性質]
要自動更新您的PackageVersion/Version/AssemblyVersion屬性(或任何其他屬性),首先創建一個新的Microsoft.Build.Utilities.Task
類,該類將獲得您當前的內部版本號併發送更新後的編號(我建議爲此創建單獨的項目類)。
我手動更新MAJOR.MINOR數字,但讓MSBuild的自動更新版本號(1.1。,1.1。,1.1。等:)
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包項目選項(只是改變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 SetApiKey <my-api-key>
保存您的NuGet API密鑰或包括在的NuGet推通話鍵)。
以防萬一它幫助某人^ _ ^。
下面的問題有一個簡單的方便的解決方案,以便如何通過在構建事件中生成源文件來將構建號注入到您的應用程序中。 http://stackoverflow.com/questions/4450231/can-i-make-a-constant-from-a-compile-time-env-variable-in-csharp – 2012-04-29 23:54:46
可能重複的[我可以自動增加文件構建版本當使用Visual Studio?](https://stackoverflow.com/questions/356543/can-i-automatically-increment-the-file-build-version-when-using-visual-studio) – 2017-10-28 04:34:45