2010-01-08 98 views
9

我们运行一个用C#.NET 3.5编写的复杂系统,包含20多个网站,10多个Windows服务以及各种计划任务和辅助应用程序。处理多个配置文件实例的最佳方法?

其中每个都与我们的一个或多个框架和业务逻辑DLL捆绑在一起。 这些DLL有大量的配置设置,这已经变成了一场噩梦,我们为相同类库的多个实例维护了超过40个配置文件。

由于各种原因,我们不会在GAC注册我们的DLL: 1)我们喜欢在不重建整个系统或导致不必要的停机时间的情况下快速推出对选择性项目的更改的灵活性。 2)某些DLL的实例需要略微不同的配置;例如一些项目使用不同的连接字符串,通知电子邮件地址等。

我们使用Web.config/App.config中的AppSettings file/configSource属性进行了实验,但这些属性仅适用于相对路径,不适用于项目。 我们考虑将默认值保存在machine.config中,但这是一项任务,太杂乱,充满了与我们项目无关的重要内容。

我们当前的“解决方案”是使用我们自己的配置文件格式,它首先检查当前项目的“bin”文件夹中的配置,如果不存在,则从硬编码的中央位置加载。这允许我们在必要时覆盖设置,但在其余时间使用默认设置。

我们最终想要的是在一个中心位置的每个类库的默认设置,然后每个实例可以有一个可选的配置文件,该文件只覆盖那些与默认不同的设置。

在.NET中有没有一种建议的,行业标准的解决这个问题的方法?

+3

我可以声称没有这方面的专业知识,但这不是什么注册表是什么?我相信它有它自己的问题,但想知道它是否应该被视为解决方案? – 2010-01-08 01:47:52

+0

做所有这些运行在同一台服务器上? – Amirshk 2010-01-08 01:57:17

+0

(免责声明:这件事情我写的):有一个类似的线程上此:http://stackoverflow.com/questions/1987013/how-to-setup-web-config-for-build-to-multi-environments- without-code-changes/2024921#2024921,我写了一篇关于我写在那里的工具,这可能也会帮助你。 FWIW。 – 2010-01-08 02:09:36

回答

2

如果这一切都在同一个公司内,为什么不把配置存储在数据库中?我相信企业框架甚至有可以插入的适配器来做到这一点。

我知道在我们公司,因为我们有网站在webfarms运行,我们将配置存储在数据库,然后如果我们需要改变的东西,我们将有一个DB脚本更新配置。无需推送到网站,只需重新启动网站或触摸web.config强制重新加载。

我们为其他项目提供的另一个解决方案是使用一个数据库,其中包含关键值对以及其他类型的配置数据,这样我们也可以轻松地在使用相同组件的我们的网站/窗体表单项目中更改内容。

所以我想我要说的是,如果他们是所有的影响,例如,你可以使用一个数据库,是中央对他们都只是使用DB同一公司/范围内。

不要注意注册表。

+0

+1上运行 - 我只是写我公司正是这么做的,当约书亚张贴了他的答案。配置存储为序列化类,可以以各种方式存储(工作站+应用程序,应用程序全局等)。 – TrueWill 2010-01-08 02:09:03

0

我会使用OpenExeConfiguration(http://msdn.microsoft.com/en-us/library/ms224437.aspx)并让每个应用程序/ dll打开2个配置,第一个是默认设置,第二个是覆盖。

你可以保持默认设置在“中心”位置,授予读取访问所有的应用程序给它,并让本地CONFIGS位于靠近你的应用程序。

0

您是如何部署这些网站和应用程序的,您的系统中的这些模块是否在同一台机器上运行,并且这些模块是否从特定目录调用DLL?

如果在同一台机器上可以使用配置文件,如果在服务器场中,您可能需要数据库,正如之前提到的Joshua。

如果你只需要重写一些配置部分通用配置文件,您可以从中央位置第一加载默认值,并加载在每个项目的具体配置,然后修改运行时配置对象。

+0

将站点/应用程序sftp部署到每个项目的单独文件夹中,位于同一台服务器上。我们很快将通过它自己的所有应用程序和配置副本将负载平衡到第二台相同的服务器。当我想到一个服务器场时,一个简单的键/值数据库开始听起来很不错。 – realworldcoder 2010-01-08 15:28:28

相关问题