目前我可以根据构建配置轻松设置 Web.config 转换,例如使用connectionString=server;..
forDebug
和connectionString=./SQLExpress;..
for Release
。
但是是否可以基于 Web 发布配置文件进行一些 Web.config 转换?即connectionString=server1;..
用于配置文件Server1
和connectionString=server2;..
用于Server2
?
目前我可以根据构建配置轻松设置 Web.config 转换,例如使用connectionString=server;..
forDebug
和connectionString=./SQLExpress;..
for Release
。
但是是否可以基于 Web 发布配置文件进行一些 Web.config 转换?即connectionString=server1;..
用于配置文件Server1
和connectionString=server2;..
用于Server2
?
我们将所有机器/配置文件特定的配置保存在单独的配置文件中,然后使用 configSource 像这样包含它们......
<connectionStrings configSource="cstrings.config"/>
这种方式 Web.config 是相同的,不需要任何转换。我们对连接字符串、smtp 设置和应用程序设置执行此操作。
我们对 Web.config 和“机器特定”文件进行版本控制,例如 cstrings.config.production、cstrings.config.staging 等。
一旦你有了这个结构,就很容易为不同的配置文件生成图像。我们在每台机器上都有部署脚本,它们读取环境变量并进行适当的部署。例如,登台服务器构建脚本将 cstrings.config.staging 复制到 cstrings.config 等。
可能有一种稍微不同的方法来做到这一点。
在您的生产服务器上,在每台生产机器上的 c:\windows\system32\drivers\etc\hosts 文件中为 customdb 创建一个虚拟条目。每一个都指向您希望该机器使用的数据库。然后你只需要指向 connectionString=customdb; 适用于所有生产服务器。
唯一的缺点是您需要访问主机文件,并且需要您使用 db.
希望这可以帮助
我相信发布配置文件独立于构建配置文件,这有点遗憾,因为您很容易意外地将调试配置部署到生产服务器。
但是,如果您使用的是 MSDeploy,则可以在其中修改 web.config。有关更多详细信息,请参阅MSDeploy - 部署包后更改连接字符串参数。