Import 元素 (MSBuild)

            Visual Studio 2013              
 

将一个项目文件的内容导入另一个项目文件。

 
复制            
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
特性和元素


            

以下几节描述了特性、子元素和父元素。

特性

 

特性

说明

Project                                           

必需的特性。

要导入的项目文件的路径。                       该路径可以包含通配符。  匹配的文件按排序顺序导入。  通过使用此功能,可以向项目添加代码,只是通过将代码文件添加到目录。

Condition                                           

可选特性。

待评估的条件。                       有关更多信息,请参见 MSBuild 条件

子元素

父元素

 

元素

说明

Project

MSBuild 项目文件必需的根元素。

ImportGroup

包含在可选条件下进行分组的 Import 元素的集合。

备注


            

通过使用 Import 元素,可以重用许多项目文件通用的代码。               这样更易于维护代码,因为对共享代码所做的任何更新将传播到导入它的所有项目。

按照约定,共享的导入项目文件另存为 .targets 文件,但属于标准的 MSBuild 项目文件。               MSBuild 不会阻止您导入具有其他文件扩展名的项目,但是,为了保持一致性,建议使用 .targets 文件扩展名。

在导入的项目中,相对路径都被解释为相对于导入项目的目录。               因此,如果将同一个项目文件导入另外几个位于不同位置的项目文件中,则对于每个导入后的项目,其文件中的相对路径将具有不同的解释。

将基于导入项目文件,为被导入项目中引用的与项目文件有关的所有 MSBuild 保留属性(例如 MSBuildProjectDirectoryMSBuildProjectFile)赋值。

如果被导入项目没有 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>
请参见


  任务
如何:在多个项目文件中使用同一目标                       

概念

MSBuild 项目文件架构引用            

Import 元素 (MSBuild)的更多相关文章

  1. MSBuild的简单介绍与使用

    MSBuild 是 Microsoft 和 Visual Studio的生成系统.它不仅仅是一个构造工具,应该称之为拥有相当强大扩展能力的自动化平台.MSBuild平台的主要涉及到三部分:执行引擎.构 ...

  2. .NET魔法堂:工程构建基石->MSBuild

    一.前言 MSBuild是一个既熟悉又陌生的名字,Visual Studio的项目加载和构建均通过MSBuild来实现.VS中右键打开项目菜单,对应MSBuild的Build目标,对应MSBuild的 ...

  3. 03.Msbuild

    MSBuild的深入认识 分类: 专题开发 自动化 2009-01-20 11:56 5711人阅读 评论(1) 收藏 举报 任务引擎脚本工作扩展build 最近在从事自动构造工作的过程中,对MSBu ...

  4. [译]Walkthrough: Using MSBuild

    原文 MSBuild是微软VS的Build平台. 你可以在Visual Studio或Windows命令行中运行MSBuild.在这我们使用VS创建一个MSBuild项目.你可以在VS中编辑项目文件, ...

  5. MSBuild入门(续)

    MSBuild基本概念(续) 在上一篇简单的介绍了下MSBuild中的四个基本块,每块介绍比较单薄,在这里对在大多数的项目模版生成的*.*proj文件中比较常见一些用法和概念做些补充.主要有一下几方面 ...

  6. Spring中@Import的各种用法以及ImportAware接口

    @Import 注解 @Import注解提供了和XML中<import/>元素等价的功能,实现导入的一个或多个配置类.@Import即可以在类上使用,也可以作为元注解使用. @Target ...

  7. Visual Studio 2010 C++ 工程文件解读

    在 VS2010 中,C++ 的工程文件已经和 2005 / 2008 有了很大的不同,而是完全采用 MSBUILD 的属性方式进行表达,并且可以让用户通过一次性的配置而对所有的属性进行自定义: 根据 ...

  8. Visual Studio 2010 C++ 属性设置基础

    在 <Visual Studio 2010 C++ 工程文件解读>中提到了C++工程中可以进行用户自定义的属性设置,如何进行属性设置呢? 下面我们来了解一下 props 文件的基本规则: ...

  9. Spring:源码解读Spring IOC原理

    Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. I ...

随机推荐

  1. 火狐 SSL 收到了一个弱临时 Diffie-Hellman 密钥的解决办法

    连接 https网址 时发生错误. 在服务器密钥交换握手信息中 SSL 收到了一个弱临时 Diffie-Hellman 密钥. (错误码: ssl_error_weak_server_ephemera ...

  2. Java Inner Classes

    When thinking about inner classes in java, the first thing that comes to my mind is that, WHY do we ...

  3. LeetCode: Lowest Common Ancestor of a Binary Search Tree 解题报告

    https://leetcode.com/submissions/detail/32662938/ Given a binary search tree (BST), find the lowest ...

  4. Two classes have the same XML type name 排错【转】

    今天遇到一个问题,webservice发布的时候报下面的错误: <strong>Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotati ...

  5. 移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)

    1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP出于性能提升或用户体验等原因,将其做在客户端完成, ...

  6. 在Windows2008系统中利用IIS建立FTP服务器

    一.服务器管理器   1.2008的系统使用服务器管理器,选择角色,因为我之前已经开启了IIS服务器角色,所以我现在只要添加角色服务即可,如果你没有开启过的话,直接添加角色即可.   2.选择WEB服 ...

  7. android自定义view仿照MIUI中音量控制效果

    先看效果图: 这就是miui中的音量效果图,实现思路是自定义视图,绘制圆环,然后设置进度显示. 核心代码在onDraw中实现如下: @Override protected void onDraw(Ca ...

  8. android EditText inputType说明

    在开发的过程中,通常会用到EditText,如何让虚拟键盘来适应输入框中内容的类型,通常我们都会在xml文件中加入android:inputType="". android:inp ...

  9. java之对象转型2

    public class TestCasting2{ public static void main(String args[]){ TestCasting2 test2= new TestCasti ...

  10. 获取ACCESS数据库中自增变量的值

    /// <summary> /// 获取自增变量值 /// </summary> /// <returns>自增变量值</returns> public ...