Saya menggunakan transformasi web.config seperti yang dijelaskan dalam posting di bawah ini untuk menghasilkan konfigurasi untuk lingkungan yang berbeda.
http://vishaljoshi.blogspot.com/2009/03/web-deployment-webconfig-transformation_23.html
Saya dapat melakukan transformasi "Ganti" dengan mencocokkan pada tombol, misalnya
<add key="Environment" value="Live" xdt:Transform="Replace" xdt:Locator="Match(key)" />
Dan saya bisa melakukan "Sisipan" misalnya
<add key="UseLivePaymentService" value="true" xdt:Transform="Insert" />
Tetapi yang benar - benar bermanfaat bagi saya adalah transformasi ReplaceOrInsert, karena saya tidak selalu dapat bergantung pada file konfigurasi asli yang memiliki / tidak memiliki kunci tertentu.
Apakah ada cara untuk melakukan ini?
asp.net
web-config-transform
xslt
xdt-transform
Chris Haines
sumber
sumber
Jawaban:
Saya menemukan solusi murah. Itu tidak cantik dan tidak akan bekerja dengan baik jika Anda memiliki banyak elemen yang harus "Ganti Atau Sisipkan".
Lakukan "Hapus" dan kemudian "SisipkanSetelah | SisipkanSebelum".
Sebagai contoh,
sumber
Sehubungan dengan
xdt:Transform="Remove"
penggunaanxdt:Transform="InsertIfMissing"
dalam VS2012.sumber
Remove
tugas hanya menghilangkan kejadian pertama. Beberapa elemen dapat memiliki banyak kejadian. Saya tidak dapat membayangkan bahwa Anda menginginkan ini, tetapi kemudian akan menghapus kejadian pertama dan melewatkanInsertIfMissing
tugas. Tapi Anda akan benar jika dia menggunakannyaRemoveAll
.Gunakan
InsertIfMissing
transformasi untuk memastikan bahwa pengaturan aplikasi ada.Kemudian gunakan
Replace
transformasi untuk menetapkan nilainya.Anda juga bisa menggunakan
SetAttributes
transformasiReplace
. Perbedaannya adalahSetAttributes
tidak menyentuh node anak.Teknik-teknik ini jauh lebih baik daripada menghapus + menyisipkan karena node yang ada tidak dipindahkan ke bagian bawah simpul induknya. Node baru ditambahkan di bagian akhir. Node yang ada tetap berada di tempatnya di file sumber.
Jawaban ini hanya berlaku untuk versi Visual Studio yang lebih baru (2012 atau lebih baru).
sumber
Metode yang lebih baik bagi saya adalah memasukkan elemen hanya jika tidak ada karena saya hanya mengatur atribut tertentu. Menghapus elemen akan membuang atribut lain dari elemen utama jika ada.
contoh: web.config (tanpa elemen)
web.config (dengan elemen)
Menggunakan Locator dengan ekspresi XPath, saya menambahkan node jika tidak ada dan kemudian menetapkan atribut saya:
kedua file web.config yang dihasilkan memiliki includeExceptionDetailInFaults = "true" dan yang kedua mempertahankan atribut httpsHelpPageEnabled di mana metode hapus / sisipkan tidak akan.
sumber