AppSettings из пользовательских файлов
Я борюсь с настройкой и настройкой классов в.NET 2.0
Если следующее содержится в файле с именем app.config
<config>
<appSettings>
<add key="Foo" value="Hello World!"/>
</appSettings>
</config>
Я знаю, что могу получить доступ к приложению
// this returns "Hello World!"
ConfigurationManager.AppSettings["Foo"]
Однако, если файл называется app1.config
(или любое другое имя) Я не могу получить доступ к appSetting. Пока я понимаю, с ConfigurationManager.OpenExeConfiguration
Я должен прочитать пользовательские файлы настроек конфигурации.
Configuration conf = ConfigurationManager.OpenExeConfiguration(@"..\..\app1.config");
// this prints an empty string.
Console.WriteLine(conf.AppSettings.Settings["Foo"]);
тем не мение conf.AppSettings.Settings["Foo"]
возвращает пустую строку.
Я также попробовал следующий код, но безуспешно
ExeConfigurationFileMap exeFileMap = new ExeConfigurationFileMap();
exeFileMap.ExeConfigFilename = System.IO.Directory.GetCurrentDirectory()
+ "\\App1.config";
Configuration myConf = ConfigurationManager.OpenMappedExeConfiguration
(exeFileMap, ConfigurationUserLevel.None);
// returns empty string as well
Console.WriteLine(myConf.AppSettings.Settings["Foo"]);
Как прочитать настройки из файла, который не называется app.config?
2 ответа
Я создал собственный файл myCustomConfiguration и изменил его свойство Copy to Output Directory на true
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Foo" value="Hello World!"/>
</appSettings>
</configuration>
В CS файл
static void Main(string[] args)
{
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "myCustomConfiguration.config");
Dictionary<string, string> dictionary = GetNameValueCollectionSection("appSettings", filePath);
//To get your key do dictionary["Foo"]
Console.WriteLine(dictionary["Foo"]);
Console.ReadLine();
}
private static Dictionary<string, string> GetNameValueCollectionSection(string section, string filePath)
{
var xDoc = new XmlDocument();
var nameValueColl = new Dictionary<string, string>();
var configFileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath };
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
string xml = config.GetSection(section).SectionInformation.GetRawXml();
xDoc.LoadXml(xml);
XmlNode xList = xDoc.ChildNodes[0];
foreach (XmlNode xNodo in xList.Cast<XmlNode>().Where(xNodo => xNodo.Attributes != null))
{
nameValueColl.Add(xNodo.Attributes[0].Value, xNodo.Attributes[1].Value);
}
return nameValueColl;
}
Хотя это работает, но я также ищу лучший подход.
Вы должны использовать файл настроек, он более удобен в использовании, имеет методы сохранения и загрузки, и вы можете называть его как хотите. Например. мой файл настроек называется "EditorSettings.settings", и я получаю доступ к его свойствам, например:
MyNamespace.MyProject.EditorSettings.Default.MyProperty1