Otomatik sürüm numarasını güncellemek

oy
95

Benim uygulamanın sürüm özelliği her yapı için artan için ama Visual Studio (2005/2008) bu işlevi etkinleştirmek için nasıl emin değilim istiyoruz. Ben 1.0. Olarak AssemblyVersion * belirtmek için çalıştık ama istediğim tam olarak ne beni almaz.

Ben de bir ayarlar dosyası kullanıyorum ve önceki girişimlerde montaj versiyonu uygulamanın başka dizindeki ayarları dosyasının aradık beri ayarları varsayılan sıfırlanır var değiştiği.

Bir kullanıcı ben kullandıkları sürümü giriş yapabilirsiniz bir sorun bulur yanı sıra, onların eski salınımını varsa yükseltme onlara öylesine zaman 1.1.38 şeklinde bir sürüm numarasını görüntülemek edebilmek istiyorum.

nasıl sürüm eserlerin kısa açıklama da mutluluk duyacağız. Ne zaman inşa ve revizyon numarası artırılır alır?

Oluştur 03/08/2008 saat 12:12
kaynak kullanıcı
Diğer dillerde...                            


7 cevaplar

oy
85

şeyler "Dahili" ile, yapamam, 1.0 kullanma gibi. * veya 1.0.0. * de genellikle iyi bir yoldur kodlanmış bir tarih / zaman damgası ile revizyon yerine ve numaraları inşa edecek.

Daha fazla bilgi için, bkz Montaj Bağlayıcı / hacim etiketinde Belgeleri.

otomatik sayıları artan gelince, AssemblyInfo Görevi kullanın:

AssemblyInfo Görev

Bu, otomatik olarak inşa sayısını artırmak için yapılandırılabilir.

2 Sorunlar vardır:

  1. Versiyon dizesinde 4 sayı her Bu tamir için bir Windows Sınırlaması ve olası değildir 65535 sınırlıdır.
  2. Subversion küçük bir değişiklik gerektirir ile birlikte kullanılması:

Sürüm numarası daha sonra oldukça kolaydır alınıyor:

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 olarak veya C # en azından inşa aslında beklediğinizden ÜÇÜNCÜ sayı değil (Major.Minor.Release.Build için kullanılan örneği Delphi Geliştiriciler için) bazı insanlar olarak dördüncü biridir: Ve netleştirmek için.

.net, bu Ana.Alt.Yapı.Düzeltme bu.

Cevap 03/08/2008 saat 12:41
kaynak kullanıcı

oy
19

VS.NET 1.0 varsayılan Montaj sürümü * ve aşağıdaki mantığı kullandığında otomatik artan:. O 1 Ocak 2000 yılından bu yana gün sayısına inşa bölümünü ayarlar ve gece yarısından itibaren saniye sayısı için revizyon bölümünü ayarlayan, ikiye bölünmüş yerel saat. Bu Bkz MSDN makalesine .

Montaj sürümü AssemblyInfo.vb veya AssemblyInfo.cs dosyasını bulunur. Dosyadan:

' 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")> 
Cevap 30/09/2008 saat 21:58
kaynak kullanıcı

oy
8

Ben sadece bir ürün sürümü ihtiyaç duyulan her yerde takip kullanarak son yapı tarihini görüntülemek için iyi çalışıyor bulduk:

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

Aksine aşağıdaki gibi bir şey gelen sürümü almak için çalışmak yerine:

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;
}
Cevap 04/03/2013 saat 21:58
kaynak kullanıcı

oy
6

Ne kaynak kontrol sistemi kullanıyorsunuz?

Hemen hemen hepsi dosyanın teslim edildiğinde genişletilmiş alır $ Id $ etiketi çeşit var.

Genellikle sürüm numarası olarak bu gösterilecek hackery çeşit kullanın.

diğer alternatif yapı numarası ile tarihini kullanmak için kullandıkları edilir: 080803-1448

Cevap 03/08/2008 saat 19:46
kaynak kullanıcı

oy
2

[Visual Studio 2017 .Csproj özellikleri]

Otomatik PackageVersion / Sürüm / AssemblyVersion özelliği (veya başka bir özellik) güncellemek için öncelikle, yeni oluşturmak Microsoft.Build.Utilities.Taskmevcut yapı numarasını almak ve güncellenmiş numarasını geri gönderecek sınıf (sadece o sınıf için ayrı bir proje oluşturmak için önerilir).

El ile otomatik olarak yapı numarasını (1.1 güncellemek için MSBuild major.minor numaralarını güncellemek, ancak edelim. 1 , 1.1. 2 , 1.1. 3 , vb :)

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

}

Ardından çağrı senin yakın zamanda .Csproj dosyada sonraki kod ekleyerek MSBuild sürecine Görev oluşturuldu:

<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 Paketi projesi seçeneği seçerken (sadece geçmek BeforeTargets="Build"RefreshVersion kodu yeni sürümü sayısını hesaplamak için tetiklenecek Build'a önce görevi yürütmek için) ve XmlPokegörev (evet, o dosyayı değiştirecektir) buna göre .Csproj özelliğini güncelleyecektir.

Nuget kütüphaneleri ile çalışırken, ben de sadece önceki örneğe sonraki inşa görevi ekleyerek Nuget deposuna paket göndermek.

<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\nugetBen Nuget istemci sahip olduğu (arayarak Nuget API anahtarınızı kaydetmeyi unutmayın olduğu nuget SetApiKey <my-api-key>veya Nuget itme çağrısı anahtarı dahil etmek).

Her ihtimale karşı birisinin ^ _ ^ yardımcı olur.

Cevap 10/05/2017 saat 14:08
kaynak kullanıcı

oy
1

yapmak için de kullandım rxfind.exe (basit ve güçlü bir düzenli ifade tabanlı arama aracı değiştirin) -. Bir süre önce sürüm # 'ın bir AssemblyInfo içinde {cs / fi} güncellerdi hızlı ve kirli exe yazdı inşa sürecinin bir parçası olarak bir komut satırından güncelleme. Diğer helpfule İpuçları bir çift:

  1. Ürün bölüme AssemblyInfo (şirket adı, sürüm, vb) ve montaj belirli parçaları (derleme adı vs.) ayırın. Bkz burada
  2. Ayrıca - (1.4.100.1502 revizyon 1502 den inşa edildi örneğin) i hainlere kullanmak, bu yüzden yararlı gerçekten kolay her zaman geri montaj üretilen kod tabanına böylece atıyor yıkılma revizyon numarasına yapı numarasını belirlemek için buldum.
Cevap 04/08/2008 saat 20:51
kaynak kullanıcı

oy
0

Eğer bir derleme yapılır her zaman güncelleyen bir oto artan bir sayı istiyorsanız, kullanabileceğiniz VersionUpdater öncesi inşa olaydan. İsterseniz sürüm numarası sadece (örneğin) bir sürüm oluşturma artar, böylece verdiğiniz ön build olay yapı yapılandırma kontrol edebilirsiniz.

Cevap 28/02/2010 saat 22:16
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more