Web.config转换和发布配置文件之间是否可以链接?

8

目前我可以根据构建配置轻松设置基于Web.config的转换,例如对于Debug使用connectionString=server;..,对于Release使用connectionString=./SQLExpress;..

但是是否可以根据Web发布配置文件进行一些Web.config转换呢?例如对于配置文件Server1使用connectionString=server1;..,对于Server2使用connectionString=server2;..

3个回答

5
我们将所有机器/配置文件中特定的配置分别存储,然后使用configSource包含它们,如下所示...
    <connectionStrings configSource="cstrings.config"/>

这样,Web.config 文件就可以保持不变,无需进行任何转换。我们这样做是为了连接字符串、smtp 设置和应用程序设置等内容。
我们对 Web.config 和“特定于机器”的文件(例如 cstrings.config.production、cstrings.config.staging 等)进行版本控制。
有了这种结构,很容易为不同的配置生成镜像。我们在每台机器上都有部署脚本,读取环境变量并进行相应的部署。例如,暂存服务器构建脚本将 cstrings.config.staging 复制到 cstrings.config,以此类推。

你如何运行部署脚本以链接当前配置文件和适当的连接字符串? - abatishchev
@abatishcev:我们的构建服务器有测试、暂存和生产目标。会进行干净的检出(实际上是svn导出)。构建脚本“重命名${bin}/cstrings.config.${Destination} ${bin}/cstrings.config”,然后运行单元测试,压缩并通过ftp部署到目标机器。每个目标都有cstrings、smtp和appsettings配置文件在版本控制中。例如,cstrings.config.staging、smtp.config.staging、appsettings.config.staging。FYI:如果您非常注重安全性,可以将cstrings.config保留在目标机器上作为只读文件。在我们的环境中,这不是什么大问题。 - Rob

0

0

可能有另外一种略微不同的方法来完成这个任务。

在您的生产服务器上,为customdb在每台生产机器的c:\windows\system32\drivers\etc\hosts文件中创建一个虚拟条目。每个条目指向您希望该机器使用的数据库。然后,您只需要针对所有生产服务器指向connectionString=customdb;。

唯一的缺点是您需要访问hosts文件,并且需要使用一个数据库。

希望能有所帮助。


有趣。然而,另一个缺点是您无法(轻松地)对 hosts 文件进行版本控制,因为它将包含特定于机器的设置,并且它会增加部署过程的复杂性,需要写入系统路径,您通常应避免这样做。 - Abel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接