MSBuild是什么?
MSBuild入门
MSBuild是什么?
MSBuild全称(Microsoft Build Engine),是用来生成.NET程序的平台。您可能不知道它,但是如果您在使用VS做开发,那么一定时时刻刻在使用它。因为是它在背后为你管理生成你的项目文件。当新建一个项目时,注意下项目文件夹中的*.*proj文件就是为MSBuild提供的,这是个文本文件,基于XML格式,里面包含有项目所包含的文件,生成配置,输出配置等信息。当把一个文件或者图片等添加到项目中,就会在这里添加一个描述,反之则删除一个描述信息;在项目属性页所做的配置也会在这里存储。
为何去了解MSBuild
想去了解这个源于以前学WPF时的疑惑(当时就想从MSBuild下手了,一直没精力,拖到现在),因为不知道XAML为何就跑到生成的程序集,以及这个XAML标记最后变成什么,WPF是如何处理这些XAML标签与C#代码的?一般写代码时我都会清楚的知道这个代码最后经由编译器变成了什么,这样心里比较底。但是这个XAML,是看不透,看不透就心里堵得慌,不踏实,我比较喜欢刨根问底,所以就想到通过这个入口探个究竟。
我想从MSBuild中得到什么
MSBuild基本概念
MSBuild有四个基本块(属性、项、任务、目标):
一句话总结MSBuild的作用:利用配置信息对项目文件实施特定顺序的操作。
MSBuild属性
属性声明方式:

1 <?xml version="1.0" encoding="utf-8"?>
2 <!--根元素,表示一个项目-->
3 <!--DefaultTargets用于定默认执行的目标-->
4 <Project DefaultTargets="build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
5 <!--属性都要包含在PropertyGroup元素内部-->
6 <PropertyGroup>
7 <!--声明一个"linianhui"属性,其值为"hello world"-->
8 <linianhui>hello world</linianhui>
9 </PropertyGroup>
10 <!--目标-->
11 <Target Name="build">
12 <!--MSBuild提供的一个内置任务,用于生成记录信息用$(属性名)来引用属性的值-->
13 <Message Text="$(linianhui)"></Message>
14 </Target>
15 </Project>

保存此文件到d:\helloworld.xml文件。打开CMD窗口,输入MSBuild helloworld.xml:

打印出“linianhui”属性的值。MSBuild提供一些保留属性,可以方便的引用$,如$(MSBuildProjectFile)将返回项目文件的完整名(helloworld.xml)。其他的保留属性可以查阅MSDN帮助文档。
MSBuild项
项声明方式:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--项都要包含在ItemGroup元素内部-->
<ItemGroup>
<!--声明一个"CSFile"的项,Include表示引入"csfile1.cs"文件-->
<CSFile Include="csfile1.cs">
<!--Version表示项的元数据(附加信息)-->
<Version>1.0.0.0</Version>
</CSFile>
<!--也可用";"一次引入多个文件-->
<CSFile Include="csfile2.cs;csfile3.cs"/>
</ItemGroup>
<Target Name="build">
<!--@引用项的值,默认以";"分割开-->
<!--输出"csfile1.cs;csfile2.cs;csfile3.cs"-->
<Message Text="@(CSFile)"></Message>
<!--可以加第二个参数替换默认的";"分隔符-->
<!--输出"csfile1.cs+csfile2.cs+csfile3.cs"-->
<Message Text="@(CSFile,'+')"></Message>
<!--%引用项的元数据,输出"1.0.0.0"-->
<Message Text="%(CSFile.Version)"></Message>
</Target>
</Project>

MSBuild任务
上述Msaage就是一个任务,用于打印信息,常用的一些还包括CSC、MakeDir、Copy等等,大多任务都是有输出信息的,这些信息可以通过OutPut元素存储在属性或者项中。先写如下CS代码:

1 //存为d:\MSBuildDemo.cs
2 public class MSBuildDemo
3 {
4 static void Main()
5 {
6 System.Console.WriteLine("MSBuild组织编译");
7 }
8 }

然后更改项目文件如下:

1 <?xml version="1.0" encoding="utf-8"?>
2 <Project DefaultTargets="build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 <ItemGroup>
4 <!--指定要编译的文件-->
5 <CSFile Include="MSBuildDemo.cs"/>
6 </ItemGroup>
7 <Target Name="build">
8 <!--使用Csc任务,对应csc编译器-->
9 <!--Sources属性表示要编译的文件集合-->
10 <!--TargetType表示编译目标类型,对应csc编译器的/target参数-->
11 <Csc Sources="@(CSFile)"
12 TargetType="exe">
13 <!--OutputAssembly为csc的输出参数-->
14 <!--PropertyName表示把TaskParameter属性所指定的输出参数的值存储到outputExeName这个属性中-->
15 <!--Output还有一个ItemName属性,表示存储到一个项中-->
16 <Output TaskParameter="OutputAssembly" PropertyName="outputExeFileName"/>
17 </Csc>
18 <!--Message任务就可以使用csc所导出的属性outputExeFileName了-->
19 <!--输出MSBuildDemo.exe-->
20 <Message Text="$(outputExeFileName)"/>
21 <!--Exec任务可以运行带有指定程序(可加参数)或命令-->
22 <!--运行刚从MSBuildDemo.cs源文件编译好的程序-->
23 <!--运行结果为"MSBuild组织编译"-->
24 <Exec Command="$(outputExeFileName)"></Exec>
25 </Target>
26 </Project>

