Import 元素 (MSBuild)
Import 元素 (MSBuild)
将一个项目文件的内容导入另一个项目文件。
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
以下几节描述了特性、子元素和父元素。
特性
|
特性 |
说明 |
|---|---|
|
Project |
必需的特性。 要导入的项目文件的路径。 该路径可以包含通配符。 匹配的文件按排序顺序导入。 通过使用此功能,可以向项目添加代码,只是通过将代码文件添加到目录。 |
|
Condition |
可选特性。 待评估的条件。 有关更多信息,请参见 MSBuild 条件。 |
子元素
无
父元素
|
元素 |
说明 |
|---|---|
|
MSBuild 项目文件必需的根元素。 |
|
|
包含在可选条件下进行分组的 Import 元素的集合。 |
通过使用 Import 元素,可以重用许多项目文件通用的代码。 这样更易于维护代码,因为对共享代码所做的任何更新将传播到导入它的所有项目。
按照约定,共享的导入项目文件另存为 .targets 文件,但属于标准的 MSBuild 项目文件。 MSBuild 不会阻止您导入具有其他文件扩展名的项目,但是,为了保持一致性,建议使用 .targets 文件扩展名。
在导入的项目中,相对路径都被解释为相对于导入项目的目录。 因此,如果将同一个项目文件导入另外几个位于不同位置的项目文件中,则对于每个导入后的项目,其文件中的相对路径将具有不同的解释。
将基于导入项目文件,为被导入项目中引用的与项目文件有关的所有 MSBuild 保留属性(例如 MSBuildProjectDirectory 和 MSBuildProjectFile)赋值。
如果被导入项目没有 DefaultTargets 特性,将会按照导入顺序检查被导入项目,并使用最先发现的 DefaultTargets 特性的值。 例如,如果 ProjectA 导入 ProjectB 和 ProjectC(按照该顺序),而 ProjectB 导入 ProjectD,MSBuild 将依次查找 ProjectA、ProjectB、ProjectD 和 ProjectC 上指定的 DefaultTargets。
被导入项目的架构与标准项目完全相同。 虽然 MSBuild 可以生成被导入项目,但可能性不大,因为被导入项目通常不包含与要设置的属性或目标的运行顺序有关的信息。 被导入项目依赖于导入项目来提供该信息。
说明 |
|---|
|
在命令行 MSBuild 中使用条件导入语句时,不能将这些语句用于在 Visual Studio 集成开发环境 (IDE) 中的 MSBuild。 通过使用在加载项目时设置的配置和平台值计算条件导入。如果随后进行的更改需要重新计算项目文件中的条件(例如,更改平台),则 Visual Studio 重新计算属性和项目的条件,但不重新计算导入的条件。 由于不重新计算导入条件,因此将跳过导入。 若要解决此问题,请在 .targets 文件中放置条件导入或在条件块(如Choose 元素 (MSBuild) 块)中放置代码。 |
通配符
在 .NET Framework 4 中,MSBuild 允许在项目特性中使用通配符。 使用通配符时,将排序找到的所有匹配项(对于可重复性),然后以该顺序导入它们,如同该顺序是显式设置的。
如果您想要提供可扩展性点,以便其他人可以导入文件,而无需将文件名显式添加到导入文件,那么这是非常有用的。 为此,Microsoft.Common.Targets 在文件顶部包含下面的行。
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>
下面的示例演示拥有几个项和属性并导入通用项目文件的项目。
<Project DefaultTargets="Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup>
<resourcefile>Strings.resx</resourcefile> <compiledresources>
$(O)\$(MSBuildProjectName).Strings.resources
</compiledresources>
</PropertyGroup> <ItemGroup>
<CSFile Include="*.cs" /> <Reference Include="System" />
<Reference Include="System.Data" />
</ItemGroup> <Import Project="$(CommonLocation)\General.targets" />
</Project>
Import 元素 (MSBuild)的更多相关文章
- MSBuild的简单介绍与使用
MSBuild 是 Microsoft 和 Visual Studio的生成系统.它不仅仅是一个构造工具,应该称之为拥有相当强大扩展能力的自动化平台.MSBuild平台的主要涉及到三部分:执行引擎.构 ...
- .NET魔法堂:工程构建基石->MSBuild
一.前言 MSBuild是一个既熟悉又陌生的名字,Visual Studio的项目加载和构建均通过MSBuild来实现.VS中右键打开项目菜单,对应MSBuild的Build目标,对应MSBuild的 ...
- 03.Msbuild
MSBuild的深入认识 分类: 专题开发 自动化 2009-01-20 11:56 5711人阅读 评论(1) 收藏 举报 任务引擎脚本工作扩展build 最近在从事自动构造工作的过程中,对MSBu ...
- [译]Walkthrough: Using MSBuild
原文 MSBuild是微软VS的Build平台. 你可以在Visual Studio或Windows命令行中运行MSBuild.在这我们使用VS创建一个MSBuild项目.你可以在VS中编辑项目文件, ...
- MSBuild入门(续)
MSBuild基本概念(续) 在上一篇简单的介绍了下MSBuild中的四个基本块,每块介绍比较单薄,在这里对在大多数的项目模版生成的*.*proj文件中比较常见一些用法和概念做些补充.主要有一下几方面 ...
- Spring中@Import的各种用法以及ImportAware接口
@Import 注解 @Import注解提供了和XML中<import/>元素等价的功能,实现导入的一个或多个配置类.@Import即可以在类上使用,也可以作为元注解使用. @Target ...
- Visual Studio 2010 C++ 工程文件解读
在 VS2010 中,C++ 的工程文件已经和 2005 / 2008 有了很大的不同,而是完全采用 MSBUILD 的属性方式进行表达,并且可以让用户通过一次性的配置而对所有的属性进行自定义: 根据 ...
- Visual Studio 2010 C++ 属性设置基础
在 <Visual Studio 2010 C++ 工程文件解读>中提到了C++工程中可以进行用户自定义的属性设置,如何进行属性设置呢? 下面我们来了解一下 props 文件的基本规则: ...
- Spring:源码解读Spring IOC原理
Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. I ...
随机推荐
- Android开发利器 - Charles + Genymotion 调试网络应用程序
Charles默认是不监听Genymotion模拟器的网络动态的. 需要进行以下设置: 1. 打开你的Genymotion模拟器 2. 设置 -> Wifi -> 长按你的当前的网络连接 ...
- Core Java - 流(Stream) - 字节流和字符流(一)
0. 概述: Java中基于流的I/O构建在4个抽象类之上, 其中2个是字节流,另外2个是字符流. 字节流: InputStream / OutputStream 当操作字节或其它二进制对象时,应当使 ...
- 通过 SSH 隧道方式图形化连接 AIX 服务器
跳转到主要内容 登录 (或注册) 中文 [userid] IBM ID: 密码: 保持登录. 单击提交则表示您同意developerWorks 的条款和条件. 查看条款和条件. 需要一个 IBM ID ...
- 即将放出ITSEC第一期所有培训视频
课程大概被分为三个章节 客户端安全培训 安全工具培训 服务端安全培训 部分PPT 详细课程表 FireBug代码调试工具使用:工具介绍 FireBu ...
- 几种常用远程通信技术(RPC,Webservice,RMI,JMS)的区别
原文链接:http://blog.csdn.net/shan9liang/article/details/8995023 RPC(Remote Procedure Call Protocol) RPC ...
- SQL 存储过程入门(事务)(四)
SQL 存储过程入门(事务)(四) 本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我 ...
- MFC资源冲突解决方法
AFX_MANAGE_STATE(AfxGetStaticModuleState()) 先看一个例子: 1.创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID ...
- [转载]在Vmware ESXI中安装群晖Synology DSM 5.0 (4528)
转载 在Vmware ESXI中安装群晖Synology DSM 5.0 (4528) 文件准备 Vmware ESXi用户安装需要的文件 NB_x64_5032_DSM_50-4528_Xpenol ...
- CCF推荐国际学术会议
类别如下计算机系统与高性能计算,计算机网络,网络与信息安全,软件工程,系统软件与程序设计语言,数据库.数据挖掘与内容检索,计算机科学理论,计算机图形学与多媒体,人工智能与模式识别,人机交互与普适计算, ...
- python 字符串连接
字符串连接 方法1: 用字符串的join方法 a = ['a','b','c','d']content = ''content = ''.join(a)print content 方法2: 用字符串的 ...
说明