Stack Overflow, altta bir alt sürüm numarasına sahiptir:
svn revizyonu: 679
.NET Web Site/Application
Windows Forms, WPD projelerim / çözümlerimle bu tür otomatik versiyonlama kullanmak istiyorum .
Bunu nasıl uygularım?
Stack Overflow, altta bir alt sürüm numarasına sahiptir:
svn revizyonu: 679
.NET Web Site/Application
Windows Forms, WPD projelerim / çözümlerimle bu tür otomatik versiyonlama kullanmak istiyorum .
Bunu nasıl uygularım?
Yanıtlar:
Görünüşe göre Jeff, podcast transkriptlerinin bazı bölümlerine dayanarak CruiseControl.NET kullanıyor . Bu, kaynak kontrolünden üretime kadar otomatik dağıtım yeteneklerine sahip görünüyor. Eklemenin gerçekleştiği yer burası olabilir mi?
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.
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
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ı! :Ö)
@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.
$rev
ve 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.
@ 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