C# 如何在ASP.NET中管理应用程序配置?

C# 如何在ASP.NET中管理应用程序配置?,c#,.net,configuration,castle-windsor,boo,C#,.net,Configuration,Castle Windsor,Boo,我很难管理ASP.Net应用程序的配置,以便为不同的客户端进行部署。需要旋转的各种设置数量庞大,占用了大量时间,而当前的配置方法过于复杂,无法让我们将这一责任推到支持合作伙伴身上 有没有更好的方法来处理这个问题的建议,或者有什么好的信息来源来进行研究 我们目前的做法: Web.Config中引用的各种xml配置文件,例如AppSettings.xml 特定站点的配置保存在重复的配置文件中 包含特定于站点的数据列表的文本文件 在某些情况下,手动一次性更改数据库 温莎国际奥委会的C#配置 我们面

我很难管理ASP.Net应用程序的配置,以便为不同的客户端进行部署。需要旋转的各种设置数量庞大,占用了大量时间,而当前的配置方法过于复杂,无法让我们将这一责任推到支持合作伙伴身上

有没有更好的方法来处理这个问题的建议,或者有什么好的信息来源来进行研究

我们目前的做法:

  • Web.Config中引用的各种xml配置文件,例如AppSettings.xml
  • 特定站点的配置保存在重复的配置文件中
  • 包含特定于站点的数据列表的文本文件
  • 在某些情况下,手动一次性更改数据库
  • 温莎国际奥委会的C#配置
我们面临的具体问题:

  • 启用了不同功能的不同站点、我们必须与之交谈的不同外部服务以及不同的业务规则
  • 不同的部署类型(现场、测试、培训)
  • 配置键在不同的版本之间变化(添加、删除),这意味着我们必须更新所有重复的文件
  • 我们仍然需要能够在应用程序运行时更改密钥
我们目前对如何实现这一目标的想法是:

  • 将配置移动到动态编译的代码中(可能是Boo、Binsor或JavaScript)
  • 具有某种形式的差异/合并配置:将默认配置与实时/测试/培训配置以及特定于站点的配置组合在一起

如果使用上述配置项的代码是您管理/可以更改的代码(并且所有代码都在托管代码空间/C#中运行),我希望将获取调用设置的方法调用移植到一个类似单例的类中,该类上至少有一个GetString()方法

GetObject()可能非常有用(查看.Net XML序列化内容-美国人用“z”拼写:序列化)。。。对于很多东西都很有用,但也因为这意味着您可以开始将相关的配置项打包到商店中的单个条目中

关于使用单个存储(具有缓存访问权限的数据库表)或使用新的配置外观仅封装配置项的存储位置,这取决于您。。。对于配置,我强烈希望每个产品部署一个存储区,因为这样您就可以确切地知道在哪里查看和在哪里进行更改。所有web服务引用(WCF或其他)都可以使用运行时提供的字符串构造和调用…:)

就键的缓存值而言,我使用自己的内存缓存(对于较小的应用程序),因为堆栈上的开销是可管理的。。。memcache之类的东西可能在这里起作用(配置存储是通过TCP/在网络某处访问的)

编辑 比如:

public class ConfigurationStore
{
    private static ConfigurationStore _instance = null;

    public static ConfigurationStore Instance {
        get {
        if(_instance == null)
        {
            _instance = new ConfigurationStore();
        }

        return _instance;
        }
    }

    public string GetValue(string key)
    {
        ....
    }

    public Object GetObject(string key)
    {
        ...
    }
}

您可以考虑查看自动化脚本,结合一些自定义.NET实用工具来操作配置密钥。

无论您走哪条路,我认为对于您的配置都有一个单一的“真实来源”的概念是有价值的。 如果您需要以特定的形式为某些组件提供配置,则可以进行复制

但为了保持理智,我认为您应该尝试在一个地方设置与应用程序相关的所有配置,然后在Web.config中设置一个定义良好的机制将其转换为条目,以及您必须支持的任何其他配置机制

根据您的支持合作伙伴的技能水平(无论他们是否会破坏XML),我想您可能还希望提供一个GUI实用程序,让他们旋转此“真理之源”配置文件中的所有旋钮,“应用”并运行转换/更新代码,以对Web.config和friends进行必要的更改

然后,为了管理不同站点/客户的配置,理论上您需要管理大约一个配置文件

注意:在ASP.NET 4.0中,将提供构建时配置转换机制(请参阅),这可能会使此任务更容易。似乎您可以将其与一些非web项目的黑客一起使用(请参阅)


但是,如果您需要在部署时进行这些更改,那么您可能需要编写自定义工具来完成此操作,尽管XDT转换似乎是您的最佳选择,因为您希望能够添加/更新/删除项。

最后,我使用了一个合并配置系统。配置文件存储在树中。加载密钥时,它首先查找最特定的版本(站点和部署类型),然后依次查找更多常规文件,直到找到密钥。我从这一切中学到的主要一点是,在源代码管理中管理所有的配置是非常有帮助的。8年后回顾我以前的StackOverflow问题,我发现这个建议是多么明智。