Bagaimana cara menyinkronkan nomor revisi SVN dengan situs web ASP.NET saya?

93

Stack Overflow memiliki nomor versi subversi di bagian bawah:

revisi svn: 679

Saya ingin menggunakan versi otomatis seperti itu dengan .NET Web Site/Application, Windows Forms, proyek / solusi WPD saya.

Bagaimana cara menerapkan ini?

Zack Peterson
sumber
@Balloon Jika Anda menggunakan TortoiseSVN, Anda bisa menggunakan program SubWCRev yang dikemas . Ini menanyakan copy pekerjaan dan memberi tahu Anda hanya nomor revisi tertinggi. Memang, ini tampaknya merupakan pendekatan sisi klien untuk masalah sisi server, tetapi karena ini adalah program baris perintah yang bagus, Anda seharusnya dapat menangkap keluarannya untuk digunakan dengan cukup mudah.
nickf
Jika Anda tidak menggunakan TortoiseSVN untuk SubWCRev seperti yang saya katakan di sini , Anda bisa menggunakan svnversion yang melakukan hal yang sama.
nickf

Jawaban:

31

Sepertinya Jeff menggunakan CruiseControl.NET berdasarkan beberapa membolak-balik transkrip podcast. Ini tampaknya memiliki kemampuan penyebaran otomatis dari kontrol sumber hingga produksi. Mungkinkah ini tempat penyisipan terjadi?

saint_groceon
sumber
2
Jika Anda tidak menggunakan CruiseControl.Net, periksa jawaban saya (steker tidak tahu malu!) - stackoverflow.com/questions/163/… ; o)
Andrew
tautan rusak @saintgroceon
Cacho Santa
27

Kami melakukan ini dengan xUnit.net untuk build otomatis kami. Kami menggunakan CruiseControl.net(dan mencoba TeamCity). Tugas MSBuild yang kami jalankan untuk integrasi berkelanjutan secara otomatis mengubah nomor build untuk kami, sehingga file ZIP build yang dihasilkan berisi kumpulan DLL dan EXE dengan versi yang benar.

File MSBuild kami berisi referensi UsingTask untuk DLL yang melakukan penggantian ekspresi reguler: (Anda dipersilakan untuk menggunakan DLL ini, karena dicakup oleh lisensi MS-PL juga)

  <UsingTask
     AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll"
     TaskName = "CodePlex.MSBuildTasks.RegexReplace" />

Selanjutnya, kami mengekstrak nomor build, yang disediakan secara otomatis oleh sistem CI. Anda juga bisa meminta penyedia kontrol sumber untuk memberikan nomor revisi sumber jika Anda mau, tetapi kami menemukan build # dalam sistem CI lebih berguna, karena tidak hanya dapat melihat hasil integrasi dengan nomor build CI, itu juga menyediakan tautkan kembali ke set perubahan yang termasuk dalam build.

 <! - Upaya bertingkat untuk menemukan nomor build ->

 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (BUILD_NUMBER) </BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (ccnetlabel) </BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> 0 </BuildNumber>
 </PropertyGroup>

(Kami mencoba BUILD_NUMBER, yang dari TeamCity, lalu ccnetlabel, yang dari CC.net, dan jika tidak ada, kami default ke 0, sehingga kami dapat menguji skrip build otomatis secara manual.)

Selanjutnya, kami memiliki tugas yang menetapkan nomor build ke dalam file GlobalAssemblyInfo.cs yang kami tautkan ke semua proyek kami:

 <Target Name = "SetVersionNumber">
   <RegexReplace
       Pola = 'AssemblyVersion \ ("(\ d + \. \ D + \. \ D +) \. \ D +" \)'
       Penggantian = 'AssemblyVersion ("$ 1. $ (BuildNumber)")'
       File = 'GlobalAssemblyInfo.cs' />
   <Exec Command = "attrib -r xunit.installer \ App.manifest" />
 </Target>

Ini menemukan atribut AssemblyVersion, dan mengganti nomor versi abcd dengan abcBuildNumber. Kami biasanya akan membiarkan sumber dicentang ke dalam pohon dengan tiga bagian pertama dari nomor pembuat tetap, dan bagian keempat nol (fe, hari ini 1.0.2.0).

Dalam proses build Anda, pastikan tugas SetVersionNumber mendahului tugas build Anda. Pada akhirnya, kami menggunakan tugas Zip kami untuk membuat zip hasil build sehingga kami memiliki riwayat binari untuk setiap build otomatis.

Brad Wilson
sumber
25

