AppSettings, .config dosyasından değer alır


172

Yapılandırma dosyasındaki değerlere erişemiyorum.

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var clientsFilePath = config.AppSettings.Settings["ClientsFilePath"].Value; 
// the second line gets a NullReferenceException

.config dosyası :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- ... -->
    <add key="ClientsFilePath" value="filepath"/>
    <!-- ... -->
  </appSettings>
</configuration>

Herhangi bir öneriniz var mı?

Yanıtlar:


345

Bu benim için çalışıyor:

string value = System.Configuration.ConfigurationManager.AppSettings[key];

6
Sağladığım kod, YourProgram.exe.config dosyasının YourProgram.exe ile aynı klasörde olmasını gerektirir. Sadece orada olduğundan emin olun. Yaygın bir hata, app.config dosyasını çalışmayan hedef dizine kopyalamaktır.
Adam

40
Referans ekle System.Configuration.
checksum

13
Benim .NET 4.5 System.Configuration değilConfigurationManager
qwert_ukg

3
Ben de 4.5 projede null alıyorum - bu iki saat geçirdim .. Bir hata olmalı.
IrishChieftain

1
Ben de bunu çok hedefli bir uygulamada görüyorum, benim .net core config çalışıyor ancak .net framework config çalışmıyor (ConfigurationManager kullanarak)
Michael Brown

61

Dtsg'nin verdiği cevap işliyor:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

ANCAK, bir eklemeniz gerekir derleme başvurusu için

Sistem yapılandırması

Senin git Solution Explorer ve sağ tıklama Referanslar ve açılan menüden Add referansı . Montajlar sekmesini seçin ve Yapılandırma'yı arayın .

Referans yöneticisi

İşte benim App.config bir örnek :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="AdminName" value="My Name"/>
    <add key="AdminEMail" value="MyEMailAddress"/>
  </appSettings>
</configuration>

Hangi şekilde alabilirsiniz:

string adminName = ConfigurationManager.AppSettings["AdminName"];

2
OP ile aynı sorunu yaşıyorum. VS2015 kullanma. Nasıl ya da neden bilmiyorum, ama System.Configuration'a olan referansım System.configuration (küçük harf) diyor .
Tim

Bu, "meclisler" sekmesinin bulunmadığı yerde (en azından VS2019)
kapsanmasıyla

21

Bunu bir deneyin:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

4
Uygulamanız yanlış olmalıdır. Bu kesinlikle bir yapılandırma dosyasından anahtar değerleri almak için çalışır.
dtsg

Projenizin referanslarına System.Configuration'a bir başvuru eklediğinizden emin olun!
GrahamJ

19

Yapılandırmadan Okuyun:

Config'e bir referans eklemeniz gerekecek

  1. Projenizde "Özellikler" i açın
  2. "Ayarlar" Sekmesine gidin
  3. "Ad" ve "Değer" ekleyin
  4. Aşağıdaki kodu kullanarak Değer Alın:
string value = Properties.Settings.Default.keyname;

Yapılandırmaya Kaydet:

Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();

4
Değerlerinizi, açıkladığınız gibi proje özelliklerinin Ayarlar sekmelerine eklerseniz, ConfigurationManager'ı kullanan diğer tüm yanıtlar çalışmaz. Teşekkürler.
Salak Turp

2
Bu benim için de işe yaradı. nullYukarıdaki öneriler ile bir dize alıyordu , ama Properties.Settings.Default.<keyName>bir cazibe gibi çalıştı!
dub stylee

1
Mükemmel ! Bunu arıyordum :) Teşekkürler!
HSQL

@Masoud Siahkali, Geçen hafta burada kendi projemde ne var denedim, ama değerler, çalışma zamanında kullanıcı tarafından değiştirildiğinde (Sadece şimdilik VS GUI'den çalıştırıyor) örnekler arasında kalmıyor. Benim sorum: stackoverflow.com/questions/61018443/… . Hala bu değerlerin kullanıcı tarafından değiştirilen ayarlarının neden devam etmediğini anlayamadım ...
marky

8

Ben kullanıyorum:

    ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
    //configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
    configMap.ExeConfigFilename = AppDomain.CurrentDomain.BaseDirectory + ServiceConstants.FILE_SETTING;
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
    value1 = System.Configuration.ConfigurationManager.AppSettings["NewKey0"];
    value2 = config.AppSettings.Settings["NewKey0"].Value;
    value3 = ConfigurationManager.AppSettings["NewKey0"];

Burada value1 = ... ve value3 = ... null değerini verir ve value2 = ... çalışır

Sonra iç app.config ile değiştirmeye karar verdim:

// Note works in service but not in wpf
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"d:\test\justAConfigFile.config.whateverYouLikeExtension");
ConfigurationManager.RefreshSection("appSettings");

