Web.config 自动替换值

时间:2022-06-14 17:21:15

开发项目中,有些可能会改变的值,如是否记录日志,记录日志路径等,我们都会配置在Web.config的<appSettings></appSettings>节点,

也比如数据库的连接,我们会配置在Web.config的<connectionStrings></connectionStrings>节点。

但是每个开发都会遇到部署的情况,部署的环境可能还不止一套,每个环境连接的数据库都不同,appSettings节点中配置的值可能也不同,如果每次都靠手动去修改这些值,效率非常低下,

那么问题来了,如何改变这种效率低下的情况呢?

其实强大的微软早就为我们准备好了方案,就是利用xdt:Transform和xdt:Locator这两个属性。

不知道大家有没有发现,新建一个MVC项目后,配置文件Web.config有两个嵌套的文件,一个是Web.Debug.config,一个是Web.Release.config,前者是Debug模式使用,后者是Release(发布)模式使用

Web.config 自动替换值

那么下面就分场景讲解一下如何利用xdt:Transform,xdt:Locator来提升效率

场景1:替换appSettings节点中的某个值

Debug模式下的appSettings配置:

Web.config 自动替换值

但发布到Release环境时,我需要将value值修改为456789,那么只需要打开Web.Release.config文件,添加如下的代码:

<appSettings>
    <add key="WeChat:appid" value="456789" xdt:Transform="Replace" xdt:Locator="Match(key)" /></appSettings>

此时发布项目后,会看到生成的Web.config中,value的值自动变成了456789

Web.config 自动替换值

场景2:替换整个appSettings节点中的值

Debug模式下的appSettings配置:

Web.config 自动替换值

但发布到Release模式时,我需要替换所有节点的值,那么只需要打开Web.release.config,添加如下的代码:

<appSettings xdt:Transform="Replace">
    <add key="WeChat:appid" value="456789" />
    <add key="WeChat:secret" value="secret20170630" />
</appSettings>

此时发布项目后,会看到生成的Web.config中,所有节点的值都被替换了

Web.config 自动替换值

场景3:替换connectionStrings节点某个数据库连接

Debug模式下的appSettings配置:

<connectionStrings>
    <add name="myDB" connectionString="Data Source=.;Initial Catalog=DebugDBName;Persist Security Info=True;User ID=sa;Password=sa;Connect Timeout=120;" providerName="System.Data.SqlClient" />
</connectionStrings>

但发布到Release模式时,我需要替换数据库名为ReleaseDBName,那么只需要打开Web.release.config,添加如下的代码:

<connectionStrings>
    <add name="myDB" connectionString="Data Source=.;Initial Catalog=ReleaseDBName;Persist Security Info=True;User ID=sa;Password=sa;Connect Timeout=120;"
         providerName="System.Data.SqlClient" xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>

此时发布项目后,会看到生成的Web.config中,数据库名字已经被替换了

Web.config 自动替换值

本篇博客先总结这三种场景,后续如有其它场景,再持续更新该博客,希望对新人有些帮助,大牛可直接忽略……