[विजुअल स्टूडियो 2017, .csproj गुण]
अपने पैकेजवर्जन / संस्करण / असेंबली वर्जन प्रॉपर्टी (या किसी अन्य प्रॉपर्टी) को स्वचालित रूप से अपडेट करने के लिए, पहले एक नया Microsoft.Build.Utilities.Task
वर्ग बनाएं, जो आपके वर्तमान बिल्ड नंबर को प्राप्त करेगा और अपडेट किए गए नंबर को वापस भेज देगा (मैं सिर्फ उस वर्ग के लिए एक अलग प्रोजेक्ट बनाने की सलाह देता हूं)।
मैं मैन्युअल रूप से प्रमुख.नंबर संख्याओं को अपडेट करता हूं, लेकिन MSBuild को बिल्ड नंबर (1.1 , 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 प्रक्रिया में अपने .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>
..
जब विजुअल स्टूडियो पैक प्रोजेक्ट विकल्प चुनते हैं (सिर्फ 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 पुश कॉल पर कुंजी को शामिल करने के लिए अपनी NuGet API कुंजी को सहेजना याद रखें )।
बस मामले में यह किसी को मदद करता है ^ _ ^।