Gunakan plugin SlowCheetah . Untuk opsi dan detail selengkapnya tentang cara menggunakan SlowCheetah, teruslah membaca.
Seperti yang telah Anda perhatikan, tidak ada cara default dan mudah untuk menggunakan file konfigurasi yang berbeda untuk proyek tipe Library (.dll) . Alasannya adalah bahwa pemikiran saat ini adalah: "Anda tidak perlu"! Pengembang kerangka kerja menganggap Anda memerlukan konfigurasi untuk file yang dapat dieksekusi: baik itu konsol, desktop, web, aplikasi seluler, atau yang lainnya. Jika Anda mulai menyediakan konfigurasi untuk dll , Anda mungkin akan mendapatkan sesuatu yang saya sebut sebagai config hell . Anda mungkin tidak lagi memahami (dengan mudah) mengapa variabel ini dan itu memiliki nilai aneh yang muncul entah dari mana.
"Tunggu", - Anda mungkin berkata, "tetapi saya memerlukan ini untuk pengujian integrasi / unit saya, dan ini adalah perpustakaan!". Dan itu benar dan inilah yang dapat Anda lakukan (pilih hanya satu, jangan campur):
1. SlowCheetah - mengubah file konfigurasi saat ini
Anda dapat menginstal SlowCheetah - plug-in Visual Studio yang melakukan semua poking XML (atau transformasi) tingkat rendah untuk Anda. Cara kerjanya, secara singkat:
- Instal SlowCheetah dan mulai ulang Visual Studio (Visual Studio> Tools> Extensions and Updates ...> Online> Visual Studio Gallery> cari "Slow Cheetah")
- Tentukan konfigurasi solusi Anda ( Debug dan Rilis ada secara default), Anda dapat menambahkan lebih banyak (klik kanan pada solusi di Solution Explorer > Pengelola Konfigurasi ... > Konfigurasi Solusi Aktif > Baru ...
- Tambahkan file konfigurasi jika perlu
- Klik kanan pada file config> Add Transform
- Ini akan membuat file Transformation - satu per konfigurasi Anda
- File transformasi berfungsi sebagai injektor / mutator, mereka menemukan kode XML yang diperlukan dalam file konfigurasi asli dan memasukkan baris baru atau mengubah nilai yang diperlukan, apa pun yang Anda perintahkan.
2. Bermain-main dengan file .proj - salin-ganti nama file konfigurasi baru
Aslinya diambil dari sini . Ini adalah tugas MSBuild kustom yang dapat Anda sematkan ke dalam file Visual Studio .proj . Salin dan tempel kode berikut ke dalam file proyek
<Target Name="AfterBuild">
<Delete Files="$(TargetDir)$(TargetFileName).config" />
<Copy SourceFiles="$(ProjectDir)\Config\App.$(Configuration).config"
DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>
Sekarang buat folder dalam proyek yang disebut Config
dan tambahkan file baru di sana: App.Debug.config , App.Release.config dan seterusnya. Sekarang, tergantung pada konfigurasi Anda, Visual Studio akan mengambil file konfigurasi dari Config
folder, dan menyalin-ganti namanya ke direktori output. Jadi jika Anda memiliki proyek PatternPA.Test.Integration dan konfigurasi Debug yang dipilih, di folder keluaran setelah pembuatan Anda akan menemukan file PatternPA.Test.Integration.dll.config yang disalin dari Config\App.Debug.config
dan diganti namanya setelahnya.
Ini adalah beberapa catatan yang dapat Anda tinggalkan di file konfigurasi
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- This file is copied and renamed by the 'AfterBuild' MSBuild task -->
<!-- Depending on the configuration the content of projectName.dll.config
is fully substituted by the correspondent to build configuration file
from the 'Config' directory. -->
</configuration>
Di Visual Studio Anda dapat memiliki sesuatu seperti ini
3. Gunakan file scripting di luar Visual Studio
Setiap alat pembangunan (seperti NAnt , MSBuild ) akan memberikan kemampuan untuk mengubah file konfigurasi tergantung pada konfigurasinya. Ini berguna jika Anda membangun solusi di mesin build, di mana Anda perlu memiliki kontrol lebih terhadap apa dan bagaimana Anda mempersiapkan produk untuk dirilis.
Misalnya Anda dapat menggunakan tugas dll penerbitan web untuk mengubah file konfigurasi apa pun
<UsingTask AssemblyFile="..\tools\build\Microsoft.Web.Publishing.Tasks.dll"
TaskName="TransformXml"/>
<PropertyGroup>
<!-- Path to input config file -->
<TransformInputFile>path to app.config</TransformInputFile>
<!-- Path to the transformation file -->
<TransformFile>path to app.$(Configuration).config</TransformFile>
<!-- Path to outptu web config file -->
<TransformOutputFile>path to output project.dll.config</TransformOutputFile>
</PropertyGroup>
<Target Name="transform">
<TransformXml Source="$(TransformInputFile)"
Transform="$(TransformFile)"
Destination="$(TransformOutputFile)" />
</Target>
AfterBuild
. Selama kompilasi biasa,AfterBuild
target dipanggil secara default. Harus ada perbaikan cepat untuk mempublikasikan kasusApp.<Target>.config
selamaApp.config
di dir proyek , bukan output dir.Condition="Exists('$(ProjectDir)App.$(Configuration).config')"
.Anda dapat mencoba pendekatan berikut:
Saya belum mencoba pendekatan ini ke
app.config
file, tetapi berfungsi dengan baik dengan item lain dari proyek Visual Studio. Anda dapat menyesuaikan proses build dengan hampir semua cara yang Anda suka. Bagaimanapun, beri tahu saya hasilnya.sumber
app.config
dan tidak menerapkan konfigurasi Rilis jika saya menggunakan VS build atau Teamcity VS sln build runner.Anda harus mempertimbangkan ConfigGen . Ini dikembangkan untuk tujuan ini. Ini menghasilkan file konfigurasi untuk setiap mesin penyebaran, berdasarkan file template dan file pengaturan. Saya tahu bahwa ini tidak menjawab pertanyaan Anda secara spesifik, tetapi mungkin menjawab masalah Anda dengan baik.
Jadi daripada Debug, Rilis dll, Anda mungkin memiliki Tes, UAT, Produksi dll. Anda juga dapat memiliki pengaturan yang berbeda untuk setiap mesin pengembang, sehingga Anda dapat membuat konfigurasi khusus untuk mesin dev Anda dan mengubahnya tanpa memengaruhi penerapan orang lain .
Contoh penggunaan mungkin ...
Jika Anda menempatkan ini di file .csproj Anda, dan Anda memiliki file berikut ...
... maka ini akan menjadi hasilnya ...
Dari perintah pertama, file konfigurasi dibuat untuk setiap lingkungan yang ditentukan dalam file xls, ditempatkan di direktori keluaran $ (SolutionDir) ConfigGen
Dari perintah kedua, App.config lokal yang digunakan pada mesin dev Anda akan diganti dengan konfigurasi yang dihasilkan yang ditentukan oleh sakelar lokal (-l) dan sakelar nama file (-n).
sumber
Menggunakan pendekatan yang sama seperti Romeo, saya menyesuaikannya dengan Visual Studio 2010:
Di sini Anda perlu menyimpan kedua file App.config di direktori yang berbeda (appDebug dan appRelease). Saya mengujinya dan berfungsi dengan baik!
sumber
Saya menggunakan alat XmlPreprocess untuk manipulasi file konfigurasi. Ini menggunakan satu file pemetaan untuk beberapa lingkungan (atau beberapa target build dalam kasus Anda). Anda dapat mengedit file pemetaan dengan Excel. Sangat mudah digunakan.
sumber
SlowCheetah dan FastKoala dari Galeri VisualStudio tampaknya menjadi alat yang sangat bagus yang membantu mengatasi masalah ini.
Namun, jika Anda ingin menghindari addins atau menggunakan prinsip-prinsip yang mereka terapkan secara lebih luas selama proses build / integrasi, maka menambahkan ini ke file msbuild * proj Anda adalah perbaikan singkat.
Note: ini kurang lebih merupakan pengerjaan ulang dari jawaban @ oleksii no. 2.
Ini berfungsi untuk proyek .exe dan .dll:
Ini berfungsi untuk proyek web:
Perhatikan bahwa langkah ini terjadi bahkan sebelum build yang tepat dimulai. Transformasi file konfigurasi terjadi di folder proyek. Sehingga web.config yang telah diubah tersedia saat Anda melakukan debug (kekurangan dari SlowCheetah).
Ingatlah bahwa jika Anda membuat folder App_Config (atau apa pun yang Anda pilih untuk menyebutnya), berbagai file konfigurasi perantara harus memiliki Build Action = None, dan Copy to Output Directory = Jangan salin.
Ini menggabungkan kedua opsi menjadi satu blok. Yang sesuai dijalankan berdasarkan kondisi. Tugas TransformXml didefinisikan terlebih dahulu:
sumber
Lihat apakah mesin transformasi XDT (web.config) dapat membantu Anda. Saat ini hanya didukung secara native untuk proyek web, tetapi secara teknis tidak ada yang menghentikan Anda untuk menggunakannya di jenis aplikasi lain. Ada banyak panduan tentang cara menggunakan XDT dengan mengedit file proyek secara manual, tetapi saya menemukan plugin yang berfungsi dengan baik: https://visualstudiogallery.msdn.microsoft.com/579d3a78-3bdd-497c-bc21-aa6e6abbc859
Plugin hanya membantu menyiapkan konfigurasi, tidak perlu membangun dan solusinya dapat dibangun di mesin lain atau di server build tanpa plugin atau alat lain yang diperlukan.
sumber
Saya telah memecahkan topik ini dengan solusi yang saya temukan di sini: http://www.blackwasp.co.uk/SwitchConfig.aspx
Singkatnya apa yang mereka nyatakan di sana adalah: "dengan menambahkan acara pasca-pembangunan. [...] Kita perlu menambahkan yang berikut ini:
sumber
Saya telah mendengar hal-hal baik tentang SlowCheetah, tetapi tidak dapat membuatnya berfungsi. Saya melakukan hal berikut: tambahkan tag am ke masing-masing untuk konfigurasi tertentu.
Ex:
sumber
Setelah beberapa penelitian tentang mengelola konfigurasi untuk pengembangan dan membangun dll, saya memutuskan untuk membuat sendiri, saya telah membuatnya tersedia di bitbucket di: https://bitbucket.org/brightertools/contemplate/wiki/Home
Ini beberapa file konfigurasi untuk berbagai lingkungan, ini adalah alat pengganti entri konfigurasi dasar yang akan bekerja dengan format file berbasis teks.
Semoga ini membantu.
sumber