Cara termudah untuk memiliki file konfigurasi di aplikasi Windows Forms C #

88

Saya benar-benar baru mengenal .NET, dan saya masih belum memahami cara kerja file konfigurasi.

Setiap kali saya mencari di Google tentang itu saya mendapatkan hasil tentang web.config, tetapi saya sedang menulis aplikasi Windows Forms.

Saya menemukan bahwa saya perlu menggunakan namespace System.Configuration, tetapi dokumentasinya tidak membantu.

Bagaimana cara menentukan bahwa file konfigurasi saya adalah XYZ.xml? Atau apakah itu memiliki nama "default" untuk file konfigurasi? Saya masih tidak mengerti.

Juga, bagaimana cara mendefinisikan bagian baru? Apakah saya benar-benar perlu membuat kelas yang mewarisi dari ConfigurationSection?

Saya hanya ingin memiliki file konfigurasi dengan beberapa nilai seperti ini:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

Apakah ada cara sederhana untuk melakukannya? Dapatkah Anda menjelaskan dengan cara yang sederhana cara membaca dan menulis dari / ke file konfigurasi sederhana?

Fabio Gomes
sumber
1
Apa versi .NET Anda? Untuk versi 2.0 dan lebih tinggi, ada cara yang sangat lucu yang disebut Pengaturan.
Thomas
1
@Bahkan itu salah ketik tetapi itu bisa berarti "Jelaskan dengan contoh" :)
Fabio Gomes

Jawaban:

121

Anda ingin menggunakan App.Config.

Ketika Anda menambahkan item baru ke proyek, ada sesuatu yang disebut file Konfigurasi Aplikasi. Tambahkan itu.

Kemudian Anda menambahkan kunci di bagian konfigurasi / appsettings

Suka:

<configuration>
 <appSettings>
  <add key="MyKey" value="false"/>

Akses anggota dengan melakukan

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

Ini berfungsi di .NET 2 ke atas.

qui
sumber
2
Sebenarnya ini bekerja di semua versi .NET, dari v1.0 dan seterusnya. Kelas baru di .NET 2.0 adalah ConfigurationManager.
Mike Dimmick
4
Saya pribadi menggunakan tab "Settings" pada "Application Properties" (Framework 2.0 dan seterusnya) karena Visual Studio akan mengkodekan properti yang diketik dengan kuat untuk pengaturan Anda. Mereka juga dapat menyertakan pengaturan "Pengguna" yang membaca / menulis pada saat dijalankan.
Adrian Clark
@Mike ya saya punya perasaan bahwa itu masalahnya, tetapi saya tidak terlalu yakin. Saya belum banyak bekerja dengan 1.
qui
26
Perhatikan bahwa ConfigurationSettingssudah usang, gunakan System.Configuration.ConfigurationManager.AppSettings["MyKey"];.
JNF
16
Juga catatan, untuk menggunakan System.Configuration.ConfigurationManagerproyek Anda membutuhkan referensi keSystem.Configuration.dll
dmeglio
66

Klarifikasi jawaban sebelumnya ...

  1. Tambahkan file baru ke proyek Anda ( TambahItem BaruFile Konfigurasi Aplikasi )

  2. File konfigurasi baru akan muncul di Solution Explorer sebagai App.Config .

  3. Tambahkan pengaturan Anda ke dalam file ini menggunakan yang berikut ini sebagai template

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
    
  4. Ambil kembali seperti ini:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
    
  5. Saat dibuat, folder keluaran Anda akan berisi file bernama <assemblyname> .exe.config. Ini akan menjadi salinan dari file App.Config . Tidak ada pekerjaan lebih lanjut yang perlu dilakukan oleh pengembang untuk membuat file ini.

ZombieSheep
sumber
1
Ini berguna bagi saya. Dua poin lainnya: Saat menambahkan file baru ke proyek, File Konfigurasi Aplikasi ditemukan ketika saya mengklik node Umum di sisi kiri dialog. Untuk menggunakan kelas ConfigurationManager dalam kode saya, saya harus menambahkan DLL System.Configuration ke referensi saya.
John Gilmer
28

Dari pembacaan singkat jawaban sebelumnya, mereka terlihat benar, tetapi sepertinya tidak ada orang yang menyebutkan fasilitas konfigurasi baru di Visual Studio 2008. Masih menggunakan app.config (disalin pada waktu kompilasi ke YourAppName.exe.config), tetapi ada widget UI untuk menyetel properti dan menentukan tipenya. Klik dua kali Settings.settings di folder "Properties" proyek Anda.

Bagian terbaiknya adalah mengakses properti ini dari kode adalah aman untuk mengetik - kompilator akan menemukan kesalahan yang jelas seperti salah ketik nama properti. Misalnya, properti bernama MyConnectionString di app.config akan diakses seperti:

string s = Properties.Settings.Default.MyConnectionString;
maxfurni
sumber
Ini tersedia di VS2005.
Greg D
5
Bagus, tetapi (Properti Proyek | Pengaturan) menghasilkan kode yang harus dikompilasi. Jika Anda ingin mengubah pengaturan, Anda perlu merilis biner baru ke pelanggan.
JohnL4
@ JohnL4 jika pengaturan ini berada dalam lingkup "pengguna" maka Anda dapat mengubahnya secara terprogram, misalnyaSettings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits
10

Anda harus membuat file App.config (sangat mirip dengan web.config ).

Anda harus mengklik kanan pada proyek Anda, menambahkan item baru, dan memilih "File Konfigurasi Aplikasi" baru .

Pastikan Anda menambahkan menggunakan System.Configuration dalam proyek Anda.

