[web.config]如何灵活使用配置文件

 摘要

在实际项目中,经常遇到比较多的环境,比如开发环境,测试环境,生产环境。对于这些环境,可能会有不同接口调用,不同的数据库连接字符串等等。那么该如何实现不同环境的参数快速切换呢?当然,最笨的方式就是,发布前,针对不同的环境,注释放开注释的操作。这也是经常使用的方法,如果环境较少,这种还可以应付,如果环境较多,或者那天不在状态,发布的时候,忘记注释放开某些注释,就造成不必要的麻烦。

如何解决

配置文件中Transformation,可以快速解决环境切换带来的麻烦。

一个例子

新建一个测试mvc应用

在上面可以看出,默认站点创建的时候,有两种配置文件,debug和release。分别对应下面两种环境:

发布的时候,切换到release环境,那么就是使用的Web.Release.config配置文件。

添加生成环境配置,选择上图的配置管理器

新建配置

名称为Produce

1、查看web.config内容,比如这里有这样的一个数据库连接字符串

1
2
3
<connectionStrings>
  <add connectionString="debugconn............" name="mydb"/>
</connectionStrings>

2、查看web.produce.config

复制代码
<?xml version="1.0" encoding="utf-8"?>

<!-- 有关使用 web.config 转换的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    在下例中,“SetAttributes”转换将更改 
    “connectionString”的值,以仅在“Match”定位器 
    找到值为“MyDB”的特性“name”时使用“ReleaseSQLServer”。
    
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <connectionStrings>
    <add name="mydb"
      connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      
      在下例中,“Replace”转换将替换 
      web.config 文件的整个 <customErrors> 节。
      请注意,由于 
      在 <system.web> 节点下仅有一个 customErrors 节,因此不需要使用“xdt:Locator”特性。
      
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>
复制代码

xdt:Transform="Replace":转换规则为替换。
xdt:Locator="Match(name),:匹配规则,匹配name
那么就是用Web.Produce.config中的这个配置节用来替换web.config中name为mydb的配置项。

测试

发布站点

选择Produce配置文件,然后发布,查看发布后的web.config文件,是否替换成功。

通过上图,你会发现,发布后使用的是我们希望的数据库连接字符串。

Transformation常用语法

可参考这篇文章:

ASP.NET 4.0 新特性--Web.Config Transformation(原创)

总结

 通过这种方式,虽然刚开始规则有些麻烦,但是麻烦一次,受益终身不是么。如果还考,注释,然后释放注释的操作,每次都要操作,对新来的小伙伴无疑是非常坑的。

posted @   wolfy  阅读(696)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
历史上的今天:
2015-02-01 Linq之Expression高级篇(常用表达式类型)
点击右上角即可分享
微信分享提示