zoukankan      html  css  js  c++  java
  • 如何让VS根据编译环境选择相应的配置文件

    其实微软还是蛮有创造力的,一个配置文件居然弄了这么多的形式,从原来的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任务如下:

    1 <Target Name="AfterBuild">
    2     <Delete Files="$(TargetDir)$(TargetFileName).config" />
    3     <Copy SourceFiles="$(ProjectDir)app.$(Configuration).config"
    4           DestinationFiles="$(TargetDir)$(TargetFileName).config" />
    5 </Target>

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

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

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

    1 public partial class Form1 : Form
    2     {
    3         public Form1()
    4         {
    5             InitializeComponent();
    6             label1.Text = System.Configuration.ConfigurationManager.AppSettings["ILoveSleep"];
    7         }
    8     }

    下面是运行结果:

    Debug模式下

    Release模式下

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

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

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

  • 相关阅读:
    做好技术的量的累积,实现业绩的质的飞跃|专访宜信财富技术负责人刘宝剑
    深入理解MySQL索引
    程序的一生:从源程序到进程的辛苦历程
    Serializable详解(1):代码验证Java序列化与反序列化
    关于Java序列化的问题你真的会吗?
    Dubbo源码解析之SPI(一):扩展类的加载过程
    [C#] 命令总线模式
    C#构造函数在继承时必须要求与父类型构造函数入参相同怎么办?
    如何通过JavaScript构建Asp.net服务端控件
    Javascript iframe交互并兼容各种浏览器的解决方案
  • 原文地址:https://www.cnblogs.com/ILoveSleep/p/3181044.html
Copyright © 2011-2022 走看看