SORU
5 Mart 2010, Cuma


Visual Studio mercurial revizyon bilgileri c gömme# otomatik projeleri

Orijinal Sorun

Projelerimiz binada, her depoyu mercurial kimliği olan depo ürün(ler) (kütüphane, uygulama veya test uygulaması içinde gömülü olmak istiyorum.

Eğer kullandığınız uygulamanın sürümü binaya gittiğini tam olarak biliyorsan bir uygulama müşteriler tarafından 8 dilimleri kaçıp olmakla hata ayıklamak için çok daha kolay hale getirir buluyorum. Gibi, her proje (uygulama veya kütüphane) sistemlerimizde ilgili revizyon bilgi almak için bir yol uygular.

Ben de çok yararlı bir uygulama (BM değiştirilmiş) deposundan kümelerinin temiz ile derlenmiş görmek mümkün. 'Hg ıd' yararlı ekler bir değişiklik kümesini kimliği olduğunda kaydedilmemiş değişiklikler bir depo, yani bu sağlar bize kolayca görmek eğer insanlar çalışan bir temizlik veya değiştirilmiş bir sürüm kodu.

Benim geçerli çözüm aşağıda ayrıntılı ve temel gereksinimleri karşılar, ama bir takım sorunlar var.

Geçerli Çözüm

Her bir Visual Studio çözüm için şu anda, aşağıdaki ekliyorum "Pre-build olay komut satırı" komutlar:

cd $(ProjectDir)
HgID

Ben de bir HgİD ekleyin.Proje dizinine bat dosyası:

@echo off
type HgId.pre > HgId.cs

For /F "delims=" %%a in ('hg id') Do <nul >>HgID.cs set /p =            @"%%a"

echo ;                  >> HgId.cs
echo     }              >> HgId.cs
echo }                  >> HgId.cs

bir Hgİd ile birlikte.olarak tanımlanan dosya, pre:

namespace My.Namespace {
/// <summary> Auto generated Mercurial ID class. </summary>
internal class HgID {
    /// <summary> Mercurial version ID [  is modified] [Named branch]</summary>
    public const string Version =

Benim uygulama inşa ettiğimde, pre-build olay tüm kütüphaneler, Yeni bir Hgİd oluşturma tetiklenir.cs dosya sürüm kontrol altında tutulur değil) ve kütüphane yeniden derlenmiş yeni ile birlikte olmak için neden 'hg ıd' string 'Sürümü'.

Geçerli çözüm ile ilgili sorunlar

Ana sorun Hgİd beri.cs her pre-build de yeniden oluşturulur, her şeyi derlemeye ihtiyacımız var her zaman, geçerli çözüm tüm projeleri yeniden derlenir. Kolayca bizim kitaplıkları ile hata ayıklamak mümkün olmak istiyorum çünkü, biz genellikle birçok kütüphane ana uygulama çözümümüz başvurulan tutun. Bu istediğim önemli ölçüde daha uzun inşa süreleri neden olabilir.

İdeal kitaplıkları tek Hgİd içeriğini derlemek istiyorum.cs dosya aslında tam olarak aynı içeriği ile yeniden yapmaktansa değişti.

Bu yöntem ile ikinci sorun, windows kabuk belirli davranışları üzerine bir kez daha göstermektedir. Yedim zaten değiştirmek için toplu iş dosyası birkaç kez bu yana, orijinal çalıştı altında XP değil Vista, sonraki sürümü altında çalıştı Vista ama XP ve sonunda başardım çözüm sağlamak için her iki. Herkesin tahmin ve zaman geçtikçe ancak Windows 7 ile çalışacak olup, müteahhitler camlarda uygulamalar kurmak mümkün 7 boxen olmasını daha olası görüyorum.

Son olarak, bu çözüm, toplu iş dosyaları ve bodged birlikte şablon dosyaları ile estetik bir sorunum varhissediyorumbunu yapmak için yanlış bir yol gibi.

Benim gerçek soru

Nasıl/nasıl çözmeye çalışıyorum sorunu çözme misin çözecek mi?

Daha iyi seçenekler orada şu anda ne yaptığımdan çok ne var?

Bu sorunlar için Çözümler reddetti

Geçerli bir çözüm buldum uygulanan önce, bariz çözüm gibi görünüyordu beri Mercurials anahtar Kelime uzantısı baktım. Daha ona baktım ve insanların düşüncelerini okumak ancak, daha yapılacak doğru şey olmadığına karar verdim.

Ben de anahtar değişimi önceki şirketlerde projelerde yaşattığı sorunları hatırlamak (hiç Kaynak kullanımı Güvenli tekrar olması fikri bile dehşet hissi *8 ile beni doldurur').

Ayrıca, özellikle Mercurial uzantıları oluşturmak için etkinleştirmek için tamamlamak zorunda istemiyorum. İstediğim çözüm için kendi kendine yeten, böylece kolay degil başvurusu için yanlışlıkla derlenmiş olmadan gömülü sürüm bilgileri diye bir uzantı değil etkin ya da yardımcı yazılım bulunmadı yüklü.

Ben de daha iyi bir betik dili bu yazı, fikir, sadece Hgİd yazardım.cs dosyasıeğeriçeriği vardı aslında değişti, ama tüm seçenekleri aklıma gerektirecek benim co-işçiler, müteahhitler ve muhtemelen müşteriler için yazılım yüklemek olabilir aksi takdirde (örneğin özellik listesi).

Diğer seçenekler insanların aklına herhangi bir mutluluk duyacağız.


Güncelleme

Kısmi çözüm

Bir süre onunla oynadı civarında olması, Hgİd alabildim.yarasa tek Hgİd üzerine dosya.cs eğer değişiklik dosyası:

@echo off

type HgId.pre > HgId.cst

For /F "delims=" %%a in ('hg id') Do <nul >>HgId.cst set /p =            @"%%a"

echo ;                  >> HgId.cst
echo     }              >> HgId.cst
echo }                  >> HgId.cst

