SVN revizyon numarasını ASP.NET web sitemle nasıl eşitlerim?


94

Stack Overflow, altta bir alt sürüm numarasına sahiptir:

svn revizyonu: 679

.NET Web Site/ApplicationWindows Forms, WPD projelerim / çözümlerimle bu tür otomatik versiyonlama kullanmak istiyorum .

Bunu nasıl uygularım?


@Balloon TortoiseSVN kullanıyorsanız, paketlenmiş SubWCRev programını kullanabilirsiniz. Çalışan bir kopyayı sorgular ve size en yüksek revizyon numarasını söyler. Kuşkusuz, bu bir sunucu tarafı soruna istemci tarafı yaklaşımı gibi görünüyor, ancak güzel bir komut satırı programı olduğu için çıktısını oldukça kolay kullanım için yakalayabilmelisiniz.
nickf

SubWCRev için TortoiseSVN'yi burada söylediğim gibi kullanmıyorsanız , aynı şeyi yapan svnversion'ı kullanabilirsiniz .
nickf

Yanıtlar:



27

Bunu otomatik derlemelerimiz için xUnit.net ile yapıyoruz . Biz kullanmak CruiseControl.net(ve TeamCity dışarı çalışıyoruz). Sürekli entegrasyon için yürüttüğümüz MSBuild görevi, bizim için yapı numarasını otomatik olarak değiştirir, böylece sonuçta ortaya çıkan derleme ZIP dosyası, uygun şekilde versiyonlanmış bir DLL ve EXE seti içerir.

Bizim MSBuild dosyası (o da MS-PL lisansı ile kaplı olarak sen karşılama, bu DLL kullanmak için): Normal ifade değiştirmeler yapan bir DLL için UsingTask başvuru içeriyorsa

  <Görevi Kullanma
     AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll"
     TaskName = "CodePlex.MSBuildTasks.RegexReplace" />

Daha sonra, CI sistemi tarafından otomatik olarak sağlanan yapı numarasını çıkarıyoruz. İsterseniz kaynak kontrol sağlayıcınızdan kaynak revizyon numarasını da temin edebilirsiniz, ancak CI sistemindeki yapı numarasını daha yararlı bulduk çünkü entegrasyon sonuçlarını yalnızca CI yapı numarasına göre görmekle kalmaz, aynı zamanda yapıya dahil edilen değişiklik setlerine geri dönün.

 <! - Bir yapı numarasını bulmaya yönelik basamaklı girişimler ->

 <PropertyGroup Koşulu = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (BUILD_NUMBER) </BuildNumber>
 </PropertyGroup>
 <PropertyGroup Koşulu = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (ccnetlabel) </BuildNumber>
 </PropertyGroup>
 <PropertyGroup Koşulu = "'$ (BuildNumber)' == ''">
   <BuildNumber> 0 </BuildNumber>
 </PropertyGroup>

