Ответ 1
Это работает для меня:
string value = System.Configuration.ConfigurationManager.AppSettings[key];
Я не могу получить доступ к значениям в файле конфигурации.
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>
Есть ли у вас предложение, что мне делать?
Это работает для меня:
string value = System.Configuration.ConfigurationManager.AppSettings[key];
Ответ, который дал dtsg:
string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];
НО, вам нужно добавить ссылку на сборку на
System.Configuration
Перейдите в Обозреватель решений и щелкните правой кнопкой мыши ссылку Ссылки и выберите Добавить ссылку. Перейдите на вкладку "Ассемблемы" и выполните поиск конфигурации.
Вот пример моего 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"];
Дайте этому ходу:
string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];
Читать из конфигурации:
Вам нужно будет добавить ссылку на Config
string value = Properties.Settings.Default.keyname;
Сохранить в конфигурации:
Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();
Я использую:
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
В файле 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
. С наилучшими пожеланиями: Рафаэль
Возвращаясь к этому после долгого времени...
Учитывая упадок ConfigurationManager, для тех, кто все еще ищет ответ на эту попытку (например):
AppSettingsReader appsettingsreader = new AppSettingsReader();
string timeAsString = (string)(new AppSettingsReader().GetValue("Service.Instance.Trigger.Time", typeof(string)));
Требуется System.Configuration конечно.
(Отредактировал код так, чтобы он действительно работал и его было проще читать)
Смотрите, я сделал то, что, как я думал, было очевидным:
string filePath = ConfigurationManager.AppSettings.GetValues("ClientsFilePath").ToString();
Пока этот компилятор всегда возвращает null.
Это однако (сверху) работает:
string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];
Некоторые ответы кажутся немного неактивными 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];
Для веб-приложения я обычно напишу этот метод и просто вызову его с помощью ключа.
private String GetConfigValue(String key)
{
return System.Web.Configuration.WebConfigurationManager.AppSettings[key].ToString();
}
Вы можете просто ввести:
string filePath = Sysem.Configuration.ConfigurationManager.AppSettings[key.ToString()];
потому что key
- это объект, а AppSettings
принимает строку
ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];
Мой простой тест также потерпел неудачу, следуя советам других ответов здесь, пока я не понял, что файл конфигурации, который я добавил в мое настольное приложение, получил имя "App1.config". Я переименовал его в "App.config", и все сразу работало так, как должно было.
КОД БУДЕТ СОЗДАН АВТОМАТИЧЕСКИ
<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 [ "имя"]
Или вы можете использовать
string value = System.ConfigurationManager.AppSettings.Get("ClientsFilePath");