博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET 多环境下配置文件web.config的灵活配置---转
阅读量:5952 次
发布时间:2019-06-19

本文共 2851 字,大约阅读时间需要 9 分钟。

注意:本功能在.Net Core中已经不可用,暂时需手动修改web.config中的信息,或者将其设置在appsettings.XXX.json中,然后再使用web.config中的环境变量来制定使用的具体appsettings文件。

转自:https://www.cnblogs.com/hugogoos/p/6426887.html

调试,发布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环境。

 

 

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

 

  1,首先添加Test配置

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

 

 

也可以从这而进入添加

 

 

  2,添加Test config Transformation文件

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

 

 

  3. 修改Web.Test.config文件

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

 

 

  这段代码要释放出来的。

 

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

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

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

 

  4. 检查发布的结果

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

 

 

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

 

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

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

 

  首先找到当前项目

 

 

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

 

 

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

  先看看原始的配置

  web.config的配置为:

 

 

  web.debug.config的配置为:

 

 

  web.Test.config的配置为:

 

 

  这时只要选择

 

 

  选择重新生成解决方案,

 

 

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

 

 

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

 

 

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

  如下图在Debug新加一个键值

 

 

  在选择Test重新生成一次

 

 

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

 

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

 常用语法

参考博客 

1 :locator属性

下面有个表,来详细列举locator的语法

(1)Match;

这里你需要就是在你直接匹配的属性名。     

Engine会再你的Web.config中找到匹配name为Norhwind的就用上面的配置文件图替换。 

(2)Condition 
基于XPath,在Locator中应用有逻辑性的判断表达式。

上面就是Name属性匹配‘Norhwind’的或providerName匹配System.Data.SqlClient的配置文件节点都会被替换。 

(3)XPath 
这个就是直接写XPath,,这里是XPath的标准

这里你会发现,这里可以写一些列的表达式。

2: Transform 属性

(1) Replace 

表示所有匹配的节点都是替换

其实这里描述文件时web.release.config,将要替换的文件时Web.config . 

(2) Remove 
删除第一匹配的元素。

(3)RemoveAll

删除所有匹配的元素

(4)Insert

插入从父节点中插入,(authorization中插入<deny users="*" />)

(5)SetAttributes

直接设置Attributes

(6)RemoveAttributes 

删除出Attributes

(7)InsertAfter (XPath) 

通过匹配 XPath的表达式的,找到节点,并子节点后面插入 XML

(8)InsertBefore (XPath) 

通过匹配 XPath的表达式的,找到节点,并子节点前面插入 XML

(9)XSLT (filePath)

可以在外部定义 XSLT文件,来替换Web.cofig文件。

 

转载于:https://www.cnblogs.com/ceci/p/9814396.html

你可能感兴趣的文章
php无法连接mysql(selinux)
查看>>
[面试专题]Vue.js 2.0 独立构建和运行时构建的区别
查看>>
React 初探
查看>>
如何让产品用户拥有一流的上传体验
查看>>
前端性能优化——http首部
查看>>
FreeRTOS(一)——任务管理
查看>>
移动端网页怎么做?
查看>>
第5章 高效的多线程日志
查看>>
协议 - 收藏集 - 掘金
查看>>
Kotlin教程 - 收藏集 - 掘金
查看>>
deferred对象
查看>>
2017年3月份前端资源分享
查看>>
Node学习记录: 图片爬虫
查看>>
cookie与session的区别与联系
查看>>
黄东旭:When TiDB Meets Kubernetes
查看>>
有趣的6种图片灰度转换算法
查看>>
Spring Boot 框架介绍和使用
查看>>
使用Angular与TypeScript构建Electron应用(二)
查看>>
Reactjs不能忽略的key
查看>>
关于lazyman你还应该知道这几件事
查看>>