处理多个配置文件实例的最佳方法?

rea*_*der 9 .net c# configuration

我们运行一个用C#.NET 3.5编写的复杂系统,包含20多个网站,10多个Windows服务以及各种计划任务和帮助应用程序.

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

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

我们在Web.config/App.config中尝试了AppSettings文件/ configSource属性,但这些属性只适用于相对路径,而不是跨项目.我们考虑在machine.config中保存默认值,但这是一项任务,过于混乱,并且充满了与我们的项目无关的重要内容.

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

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

在.NET中是否有建议的行业标准方法来解决这个问题?

小智 2

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

我知道在我们公司,因为我们有在 webfarms 中运行的站点,所以我们会将配置存储在数据库中,然后如果我们需要更改某些内容,我们将使用数据库脚本更新配置。无需推送到站点,只需重新启动站点或触摸 web.config 即可强制重新加载。

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

所以我想我要说的是,如果他们都在同一家公司/影响范围内,那么您可以使用对他们来说至关重要的数据库,只需使用数据库即可。

不要污染注册表。