MSBuild基本概念

  • MSBuild是什么
  • 为什么要了解MSBuild
  • 我想从MSBuild中得到什么
  • MSBuild 基本概念
    • 项目文件
      • 属性
      • 任务
      • 目标
    • MSBuild 问题
      • 1.error MSB1009

MSBuild是什么

MSBuild 全称 Microsoft Build Engine,代表 Microsoft 和 Visual Studio 的新的生成平台,用于生成应用程序。此引擎为项目文件提供了一个 XML 架构,用于控制生成平台处理和生成软件的方式。 Visual Studio 会使用 MSBuild,但它不依赖于 Visual Studio。 通过在你的项目或解决方案文件中调用 msbuild.exe,你可以在未安装 Visual Studio 的环境中安排和生成产品。
Visual Studio 使用 MSBuild 来加载和生成托管项目。 Visual Studio 中的项目文件(.csproj、.vbproj、vcxproj 等)包含 MSBuild XML 代码,当你使用 IDE 来生成项目时,此代码就会运行。 Visual Studio 项目会导入所有必要的设置和生成过程来执行典型的开发工作,但你可以从 Visual Studio 内或通过使用 XML 编辑器对其进行扩展或修改。
在 VS 开发中,在背后为你管理生成你的项目文件。当新建一个项目时,注意下项目文件夹中的*.*proj文件就是为MSBuild提供的,这是个文本文件,基于XML格式,里面包含有项目所包含的文件,生成配置,输出配置等信息。当把一个文件或者图片等添加到项目中,就会在这里添加一个描述,反之则删除一个描述信息;在项目属性页所做的配置也会在这里存储。
MSBuild 在如何处理和生成软件方面是完全透明的,使开发人员能够在未安装 Visual Studio 的生成实验室环境中组织和生成产品。

为什么要了解MSBuild

跑程序的时候碰到和这个有关的问题,对它一窍不通,所以不知道怎么解决,想认真学习一下。

我想从MSBuild中得到什么

1.MSBuild的基本概念。(√)
2.MSBuild的运行原理。(X)
3.解决从MSBuild产生的相关问题。

MSBuild 基本概念

项目文件

MSBuild 使用基于 XML 的项目文件格式,既简单又可扩展。 MSBuild 项目文件格式允许开发者描述要生成的项,以及如何针对不同的操作系统和配置生成这些项。 另外,这种项目文件格式还允许开发人员创作可重用的生成规则,这些规则可以包含到不同的文件中,以便可以在产品内的不同项目之间一致地执行生成。
以下各节介绍了 MSBuild 项目文件格式的一些基本元素。

属性

属性表示可用于配置生成的键/值对。 属性的声明方式是:创建一个与属性同名的元素,将其指定为 PropertyGroup 元素的子元素。

// 创建一个名为 BuildDir 的属性,其值为 Build。
<PropertyGroup>  <BuildDir>Build</BuildDir>
</PropertyGroup>

通过在元素中放置一个 Condition 属性,你可以有条件地定义一个属性。 除非条件的计算结果为 true,否则会忽略条件元素的内容。

//定义 Configuration 元素(如果尚未定义)
<Configuration  Condition=" '$(Configuration)' == '' ">Debug</Configuration>

在整个项目文件中,可以使用语法 $ (PropertyName) 来引用各个属性。 例如,可以使用 $(BuildDir) 和 $(Configuration) 来引用前面示例中的属性。

项是生成系统的输入,通常表示文件。 将根据用户定义的项名称,将项编组到各种项类型中。 这些项类型可以用作任务的参数,任务使用各个项来执行生成过程的步骤。
项目文件中项的声明方法是:通过创建一个与项类型同名的元素,并将其指定为 ItemGroup 元素的子元素。

//创建一个名为 Compile 的项类型,其中包括两个文件。
<ItemGroup>  <Compile Include = "file1.cs"/>  <Compile Include = "file2.cs"/>
</ItemGroup>

