DEV Community

Ariston
Ariston

Posted on

MSBuild

MSBuild是什么?

Microsoft Build Engine,用于构建应用程序的平台,.proj文件就是MSBuild提供的,这个XML格式的文件,含有项目所包含的文件,生成配置,输出配置等。当把文件或者图片添加到项目中,就会在这里添加一个描述,反之则删除一个描述,在项目属性页作的配置也会在这里存储?(这句话没明白是什么意思)

MSBuild的基本概念

MSBuild有四个基本块(属性、项、任务、目标)
MSBuild属性:属性是一些键值对、一定要包含在PropertyGroup元素内部
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>
Enter fullscreen mode Exit fullscreen mode

这里面的DefaultTargets和xmlns都是固定的,我们就照抄就好
可以看出来,属性都是键值对,并且只在PropertyGroup内部,属性可以被引用。

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>
Enter fullscreen mode Exit fullscreen mode

我们可以看到所有的项都要包含在ItemGroup内部,其余细节见代码注释

MSBuild 任务

上面的Messgae就是一个任务,用于打印信息,大多任务都是有输出信息的,这些信息可以通过OutPut元素存储在属性或者项中,

Top comments (0)