Anda dapat melakukannya dengan menambahkan yang berikut ini di mana saja dalam kode Anda

$Id:$

Jadi misalnya @Jeff melakukan:

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

dan ketika diperiksa di server mengganti $ Id: $ dengan nomor revisi saat ini. Saya juga menemukan referensi ini .

Ada juga $ Tanggal: $ , $ Rev: $ , $ Revisi: $

Nick Berardi
sumber
Anda perlu memastikan bahwa Files juga memiliki atribut svn: keywords, jika tidak, $ Id $ etc. tidak otomatis diganti. Lihat halaman ini . (Gulir ke bawah ke svn: keywords)
Michael Stum
1
Saya baru saja mencoba ini dengan menggunakan $ Rev $ dan berhasil - sampai batas tertentu. Masalahnya adalah tampaknya hanya memperbarui kata kunci ketika file yang muncul di dalamnya diubah. Ini berarti bahwa jika ada perubahan pada proyek yang tidak memengaruhi file dengan $ Rev $ di dalamnya (dalam kasus saya, halaman master ASP.NET saya), proyek akan memiliki revisi yang lebih tinggi daripada yang ditampilkan kepada pengguna. . Apakah ada yang punya pemikiran tentang ini? Apakah ada cara agar SVN selalu memperbarui kata kunci di file?
Chris Roberts
5
Bukankah ini hanya akan memasukkan nomor revisi dari perubahan terakhir ke file tertentu? Saya mencoba menyiapkan repositori dua file dan mengubahnya, dan mencoba ekspor dan checkout, dan file lainnya tetap 1 dalam kedua kasus.
Lasse V. Karlsen
lassevk benar, ini hanya berubah jika file itu sendiri berubah.
Bruno Lopes
Menggunakan VisualSVN dan TortoiseSVN, menambahkan $ Id: $ hanya menyebabkan halaman merender "$ Id: $". Mungkin berguna untuk mencatat di server / klien apa jawaban ini berfungsi.
Travis
17

Jika Anda menggunakan ASP.Net MVC(seperti yang dilakukan StackOverflow), saya telah menulis panduan 3 langkah yang mudah diikuti tentang cara mendapatkan dan menampilkan revisi SVN terbaru secara otomatis . Panduan ini terinspirasi dengan memikirkan pertanyaan ini sendiri! :Hai)

Andrew
sumber
Kedengarannya bagus, Link rusak!
Peter C
1
Ini adalah solusi yang bagus bagi kami untuk secara otomatis menampilkan versi berdasarkan revisi SVN kami. Satu keuntungan adalah tidak memerlukan panggilan ke server SVN Anda.
Ben Elder
tautan rusak, atau situs tidak
aktif
1
Terima kasih @cacho, diperbaiki - itu adalah kesalahan server [sic]; o)
Andrew
10

@Balloon Jika Anda menggunakan TortoiseSVN, Anda bisa menggunakan program SubWCRev yang dikemas . Ini menanyakan copy pekerjaan dan memberi tahu Anda hanya nomor revisi tertinggi. Memang, ini tampaknya merupakan pendekatan sisi klien untuk masalah sisi server, tetapi karena ini adalah program baris perintah yang bagus, Anda seharusnya dapat menangkap keluarannya untuk digunakan dengan cukup mudah.

nickf
sumber
9

$revdan lainnya seperti itu adalah revisi untuk file individual, jadi mereka tidak akan berubah kecuali file berubah. Nomor di halaman web adalah (kemungkinan besar, saya berasumsi di sini) nomor revisi svn untuk keseluruhan proyek. Itu berbeda dari revisi file, yang telah ditunjukkan oleh orang lain.

Dalam hal ini saya berasumsi bahwa CCNET menarik nomor revisi proyek dan menulis ulang bagian dari halaman web dengan nomor itu. Solusi CI apa pun harus dapat melakukan ini, atur sendiri dengan CCNET dan Teamcity (meskipun bukan halaman web, tetapi versi otomatis versi penerapan / perakitan).

Agar Anda dapat melakukan ini, gunakan solusi CI yang mendukungnya, atau gunakan proses build Anda (MSbuild / Nant) untuk menyimpan versi tersebut dan menuliskannya ke file sebelum "menerapkannya".

James Pogran
sumber
5

Untuk menambah jawaban @ BradWilson: "Anda juga bisa meminta penyedia kendali sumber Anda untuk memberikan nomor revisi sumber jika Anda mau"

Untuk menghubungkan Subversion dan MSBuild: Proyek Tugas Komunitas MSBuild

jan
sumber