在整个项目文件中,可以使用语法 @(ItemType) 来引用项类型。 例如,可以使用 @(Compile) 引用示例中的项类型。
在 MSBuild 中,元素和特性名称区分大小写。 但是,属性、项和元数据名称不区分大小写。

//创建了项类型 Compile、comPile 或任何其他大小写变体,并为其指定了值“one.cs;two.cs”。
<ItemGroup>  <Compile Include="one.cs" />  <comPile Include="two.cs" />
</ItemGroup>

可以使用通配符声明项,并且对于更高级的生成方案,项可以包含其他元数据。

任务

任务是 MSBuild 项目用于执行生成操作的可执行代码单元。 例如,任务可能编译输入文件或运行外部工具。 任务可以重用,并且可由不同项目中的不同开发人员共享。
任务的执行逻辑在托管代码中编写,并使用 UsingTask 元素映射到 MSBuild。 你可以通过创作一个实现 ITask 接口的托管类型来编写自己的任务。
MSBuild 包含一些可按需进行修改的常见任务。 例如,用于复制文件的复制、用于创建目录的 MakeDir 以及用于编译 Visual C# 源代码文件的 Csc。
通过创建一个与任务同名的元素,并将其指定为 Target 元素的子元素,以在 MSBuild 项目文件中执行此任务。 任务通常接受参数,参数将作为元素的特性进行传递。 MSBuild 的属性和项都可用作参数。

//调用 MakeDir 任务,并将前面示例中声明的 BuildDir 属性的值传递到该任务。
<Target Name="MakeBuildDirectory">  <MakeDir  Directories="$(BuildDir)" />
</Target>

目标

目标按特定的顺序将任务组合到一起,并将项目文件的各个部分公开为生成过程的入口点。 目标通常分组到各个逻辑部分中,以便提高可读性并实现扩展。 通过将生成步骤拆分为目标,你可以从其他目标中调用生成过程的一个部分,而不必将那部分代码复制到每个目标中。 例如,如果生成过程的多个入口点需要生成引用,你可以创建一个生成引用的目标,然后从所要求的每个入口点运行此目标。
目标是使用 Target 元素在项目文件中声明的。

// 创建一个名为 Compile 的目标,该目标随后将调用具有前面示例中声明的项列表的 Csc 任务。
<Target Name="Compile">  <Csc Sources="@(Compile)" />
</Target>

在更高级的方案中,目标可用于描述彼此之间的关系并执行依赖性分析,这样,如果目标是最新的,则可以跳过生成过程的整个部分。

MSBuild 问题

1.error MSB1009

MSBUILD : error MSB1009: Project file does not exist.
问题描述:项目文件不存在。
确保项目文件在所使用的文件夹中,比如修改运行程序保存的文件夹位置。
这样的错误,一般是配置中”构建“中的”MSBuild Build File“的地址有错误。 ”源码管理“下的”Subversion“中的”Repository URL“中的SVN地址与下边的”构建“中的”MSBuild Build File“的地址拼接起来,应该与你*.csproj文件的地址一样,这样就不会出现这样的错误。

1
2
3
4
5 问题

