C# 我在哪里可以找到一些开源代码来读/写配置文件?

C# 我在哪里可以找到一些开源代码来读/写配置文件?,c#,xml,configuration,configuration-files,C#,Xml,Configuration,Configuration Files,我不喜欢.NET框架中的标准配置机制。(配置经理、配置部门和其他部门) 我希望能够更简单地管理我的应用程序配置文件 例如,我想在我的应用程序文件夹中创建一个名为“设置”的文件夹。有几个名为的配置文件 请看一看: Settings: - smtp.config - database.config - something.config 假设“smtp.config”文件具有以下简单结构: <smtp> <username>something</username&g

我不喜欢.NET框架中的标准配置机制。(配置经理、配置部门和其他部门)

我希望能够更简单地管理我的应用程序配置文件

例如,我想在我的应用程序文件夹中创建一个名为“设置”的文件夹。有几个名为的配置文件

请看一看:

Settings:
- smtp.config
- database.config
- something.config
假设“smtp.config”文件具有以下简单结构:

<smtp>
  <username>something</username>
  <hostname>something</hostname>
  ...
</smtp>
我想使用我的设置对象,如:

var settings = new MySmtpSettings("smtp.config");
var hostname = settings.Hostname;
我不想使用ConfigurationSection类。看起来很难

你知道我在哪里可以找到一个可扩展的,简单的开源库吗

UPD.

@jjrdk:感谢您的回答,但使用ConfigurationSection类,我通常会创建下一个代码:

public class MyConfigurationSection : ConfigurationSection
{

  [ConfigurationProperty("username")]
  public ConfigurationTextElement<string> Username
  {
     get { return (ConfigurationTextElement<string>)this["username"]; }
     set { this["username"] = value; }
  }

  // ...
{

public class ConfigurationTextElement<T> : ConfigurationElement
{
    private T _value;
    protected override void DeserializeElement(XmlReader reader, bool serializeCollectionKey)
    {
        _value = (T)reader.ReadElementContentAs(typeof(T), null);
    }
    public T Value
    {
        get { return _value; }
    }
}
public类MyConfigurationSection:ConfigurationSection
{
[配置属性(“用户名”)]
公共配置TextElement用户名
{
获取{return(ConfigurationTextElement)this[“username”];}
设置{this[“username”]=value;}
}
// ...
{
公共类ConfigurationTextElement:ConfigurationElement
{
私人T_值;
受保护的重写void反序列化元素(XmlReader、bool serializeCollectionKey)
{
_value=(T)reader.ReadElementContentAs(typeof(T),null);
}
公共价值
{
获取{返回_值;}
}
}

它看起来并不简单。也许我做了一些我不理解的事情?

如果您不想使用,您可能需要查看一些对象序列化程序

您也可以使用许多/框架中的一个…但是如果您不喜欢ConfigurationManager背后的复杂性,我相信您会发现DI更不吸引人


作为补充说明,您甚至可以使用.Net Framework中的许多其他XML/文本读取器中的一个。即使是好的ole文件。

如果您不想使用,您可能需要查看一些对象序列化程序

您也可以使用许多/框架中的一个…但是如果您不喜欢ConfigurationManager背后的复杂性,我相信您会发现DI更不吸引人


作为旁注,您甚至可以使用.Net Framework中的XML/文本阅读器,甚至可以使用好的ole文件。

我使用了一段代码,我不知道它从哪里来,但使用Google代码搜索,我在这里找到了它:

然后我就这样使用它:

public class AppSettings : DictionaryConvertible
{
    public AppSettings() { 
       // For unit testing
    }

    public AppSettings(ISettingsProvider settingsProvider) 
        : base(settingsProvider) {}        

    public string MyStringSetting { get; set; }
    public int MyIntSetting { get; set; }
    public bool MyBooleanSetting { get; set; }
}
这是在IoC场景中使用的设置,但您可能会找到一种以正常方式使用它的方法

我通常只需在IoC容器中配置ISettingsProvider,然后配置AppSettings类。然后,我可以将该类注入任何需要设置的组件中。如果我想将配置设置类分组到逻辑集合中,我还可以将其拆分为几个类


如果您想读取与web.config中的AppSettings不同的设置,只需实现另一个ISettingsProvider。我曾为SQL Server创建过一个ISettingsProvider。

我使用了一段代码,我一开始不知道它来自何处,但使用Google代码搜索,我在这里找到了它:

然后我就这样使用它:

public class AppSettings : DictionaryConvertible
{
    public AppSettings() { 
       // For unit testing
    }

    public AppSettings(ISettingsProvider settingsProvider) 
        : base(settingsProvider) {}        

    public string MyStringSetting { get; set; }
    public int MyIntSetting { get; set; }
    public bool MyBooleanSetting { get; set; }
}
这是在IoC场景中使用的设置,但您可能会找到一种以正常方式使用它的方法

我通常只需在IoC容器中配置ISettingsProvider,然后配置AppSettings类。然后,我可以将该类注入任何需要设置的组件中。如果我想将配置设置类分组到逻辑集合中,我还可以将其拆分为几个类


如果您想读取与web.config中的AppSettings不同的设置,只需实现另一个ISettingsProvider。我曾为SQL Server创建过一个ISettingsProvider。

编写ConfigurationSectionHandler并不难;只需遍历XML中的节点即可,在配置时,这些节点作为参数提供给您Manager调用您的代码。您可以编写一个方法(可能还有几个助手)来返回配置所需的数据结构。对于简单XML,该方法也可以非常简单。请参阅中的示例

用作

var config = ConfigurationManager.GetSection("smtp") as MailConfiguration;

编写ConfigurationSectionHandler并不困难;只需遍历XML中的节点,当ConfigurationManager调用您的代码时,这些节点作为参数提供给您返回配置所需的数据结构。对于简单XML,该方法也可以非常简单。请参阅中的示例

用作

var config = ConfigurationManager.GetSection("smtp") as MailConfiguration;

我建议你重新考虑一下你对ConfigurationSection类的看法。这并不难,而且完全符合你的要求。将其视为一种学习体验。你不喜欢.NET Framework中的标准配置机制有什么?@RQDQ:它需要大量代码来描述类和文件之间的链接。我建议重新思考您对ConfigurationSection类的看法。这并不难,而且完全符合您的要求。将其视为一种学习体验。您不喜欢.NET Framework中标准配置机制的哪些方面?@RQDQ:它需要大量代码来描述类和文件之间的链接。我喜欢DataContrac但是,DataContractSerializer的一个缺点(特别是对于可能在记事本中手动编辑的配置文件)xml元素必须按字母顺序排列。这是出于性能原因,但对于配置文件来说并不直观。这是非常正确的。对于配置文件,我也避免使用它,因为它不支持xml属性(没有自定义序列化程序)。XmlSerializer对我来说非常有趣。我将尝试它