Korzystam z transformacji web.config, jak opisano w poniższym poście, w celu wygenerowania konfiguracji dla różnych środowisk.
http://vishaljoshi.blogspot.com/2009/03/web-deployment-webconfig-transformation_23.html
Mogę wykonać transformację „Zamień”, dopasowując klawisz, np
<add key="Environment" value="Live" xdt:Transform="Replace" xdt:Locator="Match(key)" />
I mogę zrobić „wstawki” np
<add key="UseLivePaymentService" value="true" xdt:Transform="Insert" />
Ale to, co byłoby naprawdę znaleźć użyteczne jest transformacja ReplaceOrInsert, bo nie zawsze można polegać na oryginalny plik konfiguracyjny posiadające / nie mając pewnego klucza.
Czy jest na to sposób?
asp.net
web-config-transform
xslt
xdt-transform
Chris Haines
źródło
źródło
Odpowiedzi:
Znalazłem tanie obejście. To nie jest ładne i nie będzie działać dobrze, jeśli masz wiele elementów, które muszą być „Zamień lub Wstaw”.
Wykonaj czynności „Usuń”, a następnie „InsertAfter | InsertBefore”.
Na przykład,
źródło
W połączeniu z
xdt:Transform="Remove"
użyciemxdt:Transform="InsertIfMissing"
w VS2012.źródło
Remove
zadanie usuwa tylko pierwsze wystąpienie. Niektóre elementy mogą mieć wiele wystąpień. Nie mogę sobie wyobrazić, że byś tego chciał, ale wtedy usunie to pierwsze wystąpienie i pominieInsertIfMissing
zadanie. Ale miałbyś rację, gdybyRemoveAll
zamiast tego użył .Użyj
InsertIfMissing
transformacji, aby upewnić się, że istnieje appSetting.Następnie użyj
Replace
transformacji, aby ustawić jej wartość.Możesz także użyć
SetAttributes
transformacji zamiastReplace
. Różnica polega na tym,SetAttributes
że nie dotyka węzłów potomnych.Te techniki są znacznie lepsze niż usuwanie + wstawianie, ponieważ istniejące węzły nie są przenoszone na dół ich węzła nadrzędnego. Nowe węzły są dołączane na końcu. Istniejące węzły pozostają tam, gdzie są w pliku źródłowym.
Ta odpowiedź dotyczy tylko nowszych wersji programu Visual Studio (2012 lub nowszych).
źródło
Lepszą metodą było dla mnie wstawienie elementu tylko wtedy, gdy nie istnieje, ponieważ ustawiam tylko niektóre atrybuty. Usunięcie elementu odrzuciłoby wszelkie inne atrybuty elementu głównego, gdyby istniały.
przykład: web.config (bez elementu)
web.config (z elementem)
Używając Lokalizatora z wyrażeniem XPath, dodaję węzeł, jeśli nie istnieje, a następnie ustawiam mój atrybut:
oba wynikowe pliki web.config mają includeExceptionDetailInFaults = "true", a drugi zachowuje atrybut httpsHelpPageEnabled, którego nie zrobiłaby metoda remove / insert.
źródło