سؤال

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

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

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

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

هل كانت مفيدة؟

المحلول

مع "المدمج في" أشياء لا يمكنك استخدام 1.0.* أو 1.0.0.* محل المراجعة بناء على أرقام مشفرة تاريخ/الطابع الزمني ، والتي عادة ما تكون أيضا وسيلة جيدة.

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

أما بالنسبة تلقائيا تزايد أعداد استخدام AssemblyInfo المهمة:

AssemblyInfo المهمة

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

هناك 2 Gotchas:

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

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

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);

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

في .صافي انه الرئيسية.طفيفة.بناء.التنقيح.

نصائح أخرى

VS.NET التخلف الجمعية الإصدار 1.0.* ويستخدم المنطق التالي عندما صناعة السيارات في تزايد:فإنه يحدد بناء جزء منه إلى عدد الأيام منذ 1 كانون الثاني / يناير 2000 ، مجموعات تنقيح جزء منه إلى عدد الثواني منذ منتصف الليل بالتوقيت المحلي ، مقسوما على اثنين.ترى هذا المقالة MSDN.

إصدار التجميع يقع في assemblyinfo.vb أو assemblyinfo.cs الملف.من الملف:

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> 

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 

لقد وجدت أنه يعمل بشكل جيد ببساطة عرض تاريخ آخر بناء باستخدام التالية أينما إصدار المنتج هو مطلوب:

System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString("yyyy.MM.dd.HH.mm.ss")

بدلا من محاولة الحصول على نسخة من شيء كما يلي:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
object[] attributes = assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), false);
object attribute = null;

if (attributes.Length > 0)
{
    attribute = attributes[0] as System.Reflection.AssemblyFileVersionAttribute;
}

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

تقريبا كل منهم شكلا من أشكال $ Id $ العلامة التي يحصل الموسع عند إيداعه.

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

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

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

تلقائيا تحديث PackageVersion/الإصدار/AssemblyVersion الملكية (أو أي ممتلكات أخرى) أولا ، 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>
 ..

عند اختيار 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 العميل (تذكر لحفظ NuGet مفتاح API عن طريق الاتصال nuget SetApiKey <my-api-key> أو إدراج المفتاح على NuGet دفع المكالمة).

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

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

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top