[विजुअल स्टूडियो 2017, .csproj गुण]
अपने पैकेजवर्सन/संस्करण/असेंबली वर्जन प्रॉपर्टी (या किसी अन्य प्रॉपर्टी) को स्वचालित रूप से अपडेट करने के लिए, पहले, एक नया Microsoft.Build.Utilities.Task
क्लास बनाएं जो आपके वर्तमान बिल्ड नंबर को प्राप्त करेगा और अपडेटेड नंबर वापस भेज देगा (मैं केवल इसके लिए एक अलग प्रोजेक्ट बनाने की अनुशंसा करता हूं कक्षा)।
मैं मैन्युअल रूप से स्वचालित रूप से बिल्ड नंबर (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;
}
}
अद्यतन करने के लिए MAJOR.MINOR संख्या अद्यतन करते हैं, लेकिन जाने MSBuild
फिर अपने हाल ही में बनाए गए कार्य को 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>
..
जब दृश्य स्टूडियो पैक परियोजना विकल्प उठा RefreshVersion कोड नए संस्करण संख्या की गणना करने ट्रिगर किया जाएगा (बस बिल्ड से पहले कार्य को क्रियान्वित करने के लिए BeforeTargets="Build"
करने के लिए बदल), और 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 –
संभावित डुप्लिकेट [क्या मैं स्वचालित रूप से फ़ाइल निर्माण संस्करण को बढ़ा सकता हूं विजुअल स्टूडियो का उपयोग करते समय?] (https://stackoverflow.com/questions/356543/can-i-automatically-increment-the-file-build-version-when-using-visual-studio) –