自定义文件中的AppSettings
本文关键字:AppSettings 文件 自定义 | 更新日期: 2023-09-27 18:20:01
我很难在.NET 2.0 中配置和设置类
如果以下内容包含在名为app.config
的文件中
<config>
<appSettings>
<add key="Foo" value="Hello World!"/>
</appSettings>
</config>
我知道我可以通过访问appSetting
// 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的文件中读取设置?
我创建了自定义文件myCustomConfiguration并将其属性更改为复制到输出目录为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