自动构建 msbuild基础
来源:互联网 发布:金蝶软件连接数据库 编辑:程序博客网 时间:2024/05/29 02:19
MSBuild是微软自Visual Studio 2005开始提供的构建平台,既可以用于VC#项目,也可用于VC++项目。
通常情况下,我们采用IDE本身进行项目的构建,有时,也会采用命令行方式调用IDE程序Build我们的项目。(对于VC++项目来说,就是通过命令行调用devenv进行构建)
然而,当我们希望在持续集成工具当中实现项目的自动构建时,尤其是当依赖情况或者部署情况较为复杂时,我们希望有一个简单、易维护的工具实现构建——MSBuild就是我们所需要的工具。
采用MSBuild进行构建,需要我们编写MSBuild脚本——一种规定格式的XML文件。
MSBuild基本组成部分包括:Target(目标),ItemGroup(项),PropertyGroup(属性),Task(任务)。
其中:Target目标是MSBuild执行的基本单元。
我们在命令行中调用MSBuild /t:TargetName指定需要执行的目标。
每个Target中可以包含若干Task。
Task是基本的功能单元:例如拷贝文件,删除文件,创建/删除目录,使用Exec调用外部程序,调用VCBuild构建.vcproj项目,调用Csc编译.cs文件,等等。此外,你还可以通过实现ITask接口,创建自定义的Task。
PropertyGroup作为属性,起着类似于变量一样的作用,可以定义一个属性,并在后续的位置使用该属性,例如:
<PropertyGroup> <ProjFile>C:\Test\test.vcproj</ProjFile> <Rebuild>true</Rebuild></PropertyGroup><Target Name=”Build”> <VCBuild Projects=”$(ProjFile)” Rebuild=”$(Rebuild)” /></Target>
ItemGroup往往作为输入,例如:
<ItemGroup> <IncFiles Include=”C:\Test\*.h” /></ItemGroup><Target Name=”Build”> <Copy SourceFiles=”@(IncFiles)” DestinationFolder=”c:\output\include”/></Target>
实例:
假设我们有一个项目A,依赖一个动态连接库B,我们需要先构建B,将B的头文件和lib文件拷贝到A的包含头文件路径和Lib路径下,再构建A,然后将A发布到指定的路径下。
B的项目结构如下:
C:\B\B.vcproj
A的项目结构如下:
C:\A
\DepInclude
\DepLib
\Src\A.vcproj
\Output
对应的MSBuild脚本如下:
<ItemGroup> <BIncFiles Include=”C:\B\*.h” /> <BLibFiles Include=”C:\B\Release\*.lib” /> <BDllFiles Include=”C:\B\Release\*.dll” /></ItemGroup><TargetName=”Build_B”> <VCBuild Projects=”C:\B\B.vcproj” Configuration=”Release” Rebuild=”true” /><Copy SourceFiles=”@(BIncFiles)” DestinationFolder=”C:\A\DepInclude”/><Copy SourceFiles=”@(BLibFiles)” DestinationFolder=”C:\A\DepLib”/></Target><Target Name=“Build_A” DependOnTargets=“Build_B”> <VCBuild Projects=”C:\A\Src\A.vcproj“ Configuration=“Release” Rebuild=”true” /></Target>
Build_A的Target使用了一个DependOnTargets属性,该属性的含义是当前Target要依赖前续的某些Targets,那些依赖的Targets必须先执行,然后才能执行当前的Target。
在本例中Build_B会rebuild整个B工程,并将结果的头文件和lib文件拷贝到A项目的依赖路径当中。
- 自动构建 msbuild基础
- 自动构造--MSBuild和Team Foundation Build基础
- 自动构造--MSBuild和Team Foundation Build基础
- ccnet +msbuild +svn 每日构建(二 )编译完成后自动发布并部署文件
- msbuild构建web应用脚本
- tfs自动编译msbuild参数
- ccnet +msbuild +svn 每日构建( 一 )
- Jenkins插件之构建与MSBuild
- Jenkins插件之构建与MSBuild
- Jenkins插件之构建与MSBuild
- .NET魔法堂:工程构建基石->MSBuild
- 从零开始构建MSBuild C#项目文件
- MsBuild
- MSBuild
- msbuild
- CruiseControl.Net+SVN+MSBuild自动编译环境
- 每日构建【Daily Build Using CruiseControl.NET and MSBuild】
- MSBuild使用3——构建C/C++项目
- Handling IRPs 4: Completing an IRP
- 开发者所需要知道的iOS7 SDK新特性
- Handling IRPs 5: Synchronous I/O Responses
- 访问存储设备
- [黑马程序员]对两个整数变量的值进行交换的方法总结
- 自动构建 msbuild基础
- Handling IRPs 6: Asynchronous I/O Responses
- WPA Supplicant 在Windows下的编译
- JAVA I/O(一) File类
- Ubuntu 安装 sublime text 2
- Delphi7怎么样调用系统语音库 .
- Handling IRPs 7: IoCompletion Routines and Asynchronous I/O Responses
- Handling IRPs 8: Propagating the Pending Bit
- 解决flex4 spark 找不到外观错误