c# - online - vote ترجمة




تحديث رقم الإصدار تلقائيًا (5)

إذا كنت تريد رقم زيادة تلقائي يتم تحديثه في كل مرة يتم فيها إجراء ترجمة ، يمكنك استخدام VersionUpdater من حدث ما قبل VersionUpdater . يمكن لحدث ما قبل الإنشاء الخاص بك التحقق من تكوين البنية إذا كنت تفضل ذلك بحيث يزيد رقم الإصدار فقط من أجل إنشاء الإصدار (على سبيل المثال).

أرغب في زيادة خاصية إصدار التطبيق الخاص بي لكل بنية ، لكنني لست متأكدًا من كيفية تمكين هذه الوظيفة في Visual Studio (2005/2008). لقد حاولت تحديد AssemblyVersion على أنه 1.0. * لكن هذا لا يجعلني أريد ما أريده بالضبط.

أنا أستخدم أيضًا ملف إعدادات وفي المحاولات السابقة عندما غيّرت إصدار التجميع ، تمت إعادة تعيين الإعدادات إلى الإعدادات الافتراضية لأن التطبيق بحث عن ملف الإعدادات في دليل آخر.

أرغب في أن أكون قادرًا على عرض رقم إصدار في شكل 1.1.38 ، لذلك عندما يجد المستخدم مشكلة ، يمكنني تسجيل الإصدار الذي يستخدمه بالإضافة إلى إخبارهم بالترقية إذا كان لديهم إصدار قديم.

سيكون موضع تقدير شرح قصير لكيفية عمل الإصدار. متى يتم زيادة رقم البنية والمراجعة؟


باستخدام العناصر "المضمنة" ، لا يمكنك استخدام 1.0.

لمزيد من المعلومات ، راجع وثائق رابط التجميع في علامة / v.

بالنسبة إلى زيادة الأرقام تلقائيًا ، استخدم مهمة AssemblyInfo:

مهمة AssemblyInfo

يمكن تكوين هذا لزيادة عدد البناء تلقائيا.

هناك 2 مسكات:

  1. يقتصر كل رقم من الأرقام الأربعة في سلسلة الإصدار على 65535. هذا تحديد لـ Windows ومن غير المرجح أن يتم إصلاحه.
  2. يتطلب استخدام with with Subversion تغييرًا بسيطًا:

من السهل جدًا استعادة رقم الإصدار:

Version v = Assembly.GetExecutingAssembly().GetName().Version;
string About = string.Format(CultureInfo.InvariantCulture, @"YourApp Version {0}.{1}.{2} (r{3})", v.Major, v.Minor, v.Build, v.Revision);

وللتوضيح: في .net أو على الأقل في C # ، يكون البناء في الواقع هو الرقم الثالث ، وليس الرابع كما قد يتوقع بعض الأشخاص (على سبيل المثال ، Delphi Developers الذين اعتادوا على Major.Minor.Release.Build).

في .net ، انها Major.Minor.Build.Revision.


ما هو نظام التحكم في المصدر الذي تستخدمه؟

تحتوي جميعها تقريبًا على بعض أشكال علامة $ Id $ التي يتم توسيعها عند إيداع الملف.

عادةً ما أستخدم شكلًا من أشكال الاختراق لعرض هذا كرقم الإصدار.

البديل الآخر هو استخدام لاستخدام التاريخ كرقم البناء: 080803-1448


منذ بعض الوقت كتبت إكس سريعة وقذرة من شأنها تحديث الإصدار في إصدار التجميع. {cs / vb} - لقد استخدمت أيضًا rxfind.exe (أداة استبدال بحث بسيطة وقوية تستند إلى regex) للقيام بذلك تحديث من سطر الأوامر كجزء من عملية البناء. بعض تلميحات helpfule الأخرى:

  1. افصل التجميع إلى أجزاء المنتج (اسم الشركة ، الإصدار ، إلخ.) وأجزاء التجميع المحددة (اسم التجميع وما إلى ذلك). انظر here
  2. أيضًا - أستخدم التخريب ، لذلك وجدت أنه من المفيد تعيين رقم البنية على رقم مراجعة التخريب ، مما يجعل من السهل جدًا دائمًا الرجوع إلى قاعدة البيانات التي ولدت التجميع (على سبيل المثال ، تم إنشاء 1.4.100.1502 من المراجعة 1502).

[Visual Studio 2017 ، خصائص .csproj ]

لتحديث خاصية PackageVersion / Version / AssemblyVersion الخاصة بك (أو أي خاصية أخرى) ، أولاً ، قم بإنشاء فئة Microsoft.Build.Utilities.Task جديدة ستحصل على رقم البنية الحالي الخاص بك وترسل الرقم المحدّث مرة أخرى (أوصي بإنشاء رقم منفصل مشروع فقط لتلك الفئة).

أقوم يدويًا بتحديث أرقام major.minor ، لكن دع 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>
 ..

عند اختيار خيار مشروع Visual Studio Pack (فقط قم بالتغيير إلى BeforeTargets="Build" لتنفيذ المهمة قبل Build) ، سيتم تشغيل رمز RefreshVersion لحساب رقم الإصدار الجديد ، XmlPoke مهمة 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 الخاص بك عن طريق الاتصال بـ nuget SetApiKey <my-api-key> أو لتضمين المفتاح في مكالمة دفع NuGet).

فقط في حالة أنها تساعد شخص ما ^ _ ^.





versioning