MSBuild入门

简介: MSBuild是什么? MSBuild全称(Microsoft Build Engine),是用于构建应用程序的平台。您可能不知道它,但是如果您在使用VS做开发,那么一定时时刻刻在使用它。因为是它在背后为你管理生成你的项目文件。

MSBuild是什么?

MSBuild全称(Microsoft Build Engine),是用于构建应用程序的平台。您可能不知道它,但是如果您在使用VS做开发,那么一定时时刻刻在使用它。因为是它在背后为你管理生成你的项目文件。当新建一个项目时,注意下项目文件夹中的*.*proj文件就是为MSBuild提供的,这是个文本文件,基于XML格式,里面包含有项目所包含的文件,生成配置,输出配置等信息。当把一个文件或者图片等添加到项目中,就会在这里添加一个描述,反之则删除一个描述信息;在项目属性页所做的配置也会在这里存储。

为何去了解MSBuild

想去了解这个源于以前学WPF时的疑惑(当时就想从MSBuild下手了,一直没精力,拖到现在),因为不知道XAML为何就跑到生成的程序集,以及这个XAML标记最后变成什么,WPF是如何处理这些XAML标签与C#代码的?一般写代码时我都会清楚的知道这个代码最后经由编译器变成了什么,这样心里比较底。但是这个XAML,是看不透,看不透就心里堵得慌,不踏实,我比较喜欢刨根问底,所以就想到通过这个入口探个究竟。

我想从MSBuild中得到什么

第一解决我上面说疑惑;
第二理解项目中这些文件是如何组织在一起并生成最终程序的(就像在WPF上Build是生成出来exe,而WP7则是出来一个XAP包,为何?);
第三了解到为止,以看懂理解为目的,不做深入研究。

MSBuild基本概念

MSBuild有四个基本块(属性、项、任务、目标):

MSBuild属性:   属性是一些键/值对,主要用来存储一些配置信息。
MSBuild   项:   主要是存储一些项目文件信息,以及文件的元数据信息(如版本号)。
MSBuild任务:   Build过程中的一些原子操作(如CSC、MakeDir)
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:

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帮助文档。https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild

作者: Blackheart
目录
相关文章
|
关系型数据库 Go
106【GoLand-基础2】(四)
106【GoLand-基础2】
82 0
|
Go 索引 容器
106【GoLand-基础2】(二)
106【GoLand-基础2】
40 0
|
开发工具
AndroidStudio插件开发(进阶篇之Editor)
AndroidStudio插件开发(进阶篇之Editor)
AndroidStudio插件开发(进阶篇之Editor)
|
Java API PHP
AndroidStudio反编译调试实战
AndroidStudio反编译调试实战
576 0
|
存储 传感器 人工智能
开发环境配置整理大全——Visual Studio 2022安装篇
Visual Studio是微软的集成开发环境(IDE),以Windows为主的平台开发的一套功能全面而强大的IDE,支持C#、F#、VB、C/C++、HTML等36 种语言的开发。 开发人员常使用的开发工具之一,Visual Studio今年出了最新版本的2022款,像我们之前常使用的是Visual Studio 2019。2022版本还是挺香的。
开发环境配置整理大全——Visual Studio 2022安装篇
|
IDE 开发工具 Android开发
Python IDE之Pydev: 基于Eclipse搭建python的编译环境(Eclipse+pydev)简介、安装、使用的详细攻略
Python IDE之Pydev: 基于Eclipse搭建python的编译环境(Eclipse+pydev)简介、安装、使用的详细攻略
|
Java 开发工具 Android开发
AndroidStudio笔记(2)插件介绍
前言 Android Studio作为基于IDE的专业开发Android的开发工具,插件市场为我们提供了各种方便快捷、提高工作效率的插件,本文记录一些比较常用的插件。
1450 0