[Learn Note] MSBuild
1 基本定义
属性是键/值的配对,相应于:
环境变量项目文件自身中的定义使用 /p 传递给 msbuild.exe 的命令行参数
2 项
<Item Type="FilesToCompile" Include="file1.cs"/> <Item Type="FilesToCompile" Include="file2.cs"/> <Item Type="FilesToCompile" Include="file3.cs"/>
<Item Type="FilesToCompile" Include="*.cs"/>
<Item Type="FilesToCompile" Include="file1.cs;file2.cs;file3.cs" />
<Item Type="FilesToCompile" Include="*.cs" Exclude="Bad*.cs"/>
3 任务和属性
项可以用作任务的输入。相应的 XML Task 元素有一个强制的属性:它的 Name 属性。您为该属性设置的值会告诉引擎要执行的任务的种类。MSBuild 提供了几个现成可用的任务,例如 Copy、Csc、Exec、MakeDir、MSBuild、ResGen 和 Vbc。
<Item Type="FilesToCompile" Include="*.cs"/> <Target Name="BuildHelloWorldExecutable"><Task Name="csc" Sources="@(FilesToCompile)"OutputAssembly="HelloWorld.exe"TargetType="exe"/> </Target>
<Project><Property ExecutableName="HelloWorld" /><Property OutputPath="bin" /><Item Type="FilesToCompile" Include="*.cs"/> <Target Name="BuildHelloWorldExecutable"><TaskName="MakeDir"Directories="$(OutputPath)"/><Task Name="csc" Sources="@(FilesToCompile)" OutputAssembly="$(OutputPath)\$(ExecutableName).exe"TargetType="exe"/></Target> </Project>
4 使用条件进行选择
<PropertyGroup Condition="'$(Configuration)'=='DEBUG'"><Property OutputPath="bin\debug" />... </PropertyGroup><PropertyGroup Condition="'$(Configuration)'=='RELEASE'"><Property OutputPath="bin\release" />... </PropertyGroup>
5 Summary
属性是指定输入参数,任务是实际的过程,从属于一个特定的目标
可以改变Visual Studio MSBuild的设置,了解编译的过程 Options->Projects and Solutions->Build and Run->MSBuild…
任务就是 MSBuild 中的基本生成块。Target 将任务以特殊顺序组合在一起。它的 Name 是唯一的强制属性,因为您需要能够在命令行使用 /t 开关传递该属性,或者在 Project XML 根节点的 DefaultTargets 属性中传递该属性,这样才能使 MSBuild 知道要执行的任务。在项目文件中,Tasks 元素的定义顺序非常重要,因为 MSBuild 每次针对给定目标执行一个任务。
6 Reference:
6.1 msdn
6.2 MSBuild Overview
Post by: Jalen Wang (转载请注明出处)
转载于:https://www.cnblogs.com/jalenwang/archive/2012/02/15/2353151.html
[Learn Note] MSBuild相关推荐
- C++ Learn Note
C++ 的筆記部分 基礎部分 C++ 可變範本參數 在C++11之前,類範本和函數範本只能含有固定數量的範本參數.C++11增強了範本功能,允許範本定義中包含0到任意個範本參數,這就是可變參數範本 / ...
- SPARC Learn Note
文章目录 SPARC 笔记部分 IDA部分 SPARC指令部分 指令类型 算术/逻辑/移位指令 加载/存储说明 分行说明 常用指令 加载/存储说明 算术/逻辑指令 SETHI指令(和SET合成指令) ...
- why I need a flow learn note.
1.其实学网站学安卓也写了txt的学习笔记.然后扔着,(没有时间线和互动性),然后就没有然后了. 2.知识体系,一个月后,哎呦我擦,我会啥来着(搞了这么久,深有体会) 3.随性的学习笔记搬不上 网站 ...
- React学习笔记 - 组件Props
React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...
- 【第一次参加kaggle比赛记录-Quora Insincere Questions Classification】- Word Embedding
In summary, word embeddings are a representation of the *semantics* of a word, efficiently encoding ...
- 从 git bash 命令行中窥探人生
脚本之家 你与百万开发者在一起 众所周知,现实世界和计算机世界是不同的,但是计算机作为人类对现实世界的抽象模拟,在一定程度上,具备了现实世界的基本特征,本文将以哲学角度对比分析现实世界和计算机世界,试 ...
- Learn Git Branching Note
基础篇 1 Git Commit git commit 2 Git Branch git branch newImage git commit git checkout newImage git co ...
- msbuild FileSysExcludeFiles
<?xml version="1.0" encoding="utf-8"?> <!-- This file is used by the pu ...
- Latent dirichlet allocation note
2 Latent Dirichlet Allocation Introduction LDA是给文本建模的一种方法,它属于生成模型.生成模型是指该模型可以随机生成可观测的数据,LDA可以随机生成一篇由 ...
最新文章
- 一、Windows Server 2016 AD服务器搭建
- sourceinsight4 quicker._我要以一打十!Quicker:新一代Windows必备效率神器!
- 讲讲python使用xpath中遇到[Element a at 0x39a9a80到底是什么
- 周昌印:忘记技术 从用户与市场考虑问题
- Java面试你必须要知道的那些知识,面试建议
- 为什么私有GIT服务器上无法查看上传的代码?
- 程序员的自我修养笔记 2
- 为什么一个实例只有一个LGWR
- OSChina 周六乱弹 —— 程序猿到底有多少个不解风情的瞬间?
- 帝国7.2 php5.2,帝国CMS7.2版升级到7.5版的详细步骤方法(已测)
- 406.根据身高重建队列
- Qt编写Onvif搜索及云台控制工具
- sap设置默认登录语言
- Gtest:死亡测试
- 计算当前日期,经过一段工作日后的日期(跳过节假日)
- MonsoonRF推出新型RFID读取器,安装难度和换灯泡差不多
- 两台局域网电脑大数据传输详细教程
- 程序员,如果性格内向要做些什么?
- NAT 网络地址转换
- Linux调度器及CFS调度器