Kemudian Anda dapat menambahkan nilai ke dalamnya:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="setting1" value="key"/>
  </appSettings>
  <connectionStrings>
    <add name="prod" connectionString="YourConnectionString"/>
  </connectionStrings>
</configuration>

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }

Sekadar catatan: Menurut Microsoft , Anda harus menggunakan ConfigurationManager daripada ConfigurationSettings (lihat bagian komentar):

"Kelas ConfigurationSettings hanya menyediakan kompatibilitas mundur. Untuk aplikasi baru, Anda harus menggunakan kelas ConfigurationManager atau kelas WebConfigurationManager."

Nathan Koop
sumber
Sangat membantu. Memecahkan masalah saya ke T.
JCMorris
Dalam Visual Studio 2015: Klik Proyek> Tambahkan Referensi. Gulir ke bawah setengah untuk menemukan System.Configuration Klik OK, lalu perbarui baris kode sesuai komentar Nathan.
Robot70
7

Nama default untuk file konfigurasi adalah [yourexe] .exe.config. Jadi notepad.exe akan memiliki file konfigurasi bernama notepad.exe.config, di folder yang sama dengan program. Ini adalah file konfigurasi umum untuk semua aspek CLR dan Framework, tetapi dapat berisi pengaturan Anda sendiri di bawah <appSettings>node.

The <appSettings>elemen menciptakan koleksi pasangan nama-nilai yang dapat diakses sebagai System.Configuration.ConfigurationSettings.AppSettings. Namun, tidak ada cara untuk menyimpan perubahan kembali ke file konfigurasi.

Anda juga dapat menambahkan elemen khusus Anda sendiri ke file konfigurasi - misalnya, untuk menentukan setelan terstruktur - dengan membuat kelas yang mengimplementasikan IConfigurationSectionHandlerdan menambahkannya ke <configSections>elemen file konfigurasi. Anda kemudian dapat mengaksesnya dengan menelepon ConfigurationSettings.GetConfig.

.NET 2.0 menambahkan kelas baru System.Configuration.ConfigurationManager, yang mendukung banyak file, dengan penggantian data per-sistem per pengguna. Ini juga mendukung penyimpanan konfigurasi yang dimodifikasi kembali ke file pengaturan.

Visual Studio membuat file bernama App.config, yang disalin ke folder EXE, dengan nama yang benar, saat proyek dibuat.

Mike Dimmick
sumber
6

Artikel (IMHO) terbaik tentang konfigurasi Aplikasi .NET ada di CodeProject, Mengurai Misteri Konfigurasi .NET 2.0 . Dan artikel favorit saya berikutnya (yang lebih pendek) tentang bagian di file konfigurasi .NET adalah Memahami Penangan Bagian - File App.config .

TcKs
sumber
Ini sebenarnya bukan cara termudah yang diminta oleh pengguna, tetapi Mengurai misteri konfigurasi .NET 2.0 benar-benar merupakan rangkaian artikel yang hebat.
Ricardo Amores
3

Di Windows Forms, Anda memiliki app.configfile yang sangat mirip dengan web.configfile tersebut. Tetapi karena yang saya lihat Anda membutuhkannya adalah nilai khusus, saya sarankan menggunakan Pengaturan .

Untuk melakukan itu, buka properti proyek Anda, lalu masuk ke pengaturan. Jika file pengaturan tidak ada, Anda akan memiliki link untuk membuatnya. Kemudian, Anda dapat menambahkan pengaturan ke tabel yang Anda lihat di sana, yang akan menghasilkan XML yang sesuai, dan kelas Pengaturan yang dapat digunakan untuk memuat dan menyimpan pengaturan.

Kelas pengaturan akan diberi nama seperti DefaultNamespace.Properties.Settings. Kemudian, Anda dapat menggunakan kode yang mirip dengan:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}
konfigurator
sumber
2

Saya setuju dengan jawaban lain yang mengarahkan Anda ke app.config. Namun, daripada membaca nilai langsung dari app.config, Anda harus membuat kelas utilitas (AppSettings adalah nama yang saya gunakan) untuk membacanya dan mengeksposnya sebagai properti. Kelas AppSettings dapat digunakan untuk menggabungkan pengaturan dari beberapa penyimpanan, seperti nilai dari app.config dan info versi aplikasi dari assembly (AssemblyVersion dan AssemblyFileVersion).

Jamie Ide
sumber
2

Cara yang sangat sederhana untuk melakukannya adalah dengan menggunakan kelas kustom Anda sendiriSettings .

Tokoh utama
sumber
+1 untuk tautan yang tidak terlalu bertele-tele ke ApplicationSettings di msdn.microsoft.com/en-us/library/… yang tampaknya lebih sederhana daripada implementasi ConfigurationManager. Dapatkan / setel pengaturan, tidak peduli tentang "Bentuk XML".
maxwellb
1

Menggunakan:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings sudah tidak digunakan lagi dan sekarang dianggap usang ( link ).

Selain itu, bagian appSettings dari app.config telah diganti dengan bagian applicationSettings .

Seperti yang disebutkan orang lain, Anda harus menggunakan System.Configuration.ConfigurationManager ( link ) yang baru untuk .NET 2.0.

Edward Manning
sumber
ConfigurationSettings tidak digunakan lagi, bukan AppSettings.
Toby
0

Versi .NET dan Visual Studio apa yang Anda gunakan?

Saat Anda membuat proyek baru, Anda harus memiliki file dalam solusi Anda yang disebut app.config . Itu adalah file konfigurasi default.

Geoff
sumber