如何在没有代码更改的情况下为多环境构建web.config?

时间:2009-12-31 20:34:38

标签: asp.net architecture

我最近在一个非常有趣的环境中开发了一个应用程序。这个应用程序有6或7个并行级别,开发人员只能触及前2个级别。作为公司政策的一部分,所有构建都是作为Tivoli软件包完成的,并且设置非常复杂。

最后一个问题是,在第一级或“Dev”服务器之后不允许更改代码,因此web.config包含环境变量的多个加密部分。构建应用程序是为了感知IIS中设置的路径和变量所处的环境。

这是一个维持这种类型问题的简单或更好的架构的野兽?

4 个答案:

答案 0 :(得分:1)

嗯,(免责声明:我会谈谈我写的东西

你的主题似乎与帖子略有不同,但我想我知道你的意思。我正在编写的工具dashy允许您处理单个代码库,并允许您为各种环境配置它。然而,对这些环境设置安全限制。但是,根据您的源代码控制和一般系统,它可能是有意义的。你应该从主页上的图片中合理地了解它的工作方式。也许它很有意思,也许不是,但它是我们用来管理不同环境的部署。这是目前正在进行的工作(“beta”),但目前的版本适合测试。

答案 1 :(得分:1)

最新版本的ASP.NET现在支持Web配置转换,允许您更改项目中的特定设置以进行部署,测试或暂存。这是一个很棒的intro by Tom Hundley

答案 2 :(得分:0)

您是否尝试使用OpenExeConfiguration的{​​{1}}并明确加载适当环境的正确配置,而不仅仅使用默认ConfigurationManager

有关详情,请查看OpenExeConfiguration on MSDN

答案 3 :(得分:0)

您可以在Web配置中包含所有环境的所有配置,并在其键前添加适当环境的计算机名称。然后,使用Server.MachineName(或以其他方式识别运行该应用程序的服务器),您可以访问正确的配置。

<appSettings>
<add key="DEVMACHINENAME_baseURL" value="http://dev.foo.com" />
<add key="QAMACHINENAME_baseURL" value="http://qa.foo.com" />
</appSettings>

没有人必须进入并修改web.config中的任何内容,因为应用程序可以查找自己的信息。