这是我想出的解决方案,我正在向我的团队提出建议。
问题:
我们希望实施一个新标准,要求使用 web.config 转换来消除环境之间部署期间发生的人为配置错误。这要求负责创建 web.config 转换文件的人员了解每个环境的所有配置值,包括与其他环境的连接字符串的用户名和密码。基础架构团队制定了一项政策,即除了他们之外,没有人可以知道具有写入权限的数据库用户的用户名和密码。因此,我们有冲突。
建议的解决方案:
web.config 中的任何配置部分都可以指向包含该部分配置的外部文件,而不是在 web.config 文件本身中明确定义它。
例如,而不是将连接字符串部分定义为:
<connectionStrings>
<add name="conn_ExceptionManagement" connectionString="Data source=mydb;database=App_Error_Logging;uid=user;pwd=password" providerName="System.Data.SqlClient" />
</connectionStrings>
我们可以这样定义它:
<connectionStrings configSource="myApp.ConnectionStrings.config"/>
然后创建一个名为“myApp.ConnectionStrings.config”的文件,其内容如下:
<?xml version="1.0"?>
<connectionStrings>
<add name="conn_ExceptionManagement" connectionString="Data source=mydb;database=App_Error_Logging;uid=user;pwd=password" providerName="System.Data.SqlClient" />
</connectionStrings>
所以……我们可以在 Web 服务器的根目录中创建一个名为“CONFIG”的文件夹,并在其中为每个应用程序放置一个名为“myAppName.ConnectionStrings.config”的文件。在该文件中,我们将用于应用程序的所有连接字符串放在该环境中。然后,在我们的 web.config 转换中,我们没有显式更新连接字符串,而是将连接字符串配置部分更改为指向 Web 服务器上的该文件。这样,基础架构团队是唯一真正看到这些环境的连接字符串的人,我们消除了他们在部署期间修改 web.config 中的连接字符串的需要。此外,