假设我有一个大型.NET解决方案,其中包含一些其他项目类型使用的数据访问项目,例如控制台应用程序和Web应用程序。我希望他们都能够使用数据访问项目,但数据访问应用程序必须从其配置文件中获取配置...所以web.config用于web项目,app.config用于控制台/服务应用程序。这使得我必须在两个或多个单独的配置文件中维护配置,这是我不喜欢的。 将他们带入集中位置的最佳方式是什么?
我希望它仍然是轻量级的,因此配置数据库可能过度。我想也许是一个集中的配置文件,当构建相应的项目时,它会被构建过程复制到web.config / app.config,但我想确保我不会错过某个地方的另一个最佳实践。我也考虑过machine.config,但是我想尽可能地隔离配置,以免潜在地破坏给定机器上的其他应用程序。而且,通过使用machine.config,我必须想办法让构建脚本自动远程更新该文件。
答案 0 :(得分:2)
一些可能的解决方案:
如果要将所有解决方案部署到同一个地方(例如Web服务器/服务器场),您可以使用machine.config
文件存储公共数据访问配置,例如连接字符串。< / p>
将您的常用配置拆分为单独的配置文件(例如common.config
),并使用主配置文件中的configSource
属性指向常用配置文件。如果您使用某种源代码控制,这应该允许您在项目之间共享公共文件,因此所有使用它的人都会选择对其进行一次更改。
答案 1 :(得分:1)
该模型运行良好 - 我们大多数更重要的应用程序都是具有多个Web和命令行应用程序需要共享一些相同配置信息的多头应用程序。一个好方法是滥用配置元素的configSource
属性来打破特定应用程序部分的“中心”部分。
答案 2 :(得分:0)
这个怎么样:
在数据访问项目的配置文件中定义“dev / staging / production”设置
让客户(应用)定义他们想要使用的设置类型,例如
... = DataAccess.UserGateway.Create(DataAccess.Config.Dev);
和不同配置名称的字符串常量只在一个地方定义 - DataAccess模块。
另一方面,我在构建/部署时复制配置很多 - 它太干净了。