Anda dapat memiliki file konfigurasi terpisah, tetapi Anda harus membacanya "secara manual", ConfigurationManager.AppSettings["key"]
hanya akan membaca konfigurasi dari unit yang sedang berjalan.
Dengan asumsi Anda menggunakan Visual Studio sebagai IDE Anda, Anda dapat mengklik kanan proyek yang diinginkan → Tambah → Item baru → File Konfigurasi Aplikasi
Ini akan menambah App.config
folder proyek, menempatkan pengaturan Anda di sana di bawah <appSettings>
bagian. Jika Anda tidak menggunakan Visual Studio dan menambahkan file secara manual, pastikan untuk memberikannya nama seperti itu: DllName.dll.config , jika tidak, kode di bawah ini tidak akan berfungsi dengan baik.
Sekarang untuk membaca dari file ini memiliki fungsi seperti itu:
string GetAppSetting(Configuration config, string key)
{
KeyValueConfigurationElement element = config.AppSettings.Settings[key];
if (element != null)
{
string value = element.Value;
if (!string.IsNullOrEmpty(value))
return value;
}
return string.Empty;
}
Dan untuk menggunakannya:
Configuration config = null;
string exeConfigPath = this.GetType().Assembly.Location;
try
{
config = ConfigurationManager.OpenExeConfiguration(exeConfigPath);
}
catch (Exception ex)
{
//handle errror here.. means DLL has no sattelite configuration file.
}
if (config != null)
{
string myValue = GetAppSetting(config, "myKey");
...
}
Anda juga harus menambahkan referensi ke namespace System.Configuration agar kelas ConfigurationManager tersedia.
Saat membangun proyek, selain DLL Anda akan memiliki DllName.dll.config
file juga, itu file yang Anda harus publikasikan dengan DLL itu sendiri.
Di atas adalah kode sampel dasar, bagi mereka yang tertarik pada contoh skala penuh, silakan merujuk ke jawaban lain ini .
string exeConfigPath = this.GetType().Assembly.Location;
ke sesuatu seperti:string exeConfigPath = @"C:\MyFolder\DllFolder\ExeName.exe";
Sayangnya, Anda hanya dapat memiliki satu file app.config per executable, jadi jika Anda memiliki DLL yang ditautkan ke aplikasi Anda, mereka tidak dapat memiliki file app.config mereka sendiri.
Solusinya adalah: Anda tidak perlu meletakkan file App.config dalam proyek Perpustakaan Kelas.
Anda meletakkan file App.config di aplikasi yang mereferensikan dll perpustakaan kelas Anda.
Sebagai contoh, katakanlah kita memiliki perpustakaan kelas bernama MyClasses.dll yang menggunakan file app.config seperti:
Sekarang, katakanlah kita memiliki Aplikasi Windows bernama MyApp.exe yang mereferensikan MyClasses.dll. Ini akan berisi App.config dengan entri seperti:
ATAU
File xml setara dengan yang terbaik untuk app.config. Gunakan xml serialisasi / deserialize sesuai kebutuhan. Anda dapat menyebutnya apa yang Anda inginkan. Jika konfigurasi Anda "statis" dan tidak perlu diubah, Anda juga bisa menambahkannya ke proyek sebagai sumber daya yang disematkan.
Semoga ini memberikan beberapa Ide
sumber
ConfigurationSettings
sekarang sudah usang dan digantikan olehConfigurationManager
, jadi yang setara sekarang akanConfigurationManager.AppSettings
File konfigurasi adalah aplikasi-lingkup dan bukan ruang-perakitan. Jadi, Anda harus meletakkan bagian konfigurasi perpustakaan Anda di file konfigurasi setiap aplikasi yang menggunakan perpustakaan Anda.
Yang mengatakan, itu bukan praktik yang baik untuk mendapatkan konfigurasi dari file konfigurasi aplikasi, khususnya
appSettings
bagian, di perpustakaan kelas. Jika pustaka Anda membutuhkan parameter, mereka mungkin harus dilewatkan sebagai argumen metode dalam konstruktor, metode pabrik, dll. Oleh siapa pun yang memanggil pustaka Anda. Ini mencegah panggilan aplikasi dari sengaja menggunakan kembali entri konfigurasi yang diharapkan oleh perpustakaan kelas.Yang mengatakan, file konfigurasi XML sangat berguna, jadi kompromi terbaik yang saya temukan adalah menggunakan bagian konfigurasi khusus. Anda bisa meletakkan konfigurasi perpustakaan Anda dalam file XML yang secara otomatis dibaca dan diuraikan oleh kerangka kerja dan Anda menghindari potensi kecelakaan.
Anda dapat mempelajari lebih lanjut tentang bagian konfigurasi khusus di MSDN dan juga Phil Haack memiliki artikel yang bagus tentang mereka.
sumber
appSettings
, bagian khusus menawarkan alternatif yang bagus; cukup banyak yang digunakan oleh Keanggotaan ASP.NET.Hanya untuk melakukan sesuatu, saya refactored jawaban teratas ke dalam kelas. Penggunaannya seperti:
sumber
Jika Anda menambahkan Pengaturan ke proyek Pustaka Kelas di Visual Studio (Properti Proyek, Pengaturan), itu akan menambahkan file app.config ke proyek Anda dengan bagian UserSettings / applyatioNSettings yang relevan, dan nilai-nilai default untuk pengaturan ini dari Pengaturan Anda.pengaturan mengajukan.
Namun file konfigurasi ini tidak akan digunakan saat runtime - sebaliknya perpustakaan kelas menggunakan file konfigurasi aplikasi hostingnya.
Saya percaya alasan utama untuk menghasilkan file ini adalah agar Anda dapat menyalin / menempelkan pengaturan ke file konfigurasi aplikasi host.
sumber
Saat ini saya sedang membuat plugin untuk merek perangkat lunak ritel, yang sebenarnya adalah perpustakaan kelas .net. Sebagai persyaratan, setiap plugin perlu dikonfigurasi menggunakan file konfigurasi. Setelah sedikit riset dan pengujian, saya menyusun kelas berikut. Itu melakukan pekerjaan dengan sempurna. Perhatikan bahwa saya belum menerapkan penanganan pengecualian lokal dalam kasus saya karena, saya menangkap pengecualian di tingkat yang lebih tinggi.
Beberapa penyesuaian mungkin diperlukan untuk mendapatkan titik desimal yang benar, jika desimal dan ganda, tetapi berfungsi dengan baik untuk Info Culture saya ...
Contoh file App.Config
Pemakaian:
Penghargaan untuk Shadow Wizard & MattC
sumber
Menanggapi pertanyaan awal, saya biasanya menambahkan file konfigurasi dalam proyek pengujian saya sebagai tautan; Anda kemudian dapat menggunakan atribut DeploymentItem untuk menambahkan ke folder Keluar dari uji coba.
Menanggapi komentar bahwa Assemblies tidak dapat spesifik proyek, mereka dapat dan itu memberikan fleksibilitas yang luar biasa. saat bekerja dengan kerangka kerja IOC.
sumber
Saya menghadapi masalah yang sama dan menyelesaikannya dengan membuat kelas statis
Parameters
setelah menambahkan File Konfigurasi Aplikasi ke proyek:Kemudian dapatkan parameter seperti ini:
sumber
majelis tidak memiliki file app.config sendiri. Mereka menggunakan file app.config dari aplikasi yang menggunakannya. Jadi, jika majelis Anda mengharapkan hal-hal tertentu dalam file konfigurasi, maka pastikan file konfigurasi aplikasi Anda memiliki entri-entri di sana.
Jika perakitan Anda digunakan oleh beberapa aplikasi, maka masing-masing aplikasi tersebut harus memiliki entri tersebut di file app.config mereka.
Apa yang saya sarankan Anda lakukan adalah mendefinisikan properti pada kelas dalam perakitan Anda untuk nilai-nilai tersebut misalnya
Di sini, properti ExternalServicesUrl mendapatkan nilainya dari file konfigurasi aplikasi. Jika ada aplikasi yang menggunakan rakitan ini tidak memiliki pengaturan dalam file konfigurasi Anda akan mendapatkan pengecualian o Jelas ada sesuatu yang hilang.
MissingConfigFileAppSettings adalah Pengecualian khusus. Anda mungkin ingin melempar pengecualian yang berbeda.
Tentu saja desain yang lebih baik adalah agar metode kelas-kelas tersebut diberikan nilai-nilai tersebut sebagai parameter daripada mengandalkan pengaturan file konfigurasi. Dengan cara itu aplikasi yang menggunakan kelas-kelas ini dapat memutuskan dari mana dan bagaimana mereka memberikan nilai-nilai ini.
sumber
Gunakan tambah item yang ada, pilih konfigurasi aplikasi dari proyek dll. Sebelum mengklik add, gunakan panah bawah kecil di sebelah kanan tombol add untuk "add as link"
Saya melakukan ini sepanjang waktu di dev saya.
sumber
Pembukaan : Saya menggunakan NET 2.0;
Solusi yang diposting oleh Yiannis Leoussis dapat diterima tetapi saya memiliki beberapa masalah dengannya.
Pertama,
static AppSettingsSection AppSettings = (AppSettingsSection)myDllConfig.GetSection("appSettings");
pengembalian nol. Saya harus mengubahnya kestatic AppSettingSection = myDllConfig.AppSettings;
Maka
return (T)Convert.ChangeType(AppSettings.Settings[name].Value, typeof(T), nfi);
tidak memiliki tangkapan untuk Pengecualian. Jadi saya sudah mengubahnyaIni bekerja sangat baik tetapi jika Anda memiliki dll yang berbeda, Anda harus menulis ulang setiap kali kode untuk setiap perakitan. Jadi, ini adalah versi saya untuk Kelas untuk instantiate setiap kali Anda butuhkan.
Untuk konfigurasi:
Gunakan sebagai:
sumber
Sejauh yang saya ketahui, Anda harus menyalin + menempel bagian yang Anda inginkan dari perpustakaan .config ke dalam aplikasi .config file. Anda hanya mendapatkan 1 app.config per instance yang dapat dieksekusi.
sumber
Mengapa tidak menggunakan:
[ProjectNamespace].Properties.Settings.Default.[KeyProperty]
untuk C #My.Settings.[KeyProperty]
untuk VB.NETAnda hanya perlu memperbarui secara visual properti-properti tersebut pada waktu desain melalui:
[Solution Project]->Properties->Settings
sumber
gunakan dari konfigurasi harus sangat sangat mudah seperti ini:
untuk detail lebih lanjut lihat MiniConfig
sumber