其实微软还是蛮有创造力的,一个配置文件居然弄了这么多的形式,从原来的ini到现在的xml,总而言之让我们这些在微软殿堂里的程序员翘着屁股追赶。

微软最新的配置文件实际上就是个xml文件,以后缀名.config表示,但是在VS中默认只有一个配置文件,app.config或者web.config,有时我们想添加自己命名的配置文件却感觉很乏力,我这篇博客就是来介绍下如何让VS能够按照我们的意愿使用配置文件。

使用情景:我们现在有两套WCF服务,一个是测试服务,一个是正式服务,我们想让VS在Debug模式下选择包含测试服务的配置文件,在Release模式下选择包含正式服务的配置文件。

这里使用的技术是MSBuild,在VS自带的MSDN中有详细阐述,这项技术主要用于定制VS的编译过程

本篇博客主要参考了文章http://icelava.net/forums/thread/2920.aspx,如果打不开就翻墙吧!

首先新建一个WinForm项目,在项目中添加两个配置文件app.Debug.config和app.Release.config(如果有自带的App.config,可将其删除),并在两个配置文件中添加测试数据

然后打开项目所在文件夹,用文本编辑器打开项目文件,在这里我推荐Notepad++,当然你可以根据个人习惯选择自己喜欢的编辑器。

注意:千万不要用写字板打开,因为写字板会改变文件的换行符,使程序不能正确加载配置文件

打开文件最后处会看到下面一段注释的内容,意思很清楚就不用解释了

  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->

修改AfterBuild任务如下:

 <Target Name="AfterBuild">
<Delete Files="$(TargetDir)$(TargetFileName).config" />
<Copy SourceFiles="$(ProjectDir)\app.$(Configuration).config"
DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>

这段代码的意思就是在Build完成时候,删除目标文件夹下的xxx.config文件,并根据当前配置环境将项目文件夹中对应的config文件内容复制至目标文件夹,保存名称为相应的xxx.config。

编辑完成后保存,这是VS会提示

点击“重新加载”即可,然后在Form1中添加测试代码:

 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
label1.Text = System.Configuration.ConfigurationManager.AppSettings["ILoveSleep"];
}
}

下面是运行结果:

Debug模式下

Release模式下

从运行结果来看,已经达到了预期目的,现在需要做的就是在app.Debug.config中添加测试服务的配置,在app.Release.config中添加正式服务的配置,当选择Debug模式时,程序会连接测试服务,Release模式时,程序会连接正式服务!

MSBuild十分强大,用好了几乎可以对整个VS编译过程进行定制,完成自己想要的任何操作!

这里是文中简单示例的源码:WinForm.rar