【整理】MSbuild相关推荐

  1. CCNET+MSBuild+SVN实时构建的优化总结

    本文不是介绍如何使用CCNET+MSBuild+SVN构建自动编译系统,相关的内容可以从很多地方获取,可以再园子里搜一下. 随着我们的SVN库日益壮大,容量达到10G,几十G 甚至更大时,我们发现自动 ...

  2. VS2013 加快编译速度 的方法整理

    VS2013 加快编译速度 的方法整理 1.更改项目设置 项目|属性|C/C++|代码生成|启用最小重新生成:Yes(/Gm) 项目|属性|C/C++|常规|调试信息格式:程序数据库(/Zi) 项目| ...

  3. 用MSBuild.... DailyBuild和软件开发流程的东东

    看到CoolBug在研究有关NAnt的东东,感觉非常的有趣,也来聊聊这个问题,聊聊我喜欢的MSBuild,关于MSBuild 我想JJX比我更有发言权,很早的时候他的WebLog就有记载MSBuild ...

  4. 汇编指令入门级整理 | 原力计划

    作者 | AlbertS 出品 | CSDN 博客 前言 我们大都是被高级语言惯坏了的一代,源源不断的新特性正在逐步添加到各类高级语言之中,汇编作为最接近机器指令的低级语言,已经很少被直接拿来写程序了 ...

  5. Linux操作系统汇编指令入门级整理知识点

    前言 我们大都是被高级语言惯坏了的一代,源源不断的新特性正在逐步添加到各类高级语言之中,汇编作为最接近机器指令的低级语言,已经很少被直接拿来写程序了,不过我还真的遇到了一个,那是之前的一个同事,因为在 ...

  6. zz:用MSBuild.... DailyBuild和软件开发流程的东东

    看到CoolBug在研究有关NAnt的东东,感觉非常的有趣,也来聊聊这个问题,聊聊我喜欢的MSBuild,关于MSBuild 我想JJX比我更有发言权,很早的时候他的WebLog就有记载MSBuild ...

  7. Map再整理,从底层源码探究HashMap

    前言 本文为对Map集合的再一次整理.内容包括:Map HashMap LinkedHashMap TreeHashMap HashTable ConcurrentHashMap Map Map< ...

  8. List再整理,从代码底层全面解析List(看完后保证收获满满)

    前言 本文为对List集合的再一次整理,从父集接口Collection到顶级接口Iterable再到线程不安全实现类:ArrayList.LinkedList,再到线程安全实现类:Vector(被弃用 ...

  9. LeetCode简单题之整理字符串

    题目 给你一个由大小写英文字母组成的字符串 s . 一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件: 若 s ...

最新文章

  1. 小雨坐地铁--[最短路分层建图+虚点]
  2. c++ fork 进程时 共享内存_因为没答好进程间通信,面试挂了...
  3. 如何解决pip更新问题
  4. linux删除目录是显示非空,Linux删除非空目录
  5. vb php mysql_VB连接MYSQL数据的方法
  6. “约见”面试官系列之常见面试题之第四十七篇之前端页面的组成(建议收藏)
  7. Linux安装MariaDB(Mysql)和简单配置
  8. windows php7 apache,windows系统下php7+apache2.4环境搭建
  9. cxpacket_如何避免CXPACKET?
  10. 实战:SpringMVC实现用户角色管理
  11. 10分钟教你用scratch做一款小游戏,玩游戏不如自己做游戏
  12. 【转载】DIY新浪微博Android手机客户端(一)(二)(三)完
  13. mysql mod如何使用_MySQL MOD()用法及代码示例
  14. 数据分析利器之hive优化十大原则
  15. AD19技术笔记-常用PCB设计思路-布线篇(一)
  16. 刷题笔记之十 (小易的升级之路+找出字符串中第一个只出现一次的字符+洗牌+MP3光标位置)
  17. 小学教师计算机模块报哪些,小学计算机教师个人工作总结
  18. 使用NTS理解细粒度图像分类
  19. RocketMQ 分布式事务消息过程分析
  20. 今天写的新员工转正PPT主要内容

热门文章

  1. mybatis逆向工程和批量插入
  2. 数学小抄:线性回归与协方差
  3. vs编译报错error MSB3191无法创建目录
  4. 3D LUT Creator 软件+教程
  5. 实例化的对象没有prototype属性
  6. 67.深度解密网络项目五:线上和线下营销结合的“社交零售”和“社区团购”
  7. rtsp协议开发指南
  8. C#实用教程-操作xml文件
  9. 2000年趋势网络软件竞赛 (初赛题目)
  10. 解决Chrome浏览器不能访问https网站的问题 阿星小栈