(TeamCity'den gelen BUILD_NUMBER'ı, ardından CC.net'ten gelen ccnetlabel'i deniyoruz ve ikisi de mevcut değilse, otomatikleştirilmiş derleme komut dosyasını manuel olarak test edebilmemiz için varsayılan olarak 0'a ayarlıyoruz.)

Ardından, yapı numarasını tüm projelerimize bağladığımız GlobalAssemblyInfo.cs dosyasına ayarlayan bir görevimiz var:

 <Target Name = "SetVersionNumber">
   <RegexDeğiştir
       Desen = 'AssemblyVersion \ ("(\ d + \. \ D + \. \ D +) \. \ D +" \)'
       Değiştirme = 'AssemblyVersion ("$ 1. $ (BuildNumber)")'
       Dosyalar = 'GlobalAssemblyInfo.cs' />
   <Exec Command = "attrib -r xunit.installer \ App.manifest" />
 </Target>

Bu, AssemblyVersion özniteliğini bulur ve abcd sürüm numarasını abcBuildNumber ile değiştirir. Genellikle, oluşturucu numarasının ilk üç bölümü sabit ve dördüncü sıfır (fe, bugün 1.0.2.0) ile işaretlenmiş kaynağı ağaca bırakacağız.

Derleme sürecinizde, SetVersionNumber görevinin derleme görevinizden önce geldiğinden emin olun. Sonunda, derleme sonuçlarını sıkıştırmak için Zip görevimizi kullanırız, böylece her otomatik derleme için ikili dosyaların geçmişine sahip oluruz.


25

Aşağıdakileri kodunuzun herhangi bir yerine ekleyerek yapabilirsiniz

$Id:$

Örneğin @Jeff şunu yaptı:

<div id="svnrevision">svn revision: $Id:$</div>

ve kontrol edildiğinde, sunucu $ Id: $ 'ı geçerli revizyon numarasıyla değiştirdi. Bu referansı da buldum .

Ayrıca $ Date: $ , $ Rev: $ , $ Revizyon: $ var


Dosyaların svn: keywords Özniteliğine de sahip olduğundan emin olmanız gerekir, aksi takdirde $ Id $ vb. Otomatik olarak değiştirilmez. Bu sayfaya bakın . (
Svn'ye

1
Bunu $ Rev $ kullanarak denedim ve işe yarıyor - bir ölçüde. Sorun, anahtar kelimeyi yalnızca içinde göründüğü dosya değiştirildiğinde güncelliyor görünmesidir. Bu, projede $ Rev $ bulunan dosyayı etkilemeyen değişiklikler yapılırsa (benim durumumda, ASP.NET ana sayfam), projenin kullanıcıya gösterilenden daha yüksek bir revizyona sahip olacağı anlamına gelir. . Bu konuda herhangi bir fikri olan var mı? SVN'nin her zaman dosyadaki anahtar kelimeleri güncellemesini sağlamanın bir yolu var mı ?
Chris Roberts

5
Bu, söz konusu dosyaya son değişikliğin revizyon numarasını eklemeyecek mi? İki dosyalık bir havuz kurmayı denedim ve birini değiştirdim ve hem dışa aktarmayı hem de teslim almayı denedim ve diğer dosya her iki durumda da 1'de kaldı.
Lasse V. Karlsen

lassevk doğru, bu sadece dosyanın kendisi değiştiğinde değişir.
Bruno Lopes

VisualSVN ve TortoiseSVN kullanılarak, $ Id: $ eklenmesi sayfanın "$ Id: $" oluşturmasına neden oldu. Bu cevabın hangi sunucu / istemci altında çalıştığını not etmek faydalı olabilir.
Travis

17

Kullanıyorsanız ASP.Net MVC(StackOverflow'un yaptığı gibi), en son SVN revizyonunun otomatik olarak nasıl alınacağı ve görüntüleneceği hakkında 3 adımlı bir kılavuz yazdım . Rehber, bu soru hakkında kendi kendime düşünerek ilham aldı! :Ö)


Kulağa harika geliyor, yine de bağlantı bozuk!
Peter C

1
Bu, SVN revizyonlarımıza göre bir sürüm oluşturmayı otomatikleştirmek için harika bir çözümdü. Bir avantajı, SVN sunucunuzun aranmasını gerektirmemesidir.
Ben Elder

bağlantı bozuk veya site çalışmıyor
Cacho Santa

1
Teşekkürler @cacho, düzeltildi - bu bir sunucu hatasıydı [sic]; o)
Andrew

10

@Balloon TortoiseSVN kullanıyorsanız, paketlenmiş SubWCRev programını kullanabilirsiniz. Çalışan bir kopyayı sorgular ve size en yüksek revizyon numarasını söyler. Kuşkusuz, bu bir sunucu tarafı soruna istemci tarafı yaklaşımı gibi görünüyor, ancak güzel bir komut satırı programı olduğu için çıktısını oldukça kolay kullanım için yakalayabilmelisiniz.


9

$revve bunun gibi diğerleri bireysel dosyalar için yapılan revizyonlardır, bu nedenle dosya değişmedikçe değişmezler. Web sayfasındaki numara (büyük olasılıkla, burada varsayıyorum) tüm proje için svn revizyon numarasıdır. Bu, başkalarının işaret ettiği dosya revizyonlarından farklıdır.

Bu durumda CCNET'in projenin revizyon numarasını aldığını ve web sayfasının bir kısmını bu numara ile yeniden yazdığını varsayıyorum. Herhangi bir CI çözümü bunu yapabilmeli, bunu CCNET ve Teamcity ile kendim ayarlamalı (web sayfaları değil, dağıtım / montaj sürümlerinin otomatik sürümlemesine rağmen).

Bunu yapabilmeniz için, onu destekleyen bir CI çözümü kullanın veya bu sürümü depolamak ve onu "dağıtmadan" önce dosyalara yazmak için oluşturma sürecinizi (MSbuild / Nant) kullanın.


5

@ BradWilson'ın cevabına eklemek için: "İsterseniz kaynak kontrol sağlayıcınızdan kaynak revizyon numarasını da sağlayabilirsiniz"

Subversion ve MSBuild'i bağlamak için: MSBuild Topluluk Görevleri Projesi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.