如何让VS根据编译环境选择相应的配置文件的更多相关文章

  1. 在CentOS上构建.net自动化编译环境

             我们知道在Windows上我们很容易构建于MSBuild的自动化编译环境,那么在CentOS也是可以的,主要是需要Mono. 在这儿我们选择Jenkins+Gitlab+Mono在C ...

  2. sublime text 3 快捷键大全以及配置编译环境

    Sublime text 3是码农最喜欢的代码编辑器,每天和代码打交道,必先利其器,掌握基本的代码编辑器的快捷键,能让你打码更有效率.刚开始可能有些生疏,只要花一两个星期坚持使用并熟悉这些常用的快捷键 ...

  3. Mac下设置Android源代码编译环境

    在Mac下编译Android最麻烦的就是设置Android的编译环境了,做完这一步基本上剩下的就是近乎傻瓜式的操作了.说起来也简单就三步,设置大小写敏感的文件系统.安装编译工具.设置文件系统同时能打开 ...

  4. 4412开发板搭建Uboot、Kernel和Android4.0的编译环境方法

    本文转自迅为4412开发板实战教程书籍:http://www.topeetboard.com 迅为是基于Ubuntu12.04.2平台做开发,所有的配置和编译脚本也是基于此平台,没有在其它平台上测试过 ...

  5. Android编译环境折腾记

    题记:感觉是时候写点什么了=_=! 第一次安装了ubuntu14.04.5,官网下载的iso,官网下的jar,编译android4.x需要安装jdk6,更高的版本会有问题,baidu到很多搭建环境的步 ...

  6. 如何myEclipse修改工程项目的运行环境和编译环境

    修改工程运行环境(开发环境)JRE 右击工程名-----选择properties----选择对话框左侧的java build path----查看使用的JRE 选择Library选项卡中的,选中使用中 ...

  7. eclipse配置ros cakin编译环境

    先安装eclipse,之前的博客:http://www.cnblogs.com/CZM-/p/5942435.html Catkin-y 方法使用catkin无法make eclipse工程,生成pr ...

  8. windows 10环境下 使用 msys2 + vs code 配置 c++ 的编译环境

    不太多描述 msys2 与  vs code  ,既然你需要安装 一种语言的编译环境了 ,你肯定对这两个不陌生: 1. 先安装msys2; (下载多少位的msys2就安装多少位的 mingw,本人安装 ...

  9. 配置算法(第4版)的Java编译环境

    1. 下载 1.1 JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html选择“Windows x64 180.5 ...

随机推荐

  1. OpenShare vs Sharepoint

    光合信息Openshare是基于SharePoint,Exchange等开发的企业协同门户产品,许多朋友问为什么不直接就用Sharepoint建立企业门户解决方案,而要建议用OpenShare来进行? ...

  2. NGUI的原理机制:深入剖析UIPanel,UIWidget,UIDrawCall底层原理

    这是我去搜狐畅游面试时,面试官问的一个问题.问NGUI的机制原理是什么?就是这个插件是根据什么写出来的.当时没答上来,下面是我从转载过来的,可以研究研究. 之前项目中用的NGUI的版本是3.0.7 f ...

  3. SSIS_TXT有规则资料导入到EXCEL

    SSIS开发需要完全安装sqlserver.本次demo是sqlserver2008. 1.创建项目 2.解决方案打开如图所示. 3.拉取一个序列容器,一个数据流任务. 4.在数据流任务点击.拉取一个 ...

  4. sqlserver删除表数据,并让自增长id变为默认值

    例如:TRUNCATE TABLE GaituApp.dbo.Templates

  5. ios Swift ! and ?

    swift ?和!之间区别: Swift 引入的最不一样的可能就是 Optional Value 了.在声明时,我们可以通过在类型后面加一个? 来将变量声明为 Optional 的.如果不是 Opti ...

  6. NSURLSession的使用(1)

    一.创建一个Session,并且对其进行初始化 包含三种创建方式:   1.+ (NSURLSession *)sharedSession  单例模式 2.+ (NSURLSession *)sess ...

  7. 暑假集训(5)第二弹———湫湫系列故事——减肥记I(hdu4508)

    问题描述:舔了舔嘴上的油渍,你陷在身后柔软的靠椅上.在德源大赛中获得优胜的你,迫不及待地赶到“吃到饱”饭店吃到饱.当你 正准备离开时,服务员叫住了你,“先生,您还没有吃完你所点的酒菜.”指着你桌上的一 ...

  8. oracle的decimal和number的对比

    Oracle只是在语法上支持decimal类型,但是在底层实际上它就是number类型,支持decimal类型是为了能把数据从Oracle数据库移到其他数据库中(如DB2等). 因为decimal在O ...

  9. Memcached的安装(Linux)、操作、命令

    最近在整理有关分布式缓存的服务器,做了一下老牌nosql服务器memcached的学习总结.文中所述的所有安装均是在联网的情况下进行的. 序: 什么是memcached: Free & ope ...

  10. 连接Oracle数据库的OracleHelper.cs

    using System; using System.Configuration; using System.Data; using System.Data.OracleClient; using S ...