将一个项目文件的内容导入另一个项目文件。
<项目><导入>
Syntax
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
属性和元素
以下部分介绍属性、子元素和父元素。
Attributes
| Attribute | Description |
|---|---|
Project |
必需属性。 要导入的项目文件的路径。 路径可以包含通配符。 匹配文件按排序顺序导入。 通过使用此功能,只需将代码文件添加到目录即可将代码添加到项目中。 |
Condition |
可选属性。 要评估的条件。 有关详细信息,请参阅 “条件”。 |
Label |
可选属性。 将标识符应用于此导入元素。 |
Sdk |
可选属性。 引用项目 SDK。 |
子元素
None
父元素
| 元素 | Description |
|---|---|
| 项目 | MSBuild 项目文件的必需根元素。 |
| ImportGroup | 包含按可选条件分组的 Import 元素的集合。 |
注解
通过使用 Import 该元素,可以重复使用许多项目文件通用的代码。 使用导入可以更轻松地维护代码,因为对共享代码所做的任何更新都会传播到导入它的所有项目。
按照约定,共享导入的项目文件保存为 .targets 文件,但它们是标准 MSBuild 项目文件。 MSBuild 不会阻止导入具有不同文件扩展名的项目,但建议使用 .targets 扩展名保持一致性。
导入项目中的相对路径相对于导入项目的目录进行解释(此段落后面介绍的一些例外情况)。 因此,如果将项目文件导入到不同位置的多个项目文件中,则导入的项目文件中的相对路径将按不同的方式解释每个导入的项目。 有两个例外。 一个例外是,在元素中 Import ,路径始终相对于包含 Import 元素的项目进行解释。 另一个例外是UsingTask,始终解释属性相对于包含UsingTask元素的文件的相对路径AssemblyFile。
与导入项目(例如, MSBuildProjectDirectory 和 MSBuildProjectFile)中引用的项目文件相关的所有 MSBuild 保留属性都基于导入项目文件分配值。
如果导入的项目没有 DefaultTargets 属性,则按导入项目的顺序检查导入的项目,并使用第一个发现 DefaultTargets 属性的值。 例如,如果 ProjectA 导入 ProjectB 和 ProjectC(按顺序),并且 ProjectB 导入 ProjectD,则 MSBuild 首先在 ProjectA 上查找 DefaultTargets 指定的项目,然后是 ProjectB,最后是 ProjectC。
导入项目的架构与标准项目的架构相同。 尽管 MSBuild 可以生成导入的项目,但不太可能因为导入的项目通常不包含要设置的属性或运行目标的顺序的信息。 导入的项目取决于导入到的项目以提供该信息。
通配符
MSBuild 允许 Project 属性中的通配符。 当存在通配符时,找到的所有匹配项都会排序(可重现),然后按照该顺序导入它们,就好像已显式设置顺序一样。
如果想要提供扩展点,以便其他人可以导入文件,而无需将文件名显式添加到导入文件,这非常有用。 为此, Microsoft.Common.Targets 在文件顶部包含以下行。
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>
Example
下面的示例演示了一个项目,其中包含多个项和属性,并导入一个常规项目文件。
<Project DefaultTargets="Compile">
<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>