2011-12-22 27 views
5

Komut satırından Wix 3.6 beta kullanıyorum, VS projeleri olarak değil. Bir dizin olarak ısı ile hasat edilen bir web uygulamasına sahibim. Bu çalışıyor. Hedef ortam web.config dosyalarının her birini yönetmek için web.config dönüşümleri kullanıyorum. Bunlar msbuild ile çıktı, bu Visual Studio ve kaynak denetiminde işleri çalışır durumda tutar ve tutar.Wix'i kullanma Bir ASP.NET web uygulaması yüklerken birkaç web.config dosyasından birini nasıl dağıtabilirim?

Ürünle birlikte elle yüklediğim birkaç web.config dosyasından birini kullanarak bir sorunla karşılaştım. Tüm bileşenleri konuşlandırılabilir özellikler olarak dahil etmeyi ve koşulların aktif olanı seçmesini beklerdim. Örneğin:

 <DirectoryRef Id="wwwroot"> 
     <Component Id="setup_a" Guid="some_guid" > 
      <File Source="$(var.ConfigSourceDir)\setup_a\web.config" /> 
      <Condition>ENVIRON = setup_a</Condition> 
     </Component> 

     <Component Id="setup_b" Guid="some_guid" > 
      <File Source="$(var.ConfigSourceDir)\setup_b\web.config" /> 
      <Condition>ENVIRON = setup_b</Condition> 
     </Component> 

hareketli veya sorunları silme, herhangi bir dosya adlandırma oluşturmak, ancak birden çok web.config dosyalarını aynı hedefe eşlenir çok temel bir sorun vardır ve bu bana bir ışık hata veriyor vermedi Bu "Product.wxs (xxx): hata LGHT0091: Yinelenen sembol 'Dosya: web.config' bulundu. Bu genellikle bir kimliğin yinelenmiş olduğu anlamına gelir. Belirli bir türdeki tüm tanımlayıcılarınızın (Dosya, Bileşen, Özellik) olduğundan emin olun. eşsiz."

alternatif bir yaklaşım web.config için bunlardan birini taşımak/farklı .config adlandırılmış dosyaları kullanabilirsiniz ve yeniden adlandırmak, bu yüzden bir şey gibi: Bu CopyFile bot bir hata atmak değil

 <DirectoryRef Id="wwwroot"> 
       <Component Id="setup_a" Guid="some_guid" > 
       <File Id="setup_a.config" Source="$(var.ConfigSourceDir)\setup_a.config" /> 
       <CopyFile Id="moveit" SourceDirectory="wwwroot" SourceName="setup_a.config" DestinationDirectory="wwwroot" DestinationName="web.config" /> 
       </Component> 

Komut hiç bir şey yapmaz. Ben sadece wwwroot klasöründe setup_a.config olsun.

 <DirectoryRef Id="wwwroot"> 
       <Component Id="setup_a" Guid="some_guid" > 
       <File Id="setup_a.config" Source="$(var.ConfigSourceDir)\setup_a.config" > 
        <CopyFile Id="moveit" DestinationName="web.config"/> 
       </File> 
       </Component> 

... ama iç içe CopyFile ben (o izin verilmeyen oluyor) Sil = "evet" özelliğini eklemeniz anlamına gelir:

Ben yuva CopyFile Dosya içinde, kopyalama işlemi daha sonra çalışırsa bir 'hareket' eylemi oluşturmak. Bunun yerine, wwwroot klasöründe hem setup_a.config hem de web.config ile kaldım. Ben komponent elementin içinde ayrı RemoveFile eklerseniz Alternatif olarak, aynı zamanda hiçbir şey yapmaz: Yani

<RemoveFile Id="removefile" On="install" Directory="wwwroot" Name="setup_a.config"/> 
</Component> 

, ben çalışma örnek bir şartlı dağıtım birden web.config dosyalarını işlemek nasıl için umut ediyorum, Bu, dosyaları geride bırakmaz. web.config dosyasının hedef dosya adı çerçeve tarafından belirlenir ve değiştirilemez. Farklı konfigürasyonlar, konfigürasyon dönüşümleri kullanılarak wix'in dışında da üretilir, bu da değiştirilemez, ancak oluşturulan dosya isimleri herhangi bir şey olabilir.

Şerefe!

cevap

7

Çok fazla karmaşıklaştırıyorsunuz. Bu çalışması gerekir:

<Component Id="setup_a" Guid="some_guid" > 
     <File Name="web.config" Id="config_a" Source="$(var.ConfigSourceDir)\setup_a\web.config" /> 
     <Condition>ENVIRON = setup_a</Condition> 
    </Component> 

    <Component Id="setup_b" Guid="some_guid" > 
     <File Name="web.config" Id="config_b" Source="$(var.ConfigSourceDir)\setup_b\web.config" /> 
     <Condition>ENVIRON = setup_b</Condition> 
    </Component> 

dikkat edin burada şeylerin bir çift için:

  • Dosya/@ Adı aynıdır - ne kadar da istediğiniz hedef dosya adı (web bulunuyor.Yapılandırma)
  • Dosya/@ Kimliği ilk Bahsettiğiniz ışık hatayı önlemek için her Dosya için farklıdır
  • Dosya/@ Kaynak herhangi bir şey olabilir - bu sadece bir kaynak olarak hangi dosya almaya açıklanır

Bu örnekte ışık hala LGHT1076 uyarısıyla şikayette bulunacaktır, ancak bu sadece bir uyarıdır - sorunlardan kaçınmak için koşulların karşılıklı olarak özel olması ZORUNLUdur.

+0

Bir ad özniteliğinin olmaması, dosya öğelerimi karıştırıyordu ve bu bana işe yaramadığını düşünmemi sağladı. Örneğin işe yaradı, teşekkürler Yan. –

+1

Bunu biraz daha temiz bir yapıyorum (ICE doğrulama uyarılarından kaçının). Bileşenleri/dosyaları web.config-a ve web.config olarak yazar ve daha sonra web.config dosyasına kopyalamak için bir CopyFile öğesi kullanır. ICE güzel ve temiz. Dezavantajı kutuda ekstra bir dosyadır. Upside dosya bir seçim web.config tweaks ve ben karşılaştırmak/geri dönmek istiyorum ne seçim yapıldığı ve bakire dosyaların bir kopyasını bana görsel bir ipucu verir. –

2

Genellikle farklı bir yaklaşım izlerim. Bunun yerine, belirli örneklere sıkı sıkıya bağlı bir yükleyiciye birden çok özel olarak özel dosya yerleştirmek, yükleyiciye genel bir dosya koydum ve XML'i, bağlantı dizesi gibi değişken nokta verileriyle değiştirmek için XML değişikliklerini kullanıyorum.

Bu, birkaç özelliği ve komut satırını geçerek sessizce herhangi bir yere dağıtılabilen yükleyicileri yapmamı sağlar.

İlgili konular