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?


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.


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.


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;

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."


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.



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;
        }
    }
}

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).



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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.