3

我看到了有关 .NET 中自定义配置的简单示例。我的情况有点复杂,有嵌套节点。

我希望能够从配置文件中读取它:

 <environments>

<environment name="live" url="http://www.live.com">
  <server name="a" IP="192.168.1.10"></server>
  <server name="b" IP="192.168.1.20"></server>
  <server name="c" IP="192.168.1.30"></server>      
</environment>

<environment name="dev" url="http://www.dev.com">
  <server name="a" IP="192.168.1.10"></server>
  <server name="c" IP="192.168.1.30"></server>
</environment>

<environment name="test" url="http://www.test.com">
  <server name="b" IP="192.168.1.20"></server>
  <server name="d" IP="192.168.1.40"></server>
</environment></environments> 

如果有人可以为此提供一些代码,我将不胜感激。

谢谢!

4

7 回答 7

9

您可以通过实现从 ConfigurationElement 类继承的自定义配置类来阅读此内容。

这是“服务器”元素的示例:

public class ServerElement: ConfigurationElement
{
    [ConfigurationProperty("name", IsRequired = true, IsKey = true)]
    public string Name
    {
        get { return ((string)base["name"]); }
        set { base["name"] = value; }
    }

    ...
}

environment 元素实际上是一个集合,可以这样实现:

public class EnvironmentElement: ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement(string elementName)
    {
        return new ServerElement(...);
    }
}
于 2009-04-08T14:04:03.187 回答
7

我最近遇到的一个漂亮工具是CodePlex 上的配置部分设计器。很好地集成到 VS 中。

生成类、XML 模式等。推荐。

于 2009-04-08T14:16:19.943 回答
6

您需要创建一些类来处理配置文件的自定义配置部分。

Phil Haack 有一篇非常好的博客文章:3 个简单步骤中的自定义配置部分。

编辑:

我试图找到我过去用来学习如何实现这一点的代码项目文章,我在 Phil 的博客条目中找到了它:

在这里揭开 .NET 2.0 配置的奥秘

它包含处理嵌套元素和集合所需的信息。

于 2009-04-08T14:06:47.050 回答
1

此示例可能会有所帮助:创建自定义配置部分处理程序 (MSDN)

于 2009-04-08T14:05:09.737 回答
0

查看示例的内容(针对不同的登台环境),而不是动态读取配置文件,您可能希望查看web 部署项目,如对先前问题的回答中所示。

他们在部署时处理配置合并:一个好主意,特别是如果您有敏感信息,例如带有服务帐户密码的连接字符串......

于 2009-04-08T14:12:50.703 回答
0

我会使用 App.Config 文件

System.Configuration.ConfigurationSettings.AppSettings["DatabasePath"];

http://www.eggheadcafe.com/community/aspnet/2/10004734/appconfig-file-c.aspx

于 2009-04-08T15:30:46.990 回答
0

这是我在阅读本文后最近实现的:

使用反射将类绑定到 .ini 文件

http://dvuyka.spaces.live.com/blog/cns!305B02907E9BE19A!174.entry

于 2009-04-08T16:45:40.163 回答