用MSbuild执行此项目文件,如期正确打印信息。
MSBuild目标
上面的一个例子中Target元素就是MSBuild目标,此目标按照编译源代码、打印编译好的程序文件名、执行该文件这个顺序组织了这三个任务。这就是目标所要做的事情。先简单介绍到这里吧,关于(属性、项、任务、目标)的一些扩展信息会在下一篇介绍。如有错误之处,欢迎指正!
注:以上资料全部来自MSDN帮助文档。
MSBuild是什么?的更多相关文章
- Jenkins配置MSBuild实现自动部署(MSBuild+SVN/Subversion+FTP+BAT)
所要用到的主要插件: [MSBuild Plugin] 具体操作: 1.配置MSBuild的版本 [系统管理]->[Global Tool Configuration]->[MSBuild ...
- 使用roslyn代替MSBuild完成解决方案编译
原本我是使用批处理调用 MSBuild 完成解决方案编译的,新版的 MSBuild 在 Visual Studio 2015 会自带安装. 当然在Visual Studio 2015 中,MSBuil ...
- MSBuild 编译 C# Solution
Microsoft(R) 生成引擎版本 4.6.1055.0 [Microsoft .NET Framework 版本 4.0.30319.42000] 版权所有 (C) Microsoft Corp ...
- UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包
背景 项目上需要做UWP的自动安装包,在以前的公司接触的是TFS来做自动build. 公司要求用Jenkins来做,别笑话我,之前还真不晓得这个东西. 会的同学请看一下指出错误,不会的同学请先自行脑补 ...
- MSBuild的简单介绍与使用
MSBuild 是 Microsoft 和 Visual Studio的生成系统.它不仅仅是一个构造工具,应该称之为拥有相当强大扩展能力的自动化平台.MSBuild平台的主要涉及到三部分:执行引擎.构 ...
- Jenkins学习九:Jenkins插件之构建MSBuild
Jenkins是Java语言编写的,一直好奇是否可以构建NET语言的项目,目前只了解到有一个插件MSBuild支持构建NET项目. 一.Jenkins安装插件MSBuild 二.VS构建CsharpH ...
- CCNET+MSBuild+SVN实现每日构建
最近开始将源代码迁移到SVN,于是便考虑到如何从SVN定期获取源码,自动编译并部署以减轻工作量并提高工作效率.通过多方搜集资料并进行研究,基本实现了这个功能.对于每日构建的概念就不具体展开了,可以在各 ...
- Msbuild项目集成右键菜单编译
DS1.背景: 我们为什么要将VS2008命令行编译.sln文件集成到右键菜单呢? 原因一:VS2008很好很强大,但太费系统资源了,尤其是在虚拟机在里面装VS2008的时候更是如此. 原因二:有 ...
- 集成Visual Studio/MSBuild的开发/发布流程和 FIS3
谁不想让自己的网站速度更快?为此需要多方面的优化,但优化又会增加开发工作量.Fis3 是很不错的前端优化工具,能够让前端的优化变得自动方便,解决前述问题.Fis3是百度开发的,开源的,在国内比较六流行 ...
- 用msbuild构建应用
msbuild是微软提供的一个用于生成应用程序的平台,你可以通过一个xml配置文件来控制和处理你的软件工程.它也集成到了vs里面,它不依赖于vs. xml配置(架构)的组成元素: 项目文件 属性 项 ...
随机推荐
- mysql 千分位 Format
原文:mysql 千分位 Format select Format(123456789) 结果:123,456,789
- C#创建和初始化类
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace C_编辑 ...
- 将程序添加到右键菜单和图标(以记事本、UltraEdit为例)
原文:将程序添加到右键菜单(以记事本.UltraEdit为例) 如何将程序加入右键菜单,这里分别以记事本.UltraEdit为例! 以记事本程序为例: 1. 在运行中输入regedit,打开注册表,找 ...
- sdut 3-4 长方形的周长和面积计算
3-4 长方形的周长和面积计算 Time Limit: 1000MS Memory limit: 65536K 标题叙述性说明 通过本题的练习能够掌握拷贝构造函数的定义和用法: 设计一个长方形类Rec ...
- Codeforces Round #267 (Div. 2)D(DFS+单词hash+简单DP)
D. Fedor and Essay time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- ElasticSearch 与 Solr 的对比测试
ElasticSearch 与 Solr 的对比测试 本文从两个方面对ElasticSearch和Solr进行对比,从关系型数据库中的导入速度和模糊查询的速度. 单机对比 1. Solr 发布了4.0 ...
- C# 调用Webservice并传递序列化对象
原文:C# 调用Webservice并传递序列化对象 C#动态调用WebService注意要点 1.动态调用的url后面注意一定要加上?WSDL 例如:string _url = "ht ...
- 安卓CTS官方文档之兼容性测试套件简介-attach
官方英文文档原文:https://source.android.com/compatibility/cts-intro.html Compatibility Test Suite 兼容性测试套件 H ...
- Wowza流媒体Live直播和VOD点播配置实战-attach
Wowza是当今可以说最流行的流媒体服务器之一,近来因为需要搭建相应的服务器,但又不想用camera等作真实的直播,所以想办法用媒体文件转换成直播流再提供给Wowza进行直播.这里把该设置步骤以及设计 ...
- 一步一步实现基于Task的Promise库(一)Promise的基本实现
如果我们现在有一个需求,大概是先读取一个文件的内容,再把得到的内容传给后台去解析,最后把解析后的结果再保存到那个文件,按照最原始的做法代码就是下面这个样子的: //读取文件的原始内容 var read ...