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环境。
假如我们要常常发布到测试服务器上,测试服务器和开发时候的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, 关键是这一段
这段代码要释放出来的。
<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.
到这里已经就完成了多环境发布配置问题了,而不需要每次发布都要修改配置。
这只是解决了发布时的问题,细心的同学应该发现我上面还提到了调试。
其实有时候为了还原bug可能要链接不同的环境进行测试,怎么样可以在程序编译的时候就进行选择不同的配置呢?
首先找到当前项目
用记事本打开拉到最下面:
加入红框中的这段话就可以了。
先看看原始的配置
web.config的配置为:
web.debug.config的配置为:
web.Test.config的配置为:
这时只要选择
选择重新生成解决方案,
选择替换,web.config配置就会被替换为web.test.config中的配置了,如下图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新加一个键值
在选择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成为修改后的目标文件,本身是只读的,不允许修改,只允许生成,同时也不签入到版本库。
有兴趣的同学可以自行去查询 Web.Config Transformation的具体语法。
ASP.NET 多环境下配置文件web.config的灵活配置的更多相关文章
- ASP.NET 多环境下配置文件web.config的灵活配置---转
注意:本功能在.Net Core中已经不可用,暂时需手动修改web.config中的信息,或者将其设置在appsettings.XXX.json中,然后再使用web.config中的环境变量来制定使用 ...
- .NET Framework 项目多环境下配置文件web.config
解决jenkins自动构建发布的问题,统一从git/svn库中获取项目文件,根据不同配置编译发布到多个运行环境中. 转自:https://www.cnblogs.com/hugogoos/p/6426 ...
- ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-下)
还是接着上一篇说起,在上两篇中主要和大家探讨了ConfigSection的几种常用形式,并举例几个例子说明了一下.其实它们主要都是继承System.Configuration.Configuratio ...
- asp.net夜话之十一:web.config详解
转:http://blog.csdn.net/zhoufoxcn/article/details/3265141 在开发中经常会遇到这样的情况,在部署程序时为了保密起见并不将源代码随项目一同发布,而我 ...
- [web.config]如何灵活使用配置文件
摘要 在实际项目中,经常遇到比较多的环境,比如开发环境,测试环境,生产环境.对于这些环境,可能会有不同接口调用,不同的数据库连接字符串等等.那么该如何实现不同环境的参数快速切换呢?当然,最笨的方式就是 ...
- ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-上 )
ConfigSections的结构 首先我们先回顾一下ConfigSections的结构和它子节点的说明,如下: 1: <configSections> 2: <sectionGro ...
- .NET下对Web.config与App.Config的增删改操作的代码
把代码过程常用的内容做个收藏,下边代码段是关于 .NET下对Web.config与App.Config的增删改操作的代码. <?xml version="1.0" encod ...
- ASP.NET MVC环境下实现一个网站多个网站模板的方法
asp.net mvc下实现多个网站模板的方法,让ASP.NET一个网站有多套网站模板,不用的场景下使用不用的mvc 模版. 比如有默认,红,蓝,绿几种网站模板,客户可以根据自己喜好选择自己喜欢的网 ...
- [转]WinForm和WebForm下读取app.config web.config 中邮件配置的方法
本文转自:http://blog.csdn.net/jinbinhan/article/details/1598386 1. 在WinForm下读取 App.config中的邮件配置语句如下: Con ...
随机推荐
- VUE浏览器储存封装
import {isFunction, extend} from 'lodash' const _originStorage = function () { var pluses = /\+/g fu ...
- ;。【】DAY14、递归,匿名函数
一.三元运算符 三元运算符也称三目运算符,就是if .....else.....语法糖 前提:if 和 else 只有一条语句 例:a = 20 b = 30 res = a if a > b ...
- Java BitSet使用场景和示例
一.什么是BitSet? 注:以下内容来自JDK API: BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个boolean值.用非负的整数将BitSet的位编入索引.可以对每个编 ...
- git安装和GitHub使用
一.git安装 1.git下载 https://github.com/git-for-windows/git/releases/tag/v2.17.1.windows.2 在如上地址下载git,并安装 ...
- 洛谷P4178 Tree (算竞进阶习题)
点分治 还是一道点分治,和前面那道题不同的是求所有距离小于等于k的点对. 如果只是等于k,我们可以把重心的每个子树分开处理,统计之后再合并,这样可以避免答案重复(也就是再同一个子树中出现路径之和为k的 ...
- python学习日记(内置、匿名函数练习题)
用map来处理字符串列表 用map来处理字符串列表,把列表中所有水果都变成juice,比方apple_juice fruits=['apple','orange','mango','watermelo ...
- UOJ#310.【UNR #2】黎明前的巧克力(FWT)
题意 给出 \(n\) 个数 \(\{a_1, \cdots, a_n\}\),从中选出两个互不相交的集合(不能都为空),使得第一个集合与第二个集合内的数的异或和相等,求总方案数 \(\bmod 99 ...
- Android popupwindow 失去焦点或者点击空白区域时消失的解决方法
先来看下Android API 的这个Methods: public void setOutsideTouchable (boolean touchable) Controls whether the ...
- Mock8 moco框架如何返回一个cookie信息
还是用之前的startupWithCookies.json这个文件,直接往里面添加上面的一个代码: [ { "description":"这是一个会返回cookies信息 ...
- Hibernate报错,关于配置的SessionFactory找不到问题
最近写项目使用hibernate默认的dtd,在启动项目时经常会出现这个问题,hibernate报错,配置factory的id找不到,找不到mapping配置文件, 不能读取配置的xml文件 Coul ...