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!
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. –
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. –