AppSettings получает значение из файла .config

Я не могу получить доступ к значениям в файле конфигурации.

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

.config файл:

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

Есть ли у вас предложение, что мне делать?

Ответ 1

Это работает для меня:

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

Ответ 2

Ответ, который дал dtsg:

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

НО, вам нужно добавить ссылку на сборку на

System.Configuration

Перейдите в Обозреватель решений и щелкните правой кнопкой мыши ссылку Ссылки и выберите Добавить ссылку. Перейдите на вкладку "Ассемблемы" и выполните поиск конфигурации.

Reference manager

Вот пример моего App.config:

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

Что вы можете получить следующим образом:

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

Ответ 3

Дайте этому ходу:

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

Ответ 4

Читать из конфигурации:

Вам нужно будет добавить ссылку на Config

  1. Откройте "Свойства" на вашем проекте
  2. Перейти на вкладку "Настройки"
  3. Добавить "Имя" и "Значение"
  4. Получить значение с помощью следующего кода:
string value = Properties.Settings.Default.keyname;

Сохранить в конфигурации:

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

Ответ 5

Я использую:

    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"];

Где значение1 =... и значение3 =... дает значение null и значение2 =... работает

Затем я решил заменить внутренний файл app.config на:

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

Ответ 6

В файле app/web.config установите следующую конфигурацию:

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

тогда вы можете получить доступ к этому в своем коде, вставив в эту строку:

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

* Обратите внимание, что это прекрасно работает для .net4.5.x и .net4.6.x; но не работают для .net core. С наилучшими пожеланиями: Рафаэль

Ответ 7

Возвращаясь к этому после долгого времени...

Учитывая упадок ConfigurationManager, для тех, кто все еще ищет ответ на эту попытку (например):

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

Требуется System.Configuration конечно.

(Отредактировал код так, чтобы он действительно работал и его было проще читать)

Ответ 8

Смотрите, я сделал то, что, как я думал, было очевидным:

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

Пока этот компилятор всегда возвращает null.

Это однако (сверху) работает:

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

Ответ 9

Некоторые ответы кажутся немного неактивными IMO. Вот мой запрос около 2016

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

Убедитесь, что System.Configuration ссылается.

Вопрос запрашивает значение команды

Скорее всего, ДОЛЖЕН быть

  string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"]

  //yourKeyValue should hold on the HEAP  "filepath"

Вот твист, в котором вы можете группировать значения (не для этого вопроса)

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

emails будет значением ключа среды + "_Emails"

example :   [email protected];[email protected];

Ответ 10

Для веб-приложения я обычно напишу этот метод и просто вызову его с помощью ключа.

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

Ответ 11

Вы можете просто ввести:

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

потому что key - это объект, а AppSettings принимает строку

Ответ 12

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

Ответ 13

Мой простой тест также потерпел неудачу, следуя советам других ответов здесь, пока я не понял, что файл конфигурации, который я добавил в мое настольное приложение, получил имя "App1.config". Я переименовал его в "App.config", и все сразу работало так, как должно было.

Ответ 14

  1. Откройте "Свойства" на вашем проекте
  2. Перейти на вкладку "Настройки"
  3. Добавить "Имя" и "Значение"

КОД БУДЕТ СОЗДАН АВТОМАТИЧЕСКИ

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

Чтобы получить значение

Properties.Settings.Default.Name

ИЛИ ЖЕ

Properties.Settings.Default [ "имя"]

Ответ 15

Или вы можете использовать

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