我们经常在用vs2005做项目的时候会把一个项目分成几个模块(不管是对于功能上,还是系统构架上面),为的是以后部署,还有修改维护时候的方便。这样就会带来一个问题,随着模块的增加(这里所说得每个模块就是指每个项目),我们如果依赖IDE的话,每次都得从源代码管理器读取最新得版本,进行编译。然而IDE加载得时候会加载很多必须得文件,这样就大大浪费了时间。再有就是我们不能一次都把这些项目都编译了。我们不得不重复着打开编译这样的顺序。这里也许大家会想到nant,但是nant不支持.net2.0(听说是被微软收购了...)不管怎样MS给我们提供了具有同样功能的工具:MSBuild ,该工具位于:(前提是装了FW2.0)C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe。该工具和ant一样都是按照它一个按照它约定的xml文档来进行解析编译。庆幸的是我们编译项目的时候不需要去编写这个xml文档(用ant的时候我们经常会编写一个.build文件)当然我们也可以去写。vs2005的项目文件(.sln)我们可以用notepad看到,它就是一个xml文档,而且规格完全符合msbuild所需要的文档结构。由此我不得不佩服MS整合的厉害。
        下面我就利用批处理结合Msbuild实现快速编译,假设我们的项目Project目录下包含3个部分,第一部分为实体项目(目录名称为Entities,项目名称为Entities.sln,第二部分为业务逻辑(目录为Business,项目名称为Business.sln),第三部分为UI(目录为UI,项目名称为UI.sln)。编译顺序为先编译Entities再编译Business最后才能编译UI。
我们在project下面建一个bat批处理文件。在里面编写批处理代码
@echo off
echo Delete the output directory!
rd Release /s/q
rd Debug  /s/q
echo Building Entities.sln, please wait a minute...
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe" Entities\Entities.sln  
/t:rebuild 
/p:configuration=Debug  >Entities.log
echo Building Entities.sln Complete!

echo Building Business.sln, please wait a minute...
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe" Business\Business.sln  
/t:rebuild 
/p:configuration=Debug  >Business.log
echo Building Business.sln Complete!

echo Building UI.sln, please wait a minute...
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe" UI\UI.sln  
/t:rebuild 
/p:configuration=Debug  >UI.log
echo Building UI.sln Complete!

到这里就结束了
前面三行是清空输入路径。
需要解释的是MsBuild后面的参数/t是taget :可以是Rebuild。
 /property:<n>=<v>  设置或重写这些项目级属性。<n> 为
                    属性名,<v> 为属性值。请使用
                    分号或逗号分隔多个属性,或者
                    分别指定每个属性。(缩写为: /p)
                    示例:
                      /p:configuration=Debug;OutDir=bin\Debug\
OutDir就是指明了Release或者Debug的输出路径,如果不设置就是用IDE中给该项目设置的路径。
>Business.log是输入日志。在里面可以看到项目编译成功或者失败的信息。

利用批处理结合Msbuild实现快速编译的更多相关文章

  1. 使用roslyn代替MSBuild完成解决方案编译

    原本我是使用批处理调用 MSBuild 完成解决方案编译的,新版的 MSBuild 在 Visual Studio 2015 会自带安装. 当然在Visual Studio 2015 中,MSBuil ...

  2. 利用 Create React Native App 快速创建 React Native 应用

    本文介绍的 Create-React-Native-App 是非常 Awesome 的工具,而其背后的 Expo 整个平台也让笔者感觉非常的不错.笔者目前公司是采用 APICloud 进行移动应用开发 ...

  3. 快速编译system.img、userdata.img、boot.img的方法

    快速编译system.img和boot.img的方法 快速编译system.img,可以使用这个命令: #make systemimage 快速编译boot.img,可以使用以下命令: #make b ...

  4. 利用sublime的snippet功能快速创建代码段

    在前端开发中我们经常会输入相同的一些基本代码,例如常用的jquery引用,bootstrap框架,cssreset等等,如果每次使用时在复制粘贴感觉很麻烦,这里介绍一种更为简洁的方法 利用sublim ...

  5. C#利用 string.Join 泛型集合快速转换拼接字符串

    C#利用 string.Join 泛型集合快速转换拼接字符串 List<int> superior_list = new List<int>(); superior_list. ...

  6. [UE4]使用UnrealVS扩展快速编译C++代码

    一.如果UE4 编辑器已经打开,则VS中的重新生成项目将不能使用,一定要关了UE4 编辑器才可以.一般不是有VS自身的编译UE4的C++代码 二.epic提供了UnrealVS扩展,可以快速编译C++ ...

  7. mtcp的快速编译(连接)

    mtcp的快速编译 http://mos.kaist.edu/guide/config/03_build_mtcp.html 介绍DPDK中使用mtcp的文档 https://dpdksummit.c ...

  8. 快速编译system.img和boot.img的方法【转】

    本文转载自:http://www.cnblogs.com/wanqieddy/archive/2012/10/22/2734024.html 快速编译system.img,可以使用这个命令: #mak ...

  9. win10 uwp 使用 msbuild 命令行编译 UWP 程序

    原文:win10 uwp 使用 msbuild 命令行编译 UWP 程序 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http:// ...

随机推荐

  1. day33 GIL锁 线程队列 线程池

    1.    全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行.虽然 Python 解释器中可 ...

  2. Sqlite和mysql的区别及优缺点

    小型嵌入式,跟mysql差不多,但更小,功能也少,属于本地数据库多用于读多写少,100W以下的数据压力不大,不支持分布式.   真正开源的小型嵌入式数据库,支持事务.触发器器  性能至少优于mysql ...

  3. spring @Transactional事务失效

    不开事务几种情形 ① @Transactional写在了private方法上 org.springframework.transaction.interceptor.AbstractFallbackT ...

  4. 问题:eclipse中线程编程编译报错,undefined reference to 'pthread_create'的解决方法(已解决)

    问题描述: 在Ubuntu系统中,使用eclipse CDT集成开发环境编写pthread程序,编译时,pthread_create不通过,报错信息是: undefined reference to ...

  5. my.ZC

    1.100级,裸身,满技能,属性模拟 数据:   大唐 方寸 化生 龙宫 普陀 地府 狮驼 魔王   气血 1200 1900 2600 1200 2600 2600 1900 1900   魔法 7 ...

  6. cpp中memset函数的注意点

    可参考: C++中memset函数的用法 C++中memset函数的用法 C++中memset()函数的用法详解 c/c++学习系列之memset()函数 透彻分析C/C++中memset函数 mem ...

  7. cannot focus element解决方案

    If you enconter error "cannot focus element" when using Selenium+Python in Chrome to input ...

  8. leetcode 620. Not Boring Movies 用where语句判断

    https://leetcode.com/problems/not-boring-movies/description/ 不管题目简不简单,现在先熟悉语法. 直接用where语句判断即可,判断奇偶可以 ...

  9. c++ 面试整理

    1. 继承方式 public    父类的访问级别不变 protected    父类的public成员在派生类编程protected,其余的不变 private        父类的所有成员变成pr ...

  10. Ubuntu上的相关问题

    一.解决Ubuntu中vi命令的编辑模式下不能正常使用方向键和退格键的问题 在Ubuntu中,进入vi命令的编辑模式,发现按方向键不能移动光标,而是会输出ABCD,以及退格键也不能正常删除字符.这是由 ...