ASP.NET 多环境下配置文件web.config的灵活配置

时间:2023-03-09 04:54:43
ASP.NET 多环境下配置文件web.config的灵活配置

  调试,发布Asp.net程序的时候,开发环境和发布环境的Web.Config往往不同,比如connectionstring等。如果常常有调试,发布的需求,就需要常常修改web.config文件,这往往是一件非常麻烦的事情。

  Web.Config Transformation能够在不同的发布环境下,产生不同的web.config文件,非常方便和实用。

  在新建的Web项目中有个默认的web.config, 还可以定义格式为web.[name].config文件, 这个配置文件定义的规则, 在发布的时候, 会对web.config文件进行修改。

  默认项目中, 会创建Web.Debug.config和Web.Release.config文件,分别对应于Debug和Release环境。

ASP.NET 多环境下配置文件web.config的灵活配置

  假如我们要常常发布到测试服务器上,测试服务器和开发时候的connectionstring是不同的,看看如何使用Web.Config Transformation来解决这个问题。

  1,首先添加Test配置

  菜单Build->Configuration Manager, 就能看到如下的配置窗口, 添加一个新的配置Test.

ASP.NET 多环境下配置文件web.config的灵活配置

也可以从这而进入添加

ASP.NET 多环境下配置文件web.config的灵活配置

  2,添加Test config Transformation文件

  在web.confg上,点击右键,Add Config Transform, VS就会为刚刚新建的Test配置新增Transformation文件 Web.Test.config

ASP.NET 多环境下配置文件web.config的灵活配置

  3. 修改Web.Test.config文件

  下面的Web.Test.config中能够替换web.config中的connectionstring, 关键是这一段

ASP.NET 多环境下配置文件web.config的灵活配置

  这段代码要释放出来的。

<add name="MyDB"   connectionString="Data Source=TestSQLServer;Initial Catalog=MyTestDB;Integrated Security=True"   xdt:Transform="Replace" xdt:Locator="Match(name)"/>

  xdt:Transform="Replace", 指的是用来做替换操作

  xdt:Locator="Match(name), 指的是匹配规则,这里是匹配name

  意思是用Web.Test.config中的这个配置节用来替换web.config中name为MyDB的配置

  4. 检查发布的结果

  选择在Test配置下publish网站,你能看到最终的web.config文件,已经实现了替换connection string.

ASP.NET 多环境下配置文件web.config的灵活配置

  到这里已经就完成了多环境发布配置问题了,而不需要每次发布都要修改配置。

  这只是解决了发布时的问题,细心的同学应该发现我上面还提到了调试。

  其实有时候为了还原bug可能要链接不同的环境进行测试,怎么样可以在程序编译的时候就进行选择不同的配置呢?

  首先找到当前项目

ASP.NET 多环境下配置文件web.config的灵活配置

  用记事本打开拉到最下面:

ASP.NET 多环境下配置文件web.config的灵活配置

  加入红框中的这段话就可以了。

  先看看原始的配置

  web.config的配置为:

ASP.NET 多环境下配置文件web.config的灵活配置

  web.debug.config的配置为:

ASP.NET 多环境下配置文件web.config的灵活配置

  web.Test.config的配置为:

ASP.NET 多环境下配置文件web.config的灵活配置

  这时只要选择

ASP.NET 多环境下配置文件web.config的灵活配置

  选择重新生成解决方案,

ASP.NET 多环境下配置文件web.config的灵活配置

  选择替换,web.config配置就会被替换为web.test.config中的配置了,如下图web.config的配置:

ASP.NET 多环境下配置文件web.config的灵活配置

  connectionString的值替换为Test中的配置了。

<Target Name="BeforeBuild">

    <TransformXml Source="Web.Debug.config" Transform="Web.$(Configuration).config" Destination="Web.config" />

  </Target>

  这句话的意思就是以Web.Debug.config里面的配置为模板,生产配置存放到web.config里面

  如下图在Debug新加一个键值

ASP.NET 多环境下配置文件web.config的灵活配置

  在选择Test重新生成一次

ASP.NET 多环境下配置文件web.config的灵活配置

  发现多了一个Debug配置的Key.

  其实在编译时支持改变配置文件会有副作用的可能会对版本控制有影响,比如,你刚改了web.config,然后你用了一个debug的配置去编译,你的web.debug.config就会自动覆盖web.config,然后你之前的修改就没了。比较理想的方式是需要一个第三方的web.base.config,所有的环境配置文件,例如web.debug.config,都基于web.base.config去修改,就是以web.base.config为模板,web.config成为修改后的目标文件,本身是只读的,不允许修改,只允许生成,同时也不签入到版本库。

  有兴趣的同学可以自行去查询 Web.Config Transformation的具体语法。