string value = ConfigurationManager.AppSettings["NewKey0"];

VS2012 .net 4 kullanma


Tam da ihtiyacım olan şey bu. Gerçekten yararlı, teşekkürler.
Umut OVECOGLU

5

Gelen app/web.configdosyanın aşağıdaki yapılandırmayı ayarlayın:

<configuration>
  <appSettings>
    <add key="NameForTheKey" value="ValueForThisKey" />
    ... 
    ...    
  </appSettings>
...
...
</configuration>

kodunuza bu satırı girerek erişebilirsiniz:

string myVar = System.Configuration.ConfigurationManager.AppSettings["NameForTheKey"];

* Bu çalışmanın .net4.5.xve için iyi olduğunu unutmayın .net4.6.x; ama işe yaramaz .net core. Saygılarımla: Rafael


3

Uzun zaman sonra buna geri döneceğim ...

ConfigurationManager'ın ölümü göz önüne alındığında, bu denemeye hala cevap arayan herkes için (örneğin):

AppSettingsReader appsettingsreader = new AppSettingsReader();
string timeAsString = (string)(new AppSettingsReader().GetValue("Service.Instance.Trigger.Time", typeof(string)));

Sistem gerektirir.

(Kodu gerçekten çalışan ve okunması daha kolay bir şeye düzenledi)


İyi yanıt, ancak lütfen temizleyin, AppSettingsReader'ı yeniden oluştururken neden yeni AppSettingsReader örneği oluşturursanız ve dizeyi yayınlamanız gerekmiyorsa, sadece .ToString () geçersiz kılmaya son verebilirsiniz.
maytham-ɯɐɥʇʎɐɯ

2

Gördüğüm şeyi yaptığımı düşündüm:

string filePath = ConfigurationManager.AppSettings.GetValues("ClientsFilePath").ToString();

Bu derlenirken her zaman null değerini döndürür.

Ancak bu (yukarıdan) çalışır:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

2

Yanıtlar bazıları kapalı biraz görünüyor IMO İşte benim alabilir 2016 dolaylarında

<add key="ClientsFilePath" value="filepath"/>

System.ConfigurationReferans verildiğinden emin olun .

Soru, bir appsettings anahtarının değerini sormaktır

Hangisi kesinlikle olmalı

  string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"]

  //yourKeyValue should hold on the HEAP  "filepath"

İşte değerleri bir araya getirebileceğiniz bir bükülme (bu soru için değil)

var emails = ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["Environment"] + "_Emails"];

emails Ortam Anahtarı + "_Emails" değeri olacak

example :   jack@google.com;thad@google.com;

2

Web uygulaması için normalde bu yöntemi yazacağım ve sadece anahtarla çağıracağım.

private String GetConfigValue(String key)
    {
       return System.Web.Configuration.WebConfigurationManager.AppSettings[key].ToString();
    }

1

Basitçe şunu yazabilirsiniz:

string filePath = Sysem.Configuration.ConfigurationManager.AppSettings[key.ToString()];

çünkü keybir nesnedir ve AppSettingsbir dize alır


1
ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];

1

Ya da kullanabilirsiniz

string value = system.configuration.ConfigurationManager.AppSettings.Get("ClientsFilePath");

//Gets the values associated with the specified key from the System.Collections.Specialized.NameValueCollection

0

Masaüstü uygulamama eklediğim yapılandırma dosyasına "App1.config" adı verildiğini anlayana kadar, buradaki diğer yanıtların tavsiyesini izleyerek basit testim de başarısız oldu. "App.config" olarak yeniden adlandırdım ve her şey olması gerektiği gibi hemen çalıştı.


0
  1. Projenizde "Özellikler" i açın
  2. "Ayarlar" Sekmesine gidin
  3. "Ad" ve "Değer" ekleyin

KOD OTOMATİK OLARAK ÜRETİLECEK

    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup ..." ... >
          <section name="XX....Properties.Settings" type="System.Configuration.ClientSettingsSection ..." ... />
        </sectionGroup>
      </configSections>
      <applicationSettings>
        <XX....Properties.Settings>
          <setting name="name" serializeAs="String">
            <value>value</value>
          </setting>
          <setting name="name2" serializeAs="String">
            <value>value2</value>
          </setting>
       </XX....Properties.Settings>
      </applicationSettings>
    </configuration>

Bir değer elde etmek için

Properties.Settings.Default.Name

VEYA

Properties.Settings.Default [ "adını"]

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.