Używam Wix 3.6 beta z wiersza poleceń, a nie projektów VS. Mam aplikację internetową, która jest zbierana za pomocą ciepła jako katalogu. To działa. Korzystam z transformacji web.config w celu zarządzania każdym plikiem web.config środowiska docelowego. Są one wyprowadzane z msbuild, to działa i utrzymuje rzeczy widoczne w Visual Studio i kontroli źródła.Korzystanie z Wix, jak mogę wdrożyć jeden z kilku plików web.config podczas instalowania aplikacji internetowej ASP.net
Wystąpił problem z wdrożeniem jednego z kilku plików web.config, które ręcznie wprowadzam do pliku product.wxs jako składniki z warunkami. Spodziewałem się, że wszystkie komponenty będą dostępne jako funkcje, które można rozmieścić, i niech warunki będą wybrane jako aktywne. Na przykład:
<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>
ta nie tworzy żadnego pliku zmiana nazwy, przenoszenie lub usuwanie problemów, ale ma bardzo zasadniczy problem, że wiele plików web.config są przypisane do tego samego celu, a to daje mi lekki błąd "Product.wxs (xxx): error LGHT0091: Znaleziono duplikat symbolu" File: web.config ", co zwykle oznacza, że identyfikator jest duplikowany. Sprawdź, czy wszystkie identyfikatory danego typu (plik, komponent, funkcja) są wyjątkowe. "
Alternatywnym rozwiązaniem było wykorzystanie różnych nazwach plików .config i zmienić nazwę/przenieść jeden się web.config, więc coś takiego:
<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>
nie wygeneruje błąd, bot na CopyFile polecenie nic nie robi. Właśnie dostaję setup_a.config w folderze wwwroot.
Gdybym zagnieździć CopyFile wewnątrz pliku, akcja kopia następnie działa:
<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>
... ale zagnieżdżone CopyFile oznacza, że nie można dodać (nie jest to zabronione) = Usuń atrybut „tak” stwórz akcję "ruchu". Zamiast tego mam plik setup_a.config i web.config w folderze wwwroot. Alternatywnie, jeśli dodać removefile oddzielna ramach tego samego elementu składnika też nic nie robi:
<RemoveFile Id="removefile" On="install" Directory="wwwroot" Name="setup_a.config"/>
</Component>
Więc mam nadzieję na przykład pracy, jak obsługiwać wiele plików web.config w ramach warunkowego rozmieszczenia to nie pozostawia plików za sobą. docelowa nazwa pliku web.config jest naprawiana przez framework i nie można jej zmienić. Różne konfiguracje są również generowane poza wix za pomocą transformacji konfiguracji, nie można tego zmienić, ale wygenerowane nazwy plików mogą być dowolne.
Pozdrawiam!
Ahhhh brak atrybutu nazwy zepsuł moje elementy plików, dzięki czemu myślę, że to nie zadziała. Twój przykład zadziałał, dzięki Yan. –
Robię to trochę czystsze (unikaj ostrzeżeń o sprawdzaniu poprawności ICE). Tworzę komponenty/pliki jako web.config-a i web.config, a następnie używam elementu CopyFile do sklonowania go do web.config. ICE ładne i czyste. Minusem jest dodatkowy plik na pudełku. Upside to plik, który daje mi wizualną wskazówkę co do wyboru i kopię dziewiczych plików na wypadek, gdyby ktoś poprawił web.config i chcę porównać/przywrócić. –