[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 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 (не забудьте сохранить ваш ключ API NuGet по телефону nuget SetApiKey <my-api-key>
или включить клавишу на нажимной вызова 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-automatic-increment-the-file-build-version-when-using-visual-studio) – 2017-10-28 04:34:45