5

XML için SlowCheetah kullanıyorum, bir grup yapılandırma dosyasını bir projeye dönüştürüyorum. Bununla birlikte, bu aynı çözüm, bazı yapılandırma değerlerinin farklı sunucular arasında farklılık gösterdiği (bu durumda, iki) yük dengelenmiş kurulumun bir parçasıdır.Birden çok yapı yapılandırması bir yapılandırma dönüşümü paylaşabilir mi?

Ben yapılandırmaları

  • ayıklama
  • Yayın
  • Release.Test
  • Release.Prod1
  • Release.Prod2 Release içinde

Hemen hemen her şey inşa aşağıdakilere sahip. Prod1 ve Release.Prod2, bazı değerler i dışında, aynıdır n config dosyalarından biri. Iki aynı dosya (Something.Release.Prod1.Config ve Something.Release.Prod2.Config) yerine bu yapıların her ikisinde de kullanılmak üzere Something.Release.Prod.Config gibi bir dosyaya sahip olmanın herhangi bir yolu var mı?

... ve ayrıntılandırmak için: Bu durumda, iki ortamına konuşuyorum, bu nedenle tek bir dosya gerçekten çok büyük bir kriz değildir. Ya on ya da yüz sunucunuz varsa? Daha fazla özelleştirilmiş kurulumların bu tür ortamlarda yaygın olduğunu farz etsem bile, CI-sunuculu bir kurulumun (bu durumda Spesifik olarak TeamCity) kurulum yapamaması için hiçbir neden göremiyorum.

Bu genellikle nasıl ele alınır?

Sanırım, gerçek dönüşüm gerçekleşmeden önce bir adım olarak dosyaların ileri ve geri kopyalanmasını yapabilirim, ancak bu karmaşık ve aşırı karmaşık bir çözüm gibi görünüyor.

+0

Burada da anlamaya çalıştığımız bir şey var ... T4 şablonları tartışılıyor ama özellikle onlardan hoşlanmıyorum. Yapılandırma dönüşümünü tercih ederim ancak Debug & Release sürümlerinin ötesine genişletmek istiyorum. Tıpkı –

+1

'u anlamaya çalıştığınız gibi Hata ayıklamanın ötesinde genişletme ve yayınlama kolaydır, bu sadece Build => Yapı Yapılandırmaları menüsünden daha fazla yapı yapılandırması eklemekle ilgilidir. . Bazıları bir dosyayı paylaşıyor, ancak ... –

cevap

1

Yapılandırma dönüştürmeleri, TransformsFiles.targets dosyasındaki $ (Yapılandırma) değişkeni tarafından işlenir.

<TransformXml Source="@(_FilesToTransformNotAppConfig->'%(FullPath)')" 
        Transform="%(RelativeDir)%(Filename).$(Configuration)%(Extension)" 
        Destination="@(_FilesToTransformNotAppConfig->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')" 
        Condition=" Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)') " /> 

Burada "Yapılandırma", "Çevre" gibi başka bir değer olacak şekilde değiştirebilirsiniz. Sonra sadece MSBuild args "Çevre" değişkeni set - Bu, yapı ayarları korumak ve bağımsız olarak dönüşümleri yapmak için izin vermelidir

/p:Environment=Prod 

.