Untuk aplikasi berbasis web Visual Studio 2010 kami memiliki fitur-fitur Konfigurasi Transformasi dimana kami dapat mempertahankan beberapa file konfigurasi untuk lingkungan yang berbeda. Tetapi fitur yang sama tidak tersedia untuk file App.Config untuk Layanan Windows / WinForms atau Aplikasi Konsol.
Ada solusi yang tersedia seperti yang disarankan di sini: Menerapkan sihir XDT ke App.Config .
Namun itu tidak mudah dan membutuhkan sejumlah langkah. Apakah ada cara yang lebih mudah untuk mencapai hal yang sama untuk file app.config?
Jawaban:
Ini berfungsi sekarang dengan Visual Studio AddIn diperlakukan dalam artikel ini: SlowCheetah - Web.config Transformation Syntax sekarang digeneralisasi untuk setiap file konfigurasi XML .
sumber
Saya mencoba beberapa solusi dan ini adalah yang paling sederhana yang saya temukan secara pribadi.
Dan menunjukkan dalam komentar itu posting asli milik Oleg Sych - terima kasih, Oleg!
Berikut instruksinya:
1. Tambahkan file XML untuk setiap konfigurasi ke proyek.
Biasanya Anda akan memiliki
Debug
danRelease
konfigurasi sehingga nama file AndaApp.Debug.config
danApp.Release.config
. Dalam proyek saya, saya membuat konfigurasi untuk setiap jenis lingkungan, jadi Anda mungkin ingin bereksperimen dengan itu.2. Bongkar proyek dan buka file .csproj untuk diedit
Visual Studio memungkinkan Anda untuk mengedit file .csproj langsung di editor — Anda hanya perlu membongkar proyek terlebih dahulu. Kemudian klik kanan padanya dan pilih Edit <ProjectName> .csproj .
3. Bind App. *. Config file ke App.config utama
Temukan bagian file proyek yang berisi semua
App.config
danApp.*.config
referensi. Anda akan melihat aksi build mereka diatur keNone
:Pertama, atur aksi build untuk mereka semua
Content
.Selanjutnya, buat semua file konfigurasi khusus bergantung pada main
App.config
sehingga Visual Studio mengelompokkannya seperti halnya desainer dan file di belakang kode.Ganti XML di atas dengan yang di bawah ini:
4. Aktifkan sihir transformasi (hanya diperlukan untuk versi Visual Studio pra VS2017 )
Di akhir file setelah
dan sebelum final
masukkan XML berikut:
Sekarang Anda dapat memuat ulang proyek, membangunnya dan menikmati
App.config
transformasi!FYI
Pastikan
App.*.config
file Anda memiliki pengaturan yang benar seperti ini:sumber
v10.0
denganv$(VisualStudioVersion)
untuk memastikan proyek Anda bekerja dengan semua versi VS.Solusi lain yang saya temukan adalah BUKAN menggunakan transformasi tetapi hanya memiliki file konfigurasi terpisah, misalnya app.Release.config. Kemudian tambahkan baris ini ke file csproj Anda.
Ini tidak hanya akan menghasilkan file myprogram.exe.config yang tepat tetapi jika Anda menggunakan Setup dan Deployment Project di Visual Studio untuk menghasilkan MSI, itu akan memaksa proyek deployment untuk menggunakan file konfigurasi yang benar saat mengemas.
sumber
<AppConfig>App.Release.config</AppConfig>
baris di dalam<PropertyGroup
kondisi yang ada untukRelease
konfigurasi dan IDE menunjukkan garis berlekuk-lekuk di bawah<AppConfig>
... baris mengatakan itu tidak ada dalam skema atau sesuatu, tetapi saya menyimpan file lagian dan memuat kembali file proyek dan melakukan pembangunan dalamRelease
konfigurasi dan itu berhasil!Dalam pengalaman saya, hal-hal yang perlu saya buat khusus lingkungan adalah hal-hal seperti string koneksi, pengaturan aplikasi dan pengaturan smpt sering. Sistem config memungkinkan untuk menentukan hal-hal ini dalam file yang terpisah. Jadi Anda dapat menggunakan ini di app.config / web.config Anda:
Apa yang biasanya saya lakukan adalah meletakkan bagian konfigurasi khusus ini di file terpisah, dalam subfolder yang disebut ConfigFiles (baik di root solusi atau di tingkat proyek, tergantung). Saya mendefinisikan file per konfigurasi, misalnya smtp.config.Debug dan smtp.config.Release.
Kemudian Anda dapat mendefinisikan acara pra-bangun seperti:
Dalam pengembangan tim, Anda dapat mengubah ini lebih lanjut dengan memasukkan% COMPUTERNAME% dan / atau% USERNAME% dalam konvensi.
Tentu saja, ini menyiratkan bahwa file target (x.config) TIDAK boleh dimasukkan ke dalam kontrol sumber (karena dihasilkan). Anda masih harus menambahkannya ke file proyek dan mengatur properti tipe output mereka menjadi 'salin selalu' atau 'salin jika lebih baru'.
Sederhana, dapat dikembangkan, dan berfungsi untuk semua jenis proyek Visual Studio (konsol, winforms, wpf, web).
sumber
<?xml version="1.0"?> <smtp deliveryMethod="SpecifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="C:\mail"/> <network host="localhost"/> </smtp>
Transformasi:<?xml version="1.0"?> <smtp xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="Replace" from="[email protected]" deliveryMethod="Network"> <network .../> </smtp>
Terinspirasi oleh Oleg dan yang lainnya dalam pertanyaan ini, saya mengambil solusinya https://stackoverflow.com/a/5109530/2286801 selangkah lebih maju untuk mengaktifkan yang berikut.
Solusi ini berfungsi dengan melakukan transformasi app.config sebelum app.config direferensikan untuk pertama kalinya dalam proses MSBuild. Ini menggunakan file target eksternal untuk manajemen yang lebih mudah di beberapa proyek.
Instruksi:
Langkah serupa dengan solusi lainnya. Saya mengutip apa yang tetap sama dan memasukkannya untuk kelengkapan dan perbandingan yang lebih mudah.
0. Tambahkan file baru ke proyek Anda yang disebut AppConfigTransformation.targets
3. Bind App. *. Config file ke App.config utama
Temukan bagian file proyek yang berisi semua referensi konfigurasi App.config dan App. *. Dan ganti sebagai berikut. Anda akan melihat kami menggunakan Tidak Ada alih-alih Konten.
masukkan XML berikut:
Selesai!
sumber
Anda dapat menggunakan file konfigurasi terpisah per konfigurasi, misal app.Debug.config, app.Release.config dan kemudian gunakan variabel konfigurasi dalam file proyek Anda:
Ini kemudian akan membuat file ProjectName.exe.config yang benar tergantung pada konfigurasi yang sedang Anda buat.
sumber
Saya menulis ekstensi yang bagus untuk mengotomatisasi transformasi app.config seperti yang dibangun di Web Application Project Configuration Transform
Keuntungan terbesar dari ekstensi ini adalah Anda tidak perlu menginstalnya di semua mesin build
sumber
Instal "Alat Transformasi Konfigurasi" di Visual Studio dari Marketplace dan restart VS. Anda juga dapat melihat transformasi pratinjau menu untuk app.config.
https://marketplace.visualstudio.com/items?itemName=GolanAvraham.ConfigurationTransform
sumber
Jadi saya akhirnya mengambil pendekatan yang sedikit berbeda. Saya mengikuti langkah-langkah Dan melalui langkah 3, tetapi menambahkan file lain: App.Base.Config. File ini berisi pengaturan konfigurasi yang Anda inginkan di setiap App.Config yang dihasilkan. Kemudian saya menggunakan BeforeBuild (dengan tambahan Yuri ke TransformXml) untuk mengubah konfigurasi saat ini dengan konfigurasi Base ke dalam App.config. Proses build kemudian menggunakan App.config yang diubah seperti biasa. Namun, satu gangguan adalah Anda ingin mengecualikan App.config yang selalu berubah dari kontrol sumber setelahnya, tetapi file konfigurasi lainnya sekarang bergantung padanya.
sumber
Hanya sedikit perbaikan pada solusi yang tampaknya diposting di mana-mana sekarang:
sumber
$(VisualStudioVersion)
tidak diatur saat menggunakan MSBuild secara langsung.Saya telah membuat alternatif lain dari yang diposting oleh Vishal Joshi di mana persyaratan untuk mengubah tindakan membangun ke Konten dihapus dan juga menerapkan dukungan dasar untuk penyebaran ClickOnce. Saya katakan dasar, karena saya tidak mengujinya secara menyeluruh tetapi harus bekerja dalam skenario penyebaran ClickOnce yang khas.
Solusinya terdiri dari satu proyek MSBuild yang pernah diimpor ke proyek aplikasi windows yang ada (* .csproj) memperluas proses pembuatan untuk merenungkan transformasi app.config.
Anda dapat membaca penjelasan yang lebih terperinci di Visual Studio App.config XML Transformation dan file proyek MSBuild dapat diunduh dari GitHub .
sumber
Jika Anda menggunakan TFS online (versi Cloud) dan Anda ingin mengubah App.Config dalam sebuah proyek, Anda dapat melakukan hal berikut tanpa menginstal alat tambahan apa pun. Dari VS => Bongkar proyek => Edit file proyek => Buka bagian bawah file dan tambahkan yang berikut:
AssemblyFile dan Destination berfungsi untuk penggunaan lokal dan server TFS online (Cloud).
sumber
solusi yang diusulkan tidak akan berfungsi ketika perpustakaan kelas dengan file konfigurasi direferensikan dari proyek lain (dalam kasus saya itu adalah perpustakaan proyek pekerja Azure). Itu tidak akan menyalin file yang diubah benar dari
obj
folder kebin\##configuration-name##
folder. Untuk membuatnya berfungsi dengan perubahan minimal, Anda perlu mengubahAfterCompile
target keBeforeCompile
:sumber