membaca dari file app.config


131

Saya mencoba membaca StartingMonthColumn dan CategoryHeadingColumn dari file app.config di bawah ini menggunakan kode

ConfigurationSettings.AppSettings["StartingMonthColumn"]

tetapi mengembalikan nol, juga ConfigurationSettings.AppSettings.Count mengembalikan nol

Tolong bantu saya untuk membaca ini di aplikasi windows saya

<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CTARepository.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <CTARepository.Properties.Settings>
            <setting name="Setting" serializeAs="String">
                <value />
            </setting>
        </CTARepository.Properties.Settings>
    </userSettings>
    <appSettings>
        <add key="StartingMonthColumn" value="7"/>
        <add key="CategoryHeadingColumn" value="1"/>
    </appSettings>
</configuration>

Apakah Anda mencoba menjalankan aplikasi dari folder \ bin \ debug sambil mengubah file konfigurasi di root proyek? Jika tidak, ubah konfigurasi dan bangun kembali kode setelah menjalankan pembersihan.
Kangkan

1
File tidak bernama "app.config" kan? Ini dinamai demikian dalam proyek Anda, tetapi dalam direktori keluaran aplikasi, itu harus dinamai sama dengan biner keluaran Anda + ".config" (jadi seperti "MyLibrary.dll.config", atau "MyProgram.exe.config ", dll ...)
BrainSlugs83

@ BrianSlugs83 terima kasih sobat, saya bertanya-tanya mengapa aplikasi saya mogok. Sekarang, setelah dua hari mencari kemana-mana, jawabannya ada di sini di komentar. Saya baru saja "app.config" dan tidak ada "MyProgram.exe.config".
śmiglidigli

Silakan lihat stackoverflow.com/questions/1189364/… untuk solusinya. Terima kasih
Ariful Islam

Jawaban:


171

Pengaturan Konfigurasi .AppSettings sudah usang , Anda harus menggunakan Manajer Konfigurasi .AppSettings sebagai gantinya (Anda harus menambahkan referensi ke System.Configuration )

int value = Int32.Parse(ConfigurationManager.AppSettings["StartingMonthColumn"]);

Jika Anda masih mengalami masalah membaca di pengaturan aplikasi Anda kemudian periksa apakah app.configfile Anda dinamai dengan benar. Secara khusus, itu harus dinamai sesuai dengan rakitan pelaksana yaitu MyApp.exe.config, dan harus berada di direktori yang sama dengan MyApp.exe.


2
Jika ConfigurationSettings.AppSettings ["StartingMonthColumn"] mengembalikan null atau string kosong saya akan curiga bahwa Int32.Parse akan melempar pengecualian ketika mencoba mengurai nilai-nilai itu.
Bittercoder

@bittercoder, ya itu akan tetapi, file app.config Anda harus selalu memiliki konfigurasi yang benar. Jika OP ingin menambahkan beberapa bentuk penanganan di sana yaitu TryParse maka dengan segala cara mereka bisa. Namun, ini bukan pertanyaannya.
James

2
Perhatikan bahwa Anda juga bisa mendapatkan akses ke versi nilai yang diketik kuat, melalui Settings.Default. * (Yaitu, dalam hal ini akan menjadi Settings.Default.StartingMonthColumn).
BrainSlugs83

@ BrainSlugs83 Perhatikan bahwa Anda mendapatkan pengaturan pengguna yang membingungkan dengan pengaturan aplikasi. Jika Anda ingin sangat mengetik akses ke pengaturan aplikasi, Anda perlu menerapkan ConfigurationSection
James

Itu tidak benar, itu akan menarik nilai dari app.config terlepas dari apakah nilai tersebut dicakup untuk "Pengguna" atau "Aplikasi" (dari perancang GUI, Anda dapat memilih ruang lingkup untuk setiap pengaturan).
BrainSlugs83

20

Hanya untuk referensi di masa mendatang, Anda hanya perlu menambahkan System.Configurationke perpustakaan referensi Anda:

masukkan deskripsi gambar di sini


2
jawaban Anda lebih baik daripada jawaban pertama di sini, semua orang lupa untuk mengatakan bahwa Anda harus menambahkan referensi
essanousy

19

ConfigurationSettings.AppSettings sudah usang , lihat di sini:

http://msdn.microsoft.com/en-us/library/system.configuration.configurationsettings.appsettings.aspx

Yang mengatakan, itu harus tetap berfungsi.

Hanya saran, tetapi sudahkah Anda mengonfirmasi bahwa konfigurasi aplikasi Anda adalah yang dapat dieksekusi yang digunakan oleh Anda?

Coba lampirkan debugger dan periksa nilai berikut:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

Dan kemudian membuka file konfigurasi dan memverifikasi bagian itu seperti yang Anda harapkan.


Hai Bittercoder ketika saya mencoba untuk mendapatkan nilai untuk AppDomain.CurrentDomain.SetupInformation.ConfigurationFile saya mendapatkan C: \\ Program Files \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config yang bukan file konfigurasi saya ... apa yang seharusnya saya lakukan
Sathish

Itu file konfigurasi yang benar ... mungkin saja Anda tidak mengharapkannya. Sebenarnya dalam hal ini saya percaya C: \ Program Files \ Microsoft Office \ OFFICE11 \ Excel.EXE.config adalah konfigurasi global, dan jika Anda menempatkan Excel.EXE.config yang serupa dengan nama yang sama dengan kumpulan Anda, ini adalah dari mana pengaturan aplikasi Anda akan dibaca. Lihat tautan ini untuk perincian: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/…
Bittercoder


7

Ini:

Console.WriteLine( "StartingMonthColumn is {0}", ConfigurationManager.AppSettings["StartingMonthColumn"]);

bekerja dengan baik untuk saya.

Perhatikan bahwa ConfigurationManagerada di System.Configurationnamespace (jadi Anda mungkin ingin using System.Configuration;pernyataan), dan karena apa yang Anda baca memiliki tipe string, Anda harus menguraikan apa yang Anda baca untuk menggunakannya sebagai angka.

Pastikan juga Anda menetapkan system.configuration.dllsebagai referensi dalam proyek Anda atau membuat skrip.


apa referensi yang harus ditambahkan untuk mendapatkan ConfigurationManager.Appsettings yang saya gunakan .Net 2.0 Framework
Sathish

1
Anda perlu referensi ke System.Configuration.dll. The ConfigurationManagerkelas ditambahkan di NET 2.0, sehingga Anda harus OK.
Michael Burr

7

Alasannya sederhana, panggilan Anda untuk ConfigurationSettings.AppSettingstidak mengembalikan file konfigurasi yang diperlukan. Silakan coba salah satu dari cara berikut:

  • Pastikan konfigurasi aplikasi Anda memiliki nama yang sama dengan file exe aplikasi Anda - dengan ekstensi .config ditambahkan misalnya MyApp.exe.config
  • ATAU Anda bisa menggunakan ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

Semoga ini membantu


3

Cobalah untuk membangun kembali proyek Anda - Ini menyalin konten App.configke "<YourProjectName.exe> ​​.config" di perpustakaan build.


2

Juga tambahkan kunci "StartingMonthColumn" di App.config tempat Anda menjalankan aplikasi, misalnya di App.config dari proyek uji.

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.