ASP.Net - 使用单独的配置文件进行数据库和应用程序设置

时间:2014-10-06 13:01:40

标签: c# asp.net

我有一个使用Entity Framework的asp.net项目,该项目在几个不同的客户端服务器上使用。这意味着每个连接字符串和应用程序设置都有不同的web.config。 这不是问题,但我最近改变了一些改变web.config文件的东西,我手动不得不为每个客户端调整这个,我还必须在更新中排除web.config文件,以确保它们自己的文件没有被覆盖。

我想要实现的是将这些设置存储在项目可以提取和使用的另一个配置文件中。也许在Globals Application_Start上获取这些并导入它们/或者覆盖当前的web.config文件。

基本上我不想影响使用整个项目中使用的连接字符串和ConfigurationManager.AppSettings的当前代码,但我确实希望能够为每个客户端更新web.config文件并使用单独的文件对于某些设置。

注意:我无权直接发布到每个服务器,因此我不能简单地为每个服务器编写不同的部署web.config。我必须在本地发布文件,在服务器下载和自动例程存储,并相应地提取。

编辑: 请说如果这被认为是一个坏主意,但我的想法是在Global.asax Application_Start方法中添加类似的东西:

  1. 配置文件是否存在?
  2. 如果不是,请创建文件并在web.config
  3. 中附加所有当前设置
  4. 如果是,请打开并将这些设置导入当前的web.config,覆盖原始值
  5. 希望在几周后,在我要求所有客户端执行手动更新之后,他们将拥有此代码,我可以开始在更新中包含web.config。

1 个答案:

答案 0 :(得分:1)

在VS中,在Build菜单中,最后一项是Configuration Manager。

在这里,您可以指定各种不同的发布环境,每个环境都有自己的web.config转换。

这通常用于生产/登台/测试环境。但是,我没有理由不能使用它并为每个服务器/环境配置一个配置文件。

然后,您需要为每个环境创建转换,方法是右键单击web.config,然后选择Add Config Transform。

您设置的每个环境都可以覆盖主web.config中的设置。 (现在作为模板/默认设置)

e.g。 在Web.EnvironmentA.Config

<add key="ConnectionString" value="ConStringA" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>

在Web.EnvironmentB.Config

<add key="ConnectionString" value="ConStringB" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>

然后,当您进行发布时,您只需设置要使用的配置文件。如果您使用Azure或VS发布方法,它将保存每个设置,因此您可以轻松地轻松推送到相关环境。

在开始发布之前,请确保先按照您的意图对其进行测试;)