.net 实战 根据configuration选项生成不同的config文件
项目开发过程中都会遇到的问题,开发环境的配置肯定是和生产环境不一样的,
一直都是重复手动拷贝,但是配置太多拷贝的弊端就显现出来了,
为了解决这个问题可以有几种方案:
1.Web.config Transformation
Transformation的相关知识点可以参考下面的文章,
这个东西有个不好的地方,就是只有在publish的时候才执行,在开发调试期间是不起作用的,
所以一般应用在网站发布期间
https://msdn.microsoft.com/en-us/library/dd465326(v=vs.110).aspx
http://www.cnblogs.com/worksguo/archive/2009/08/29/1556307.html
2.MSBuild 在BuildBefore事件中应用XslTransformation
示例代码: https://github.com/xlb378917466/MSBuild_BuildBefore
知识点学习:http://www.cnblogs.com/shanyou/p/3452938.html
这个功能很强大,这里使用了BuildBefore事件,这样在开发调试期间就可以获取到修改之后的配置,
<Target Name="BeforeBuild">
<XslTransformation Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'" XslInputPath="Debug.xslt" XmlInputPaths="WebTemplate.config" OutputPaths="Web.config" />
<XslTransformation Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'" XslInputPath="Release.xslt" XmlInputPaths="WebTemplate.config" OutputPaths="Web.config" />
</Target>
这里定义了两个xslt文件用来输出最终的web.config文件,当然你要自己定义一个原始的输入文件WebTemplate.config,
这个例子简单的APPSetting中的值根据实际的Configuration进行修改
<appSettings>
<add key="Mode" value="Release" />
</appSettings>
Debug.Xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/configuration/appSettings/add[@key='Mode']">
<add key="Mode" value="Debug"/>
</xsl:template>
</xsl:stylesheet>
Release.Xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/configuration/appSettings/add[@key='Mode']">
<add key="Mode" value="Release"/>
</xsl:template>
</xsl:stylesheet>
3.通过Symbols(条件编译)来使用C#代码控制
参考之前的一篇文章:条件编译
这种做法一般是在加载其他XML之类的配置时才用得到,至少我是这个时候用的
.net 实战 根据configuration选项生成不同的config文件的更多相关文章
- Thinkphp5.0实战开发二------自动生成目录结构
序言 ThinkPHP5.0 具备自动创建功能,可以用来自动生成需要的模块及目录结构和文件等,自动生成主要调用\think\Build 类库.ThinkPHP5.0中模块文件夹在application ...
- 用Hibernate Tools生成Hibernate Mapping映射文件
Eclipse中要集成安装Hibernate Tools组件 如果没有,请查看:Eclipse juno 中安装 JBoss Tools,集成Hibernate 一.确定环境: 1.Maven3.0. ...
- 图文介绍MyEclipse (2015) 中创建简单的Maven项目的步骤(用于生成可运行jar文件)
利用MyEclipse的引导,能够非常方便的创建简单的.用于生成可运行jar文件的Maven项目: (原创文章,转载请注明转自Clement-Xu的博客:http://blog.csdn.net/cl ...
- myeclipse(2015)中创建简单的Maven项目的步骤(用于生成可执行jar文件)------》myeclipse2015
利用MyEclipse的引导,可以很方便的创建简单的.用于生成可执行jar文件的Maven项目: 1.New -> Project... 选择 Maven Project, 点击Next > ...
- Eclipse+Axis自动生成Web Service WSDL文件
JDK版本:1.5.0_22 Eclipse版本:Helios Service Release 2(3.6.2) 首先创建一个web工程,创建过程如下: 如果选择Apache Tomcat v5.5, ...
- 在MDK中怎样生成*.bin格式的文件?
在Realview MDK的集成开发环境中.默认情况下能够生成*.axf格式的调试文件和*.hex格式的可运行文件. 尽管这两个格式的文件很有利于ULINK2仿真器的下载和调试,可是ADS的用户更习惯 ...
- mybatis自动生成mapper,dao映射文件
利用Mybatis-Generator来帮我们自动生成mapper.xml文件,dao文件,model文件. 1.所需文件 关于Mybatis-Generator的下载可以到这个地址:https:// ...
- FreeMarker 生成Java、mybatis文件
FreeMarker 生成Java.mybatis文件 将mysql数据库表通过FreeMarker生成对应的Java文件和对应的mybatis文件. FreeMarker是一款模板引擎: 即一种基于 ...
- iOS - Bundle 资源文件包生成和常见资源文件使用
1.Bundle 文件 Bundle 文件,就是资源文件包.我们将许多图片.XIB.文本文件组织在一起,打包成一个 Bundle 文件.方便在其他项目中引用包内的资源. Bundle 文件是静态的,也 ...
随机推荐
- Apache2.4.x与Apache2.2.x的一些区别
改用Apache2.4一段时间了,一直没发现它和Apache2.2的有什么区别,一些基本配置都是差不多,直到前几天配置虚拟主机是才发现了一些小小的不同 一直以来我都是在htdocs目录下配置虚拟主机的 ...
- php中的$_GET怎样获取带有井号“#”的參数
<?php echo $_GET['key']; ?> 当url为http://test.com/c.php?key=999时,正常输出:999 当url为http://test.com/ ...
- 水晶报表使用经验谈--使用sql语句直接生成dataset做为报表的数据源
概述: 上一次自己做了直接在rpt文件里使用oledb连接使用数据库的方法 但是不是很灵活 这次做了使用sql语句直接生成dataset做为报表的数据源(即push模式),这样就可以接受参数了.当然报 ...
- Android有关Volley使用(十)至Request和Reponse意识
我们知道,.网络Http沟通,会有一个Request,相同,也将有Response.我们Volley在使用RequestQueue来之前加入的请求.我们将创建一个Request对象,例StringRe ...
- Tabs - 选项卡插件
接上篇Tabs - 选项卡插件 其中12)Yet (E)Another Tab Interface没有依赖任何javascript框架,以作补充 9)Flipping C ...
- .net微软消息队列(msmq)简单案例
1.首先我们需要安装消息队列服务,它是独立的消息记录的服务,并保存在硬盘文件中. 我们添加名为:DMImgUpload的私有消息队列. 2.定义消息队列的连接字符串建议采用IP: (1)FormatN ...
- Strategic Game HDU
Strategic Game Time Limit: 20000/10000 MS (J ...
- Spire.Office for .NET(Word、Excel、PPT、PDF等)
使用Spire.Office for .NET(Word.Excel.PPT.PDF等)的初步感受 前言 本文大部分内容来自http://www.codeproject.com/Articles/71 ...
- 使用shell+awk完成Hive查询结果格式化输出
好久不写,一方面是工作原因,有些东西没发直接发,另外的也是习惯给丢了,内因所致.今天是个好日子,走起! btw,实际上这种格式化输出应该不只限于某一种需求,差不多是通用的. 需求: --基本的:当前H ...
- SZU:B54 Dual Palindromes
Judge Info Memory Limit: 32768KB Case Time Limit: 10000MS Time Limit: 10000MS Judger: Number Only Ju ...