আমি এমন সমাধান নিয়ে এসেছি যা তারকা (*) - এসেম্বলি ভার্সন ("1.0। ") * এর সাথে পুরানো এসেম্বলি ভার্সন অ্যাট্রিবিউটের মতো প্রায় একই কাজ করেছিল worked
মান AssemblyVersion এবং AssemblyFileVersion MSBuild প্রকল্পে হয় .csproj ফাইল (নেই AssemblyInfo.cs ) সম্পত্তি হিসেবে FileVersion (উত্পন্ন AssemblyFileVersionAttribute ) এবং AssemblyVersion (উত্পন্ন AssemblyVersionAttribute )। এমএস বিল্ড প্রক্রিয়াতে আমরা সংস্করণ নম্বর উত্পন্ন করতে আমাদের কাস্টম এমএসবিল্ড টাস্কটি ব্যবহার করি এবং তারপরে আমরা এই ফাইল ভার্সন এবং এসেম্বলি ভার্সনের বৈশিষ্ট্যগুলিকে টাস্ক থেকে নতুন মান সহ ওভাররাইড করি ।
সুতরাং প্রথম আমরা আমাদের কাস্টম MSBuild কার্য তৈরি GetCurrentBuildVersion :
public class GetCurrentBuildVersion : Task
{
[Output]
public string Version { get; set; }
public string BaseVersion { get; set; }
public override bool Execute()
{
var originalVersion = System.Version.Parse(this.BaseVersion ?? "1.0.0");
this.Version = GetCurrentBuildVersionString(originalVersion);
return true;
}
private static string GetCurrentBuildVersionString(Version baseVersion)
{
DateTime d = DateTime.Now;
return new Version(baseVersion.Major, baseVersion.Minor,
(DateTime.Today - new DateTime(2000, 1, 1)).Days,
((int)new TimeSpan(d.Hour, d.Minute, d.Second).TotalSeconds) / 2).ToString();
}
}
টাস্ক ক্লাস মাইক্রোসফ্টের কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত U NuGet প্যাকেজ। এটি ইনপুটটিতে বেসভেরিশন সম্পত্তি (alচ্ছিক) নেয় এবং সংস্করণ আউটপুট সম্পত্তিতে উত্পন্ন সংস্করণটি দেয়। সংস্করণ নম্বর পাওয়ার যুক্তিটি NET স্বয়ংক্রিয় সংস্করণ হিসাবে একই (বিল্ড নম্বরটি 1/1/2000 থেকে দিন গণনা এবং মধ্যরাত থেকে রিভিশনটি অর্ধ সেকেন্ড)।
এই এমএসবিল্ড টাস্কটি তৈরি করতে, আমরা এই ক্লাসের সাথে .NET স্ট্যান্ডার্ড 1.3 ক্লাসের লাইব্রেরি প্রকল্পের প্রকারটি ব্যবহার করি ।
.csproj ফাইলটি এর মতো দেখতে পারে:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
<AssemblyName>DC.Build.Tasks</AssemblyName>
<RootNamespace>DC.Build.Tasks</RootNamespace>
<PackageId>DC.Build.Tasks</PackageId>
<AssemblyTitle>DC.Build.Tasks</AssemblyTitle>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Build.Framework" Version="15.1.1012" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.1.1012" />
</ItemGroup>
</Project>
এই টাস্ক প্রকল্পটি আমার গিটহাব হোলজন / ডিসি.বিল্ড.টাস্কগুলিতেও উপলব্ধ
এখন আমরা এই কার্যটি ব্যবহার করতে এমএসবিল্ড সেটআপ করি এবং ফাইল ভার্সন এবং এসেম্বলি ভার্সন বৈশিষ্ট্য সেট করি । .Csproj ফাইলে এটি দেখতে এমন দেখাচ্ছে:
<Project Sdk="Microsoft.NET.Sdk">
<UsingTask TaskName="GetCurrentBuildVersion" AssemblyFile="$(MSBuildThisFileFullPath)\..\..\DC.Build.Tasks.dll" />
<PropertyGroup>
...
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<FileVersion>1.0.0.0</FileVersion>
</PropertyGroup>
...
<Target Name="BeforeBuildActionsProject1" BeforeTargets="BeforeBuild">
<GetCurrentBuildVersion BaseVersion="$(FileVersion)">
<Output TaskParameter="Version" PropertyName="FileVersion" />
</GetCurrentBuildVersion>
<PropertyGroup>
<AssemblyVersion>$(FileVersion)</AssemblyVersion>
</PropertyGroup>
</Target>
</Project>
এখানে গুরুত্বপূর্ণ জিনিস:
- উল্লেখ করেছে UsingTask থেকে GetCurrentBuildVersion টাস্ক আমদানি DC.Build.Tasks.dll । এটি অনুমান করে যে এই dll ফাইলটি আপনার .csproj ফাইল থেকে মূল ডিরেক্টরিতে অবস্থিত।
- আমাদের উইন্ডোইলডাকশনপ্রজেক্ট 1 টার্গেট যা কলটি টাস্ককে কল করে তাতে আমাদের প্রতি প্রকল্পের ক্ষেত্রে অনন্য নাম থাকতে হবে যদি আমাদের সমাধানে আরও প্রকল্প থাকে যা গেটকোর্নবিল্ড ভার্সন টাস্ককে ডাকে।
এই সমাধানটির সুবিধাটি হ'ল এটি কেবল বিল্ড সার্ভারে বিল্ডগুলি থেকে নয়, ডটনেট বিল্ড বা ভিজ্যুয়াল স্টুডিও থেকে ম্যানুয়াল বিল্ডগুলিতেও কাজ করে ।
/p:
পতাকাটি পাস করতে পারেনdotnet msbuild
এবং সংস্করণ, সংস্থা, কপিরাইট ... সমস্ত ভাল জিনিস সেট করতে পারেন।