Ответ 1
Попробуйте вместо этого использовать класс WebConfigurationManager. Например:
string userName = WebConfigurationManager.AppSettings["PFUserName"]
Я пытаюсь прочитать ключи из файла Web.config
на другом уровне, чем веб-уровень (такое же решение)
Вот что я пытаюсь:
string userName = System.Configuration.ConfigurationManager.AppSettings["PFUserName"];
string password = System.Configuration.ConfigurationManager.AppSettings["PFPassWord"];
И вот мой appSettings
в файле Web.config
:
<configuration>
....
<appSettings>
<add key="PFUserName" value="myusername"/>
<add key="PFPassWord" value="mypassword"/>
</appSettings>
....
</configuration>
Когда я отлаживаю код username
и password
, просто null
, поэтому он не получает значения ключей.
Что я делаю неправильно, чтобы прочитать эти значения?
Попробуйте вместо этого использовать класс WebConfigurationManager. Например:
string userName = WebConfigurationManager.AppSettings["PFUserName"]
var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];
Если вызывающий объект представляет собой другой проект, вы должны написать конфигурацию в проекте-вызывателе, а не вызываемый.
Я нашел это решение весьма полезным. Он использует С# 4.0 DynamicObject для переноса ConfigurationManager. Поэтому вместо доступа к таким значениям:
WebConfigurationManager.AppSettings["PFUserName"]
вы получаете доступ к ним как к свойству:
dynamic appSettings = new AppSettingsWrapper();
Console.WriteLine(appSettings.PFUserName);
EDIT: добавление фрагмента кода в случае, если ссылка становится устаревшей:
public class AppSettingsWrapper : DynamicObject
{
private NameValueCollection _items;
public AppSettingsWrapper()
{
_items = ConfigurationManager.AppSettings;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = _items[binder.Name];
return result != null;
}
}
Эта проблема возникает, если этот проект используется другим проектом. Убедитесь, что вы скопировали ключи приложения в родительский проект app.config или web.config.
Также вы можете попробовать эту строку, чтобы получить строковое значение из файла app.config
.
var strName= ConfigurationManager.AppSettings["stringName"];
Извините, я не тестировал это, но я думаю, что он сделал вот так:
var filemap = new System.Configuration.ExeConfigurationFileMap();
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(filemap, System.Configuration.ConfigurationUserLevel.None);
//usage: config.AppSettings["xxx"]