app.config dosyasından okuma


131

Kodu kullanarak aşağıdaki app.config dosyasından StartMonthColumn ve CategoryHeadingColumn'u okumaya çalışıyorum

ConfigurationSettings.AppSettings["StartingMonthColumn"]

ancak null döndürüyor, ayrıca ConfigurationSettings.AppSettings.Count sıfır döndürüyor

Lütfen bunu Windows uygulamamda okumama yardım et

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

Projenin kök dizinindeki yapılandırma dosyasını değiştirirken uygulamayı \ bin \ debug klasöründen çalıştırmaya mı çalışıyorsunuz? Aksi takdirde, yapılandırmayı değiştirin ve bir temizleme çalıştırdıktan sonra kodu yeniden oluşturun.
Kangkan

1
Dosya "app.config" olarak adlandırılmamış değil mi? Kesin olarak projenizde bu adı verilmiştir, ancak uygulama çıktı dizininde çıktı ikili + ".config" ile aynı şekilde adlandırılmalıdır ("MyLibrary.dll.config" veya "MyProgram.exe.config gibi" ", vb ...)
BrainSlugs83

@ BrianSlugs83 teşekkürler dostum, uygulamamın neden çöktüğünü merak ediyordum. Şimdi, her yerde iki gün aradıktan sonra, cevap yorumda burada. Sadece "app.config" aldım ve "MyProgram.exe.config" yok.
śmiglidigli

Çözüm için lütfen stackoverflow.com/questions/1189364/… adresine bakın . Teşekkürler
Ariful Islam

Yanıtlar:


171

Configuration Settings .AppSettings artık kullanılmıyor , bunun yerine Configuration Manager .AppSettings'i kullanmalısınız ( System.Configuration'a bir başvuru eklemeniz gerekir )

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

Uygulama ayarlarınızı okumada hala sorun yaşıyorsanız, app.configdosyanızın doğru şekilde adlandırılıp adlandırılmadığını kontrol edin . Özellikle, yürütme derlemesine göre adlandırılmalı MyApp.exe.config, yani. İle aynı dizinde yer almalıdır MyApp.exe.


2
ConfigurationSettings.AppSettings ["StartMonthColumn"] null veya boş bir dize döndürürse, Int32.Parse'ın bu değerleri ayrıştırmaya çalışırken bir istisna oluşturacağından şüphelenirdim.
Bittercoder

@bittercoder, evet, ancak yine de app.config dosyanız her zaman doğru yapılandırmaya sahip olmalıdır . OP, oraya bir tür işleme, yani TryParse eklemek istiyorsa, o zaman elbette yapabilirler. Ancak soru bu değildi.
James

2
Ayrıca, Settings.Default. * Aracılığıyla değerlerin güçlü yazılmış sürümlerine de erişebileceğinizi unutmayın (yani, bu durumda, bu Settings.Default.StartingMonthColumn olacaktır).
BrainSlugs83

@ BrainSlugs83 Uygulama ayarlarıyla kafa karıştırıcı kullanıcı ayarları aldığınızı unutmayın . Uygulama ayarlarına kesin olarak girilmiş erişim istiyorsanız, özel bir Yapılandırma
James

Bu doğru değil, değerlerin "Kullanıcı" veya "Uygulama" kapsamına alınıp alınmadığına bakılmaksızın değerleri app.config'den çekecektir (GUI tasarımcısından her ayar için kapsamı seçebilirsiniz).
BrainSlugs83

20

Gelecekte referans olması için sadece System.Configurationreferans kitaplığınıza eklemeniz gerekir :

görüntü açıklamasını buraya girin


2
cevabınız buradaki ilk cevaptan daha iyi, herkes referans eklemeniz gerektiğini söylemeyi unuttu
essanousy

19

ConfigurationSettings.AppSettings kullanımdan kaldırıldı , buraya bakın:

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

Bununla birlikte, yine de çalışması gerektiğini söyledi.

Sadece bir öneri, ancak uygulama yapılandırmanızın yürütülebilir dosyanın kullandığı yapılandırma olduğunu onayladınız mı?

Bir hata ayıklayıcı eklemeyi ve aşağıdaki değeri kontrol etmeyi deneyin:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

Ve sonra yapılandırma dosyasını açıp bölümü doğrulamak beklediğiniz gibi orada.


Merhaba Bittercoder, AppDomain.CurrentDomain.SetupInformation.ConfigurationFile değerini almaya çalıştığımda C: \\ Program Files \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config benim yapılandırma dosyam değil ... ne yapmalı i do
Sathish

Bu doğru konfigürasyon dosyası ... sadece onu beklemiyor olabilirsiniz. Aslında bu durumda, C: \ Program Files \ Microsoft Office \ OFFICE11 \ Excel.EXE.config'in genel yapılandırma olduğuna inanıyorum ve benzer şekilde adlandırılmış bir Excel.EXE.config'i derlemenizle aynı dizine yerleştirirseniz, bu uygulama ayarlarınızın nereden okunacağı. Ayrıntılar için şu bağlantılara bakın: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/…
Bittercoder


7

Bu:

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

benim için iyi çalışıyor.

Bunun ad alanında olduğuna dikkat ConfigurationManageredin System.Configuration(bu nedenle muhtemelen bir using System.Configuration;ifade isteyeceksiniz ) ve okuduğunuz şeyin bir dize türü olduğundan, okuduğunuz şeyi sayı olarak kullanmak için ayrıştırmanız gerekecek.

Ayrıca, system.configuration.dllprojenizde veya oluşturduğunuz komut dosyasında referans olarak ayarladığınızdan emin olun .


ConfigurationManager'ı almak için eklenmesi gereken referans
nedir.Appsettings

1
Bir referansa ihtiyacın var System.Configuration.dll. ConfigurationManagerTamam olmalıdır bu yüzden sınıf, .NET 2.0 eklenmiştir.
Michael Burr

7

Nedeni basit, çağrınız ConfigurationSettings.AppSettingsgerekli yapılandırma dosyasını döndürmüyor. Lütfen aşağıdaki yöntemlerden birini deneyin:

  • Uygulama yapılandırmanızın, uygulamanızın exe dosyasıyla aynı ada sahip olduğundan emin olun - .config uzantısı eklenmiş, örneğin MyApp.exe.config
  • VEYA kullanabilirsiniz ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

Bu yardımcı olur umarım


3

Projenizi yeniden oluşturmayı deneyin - App.configOluşturma kitaplığındaki "< ProjenizinAdı.exe > .config" in içeriğini kopyalar .


2

Ayrıca, uygulamayı çalıştırdığınız App.config'e, örneğin test projesinin App.config dosyasında "StartMonthColumn" anahtarını ekleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.