fc HgId.cs HgId.cst >NUL
if %errorlevel%==0 goto :ok
copy HgId.cst HgId.cs
:ok
del HgId.cst

Bu çözüm ile ilgili sorunlar

Hgİd bile.cs artık hala her şey her zaman derleme ısrar her yeniden oluşturuluyor. Çözüm aramaya çalıştı ve "Sadece başlangıç projeleri oluşturmak ve" Araçlar|Seçenekler|Projeler ve Çözümler Oluşturmak ve Ama hiç fark etmez. Çalıştırma bağımlılıkları kontrol denedim

İkinci sorun da kalır, ve şimdi o müteahhit artık bizimle olduğu için Vista ile çalışır, eğer test etmek için bir yol var.

  • Eğer herkes ve/veya Vista, Windows 7 kutu üzerinde bu toplu iş dosyası testi, nasıl geçtiğini duymaktan memnun olurum.

Son olarak, bu çözüm estetik benim sorunum, toplu dosya daha karmaşıktır ve bu şimdi yanlış gitmek için daha fazla olduğundan daha öncekinden bile daha güçlü.

Eğer daha iyi bir çözüm varsa, onları duymak isterim.

CEVAP
23 HAZİRAN 2010, ÇARŞAMBA


Sadece açık kaynak kodlu küçük bir MSBuild görev tam olarak neye ihtiyacınız yapmak için serbest bırakıyorum:

  • İçine Mercurial revizyon numaranızı koyar .NET derleme sürümü
  • Eğer bir derleme kaydedilmemiş değişiklikler ile derlenmiş sürümü söyleyebilirim
  • Gereksiz neden revizyon değişti bulmazlarsa oluşturur
  • Windows komut dosyası bağımlı değil
  • Hiçbir şey - sadece çözüm için küçük bir DLL dosyası eklemek yükle, projenizde bazı dosyaları düzenlemek için

http://versioning.codeplex.com

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrey Menshikov

    Andrey Mensh

    28 Ocak 2012
  • Anthony Cumia

    Anthony Cumi

    5 EYLÜL 2006
  • Lancome USA

    Lancome USA

    30 HAZİRAN 2009