Import 元素 (MSBuild)

更新:2007 年 11 月

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

<Import Project="ProjectPath"
    Condition="'String A'=='String B'" />

属性和元素

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

属性

属性

说明

Project

必需。

要导入的项目文件的路径。

Condition

可选的属性。

要计算的条件。有关更多信息,请参见 MSBuild 条件

子元素

父元素

元素

说明

Project

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

备注

通过 Import 元素,可以重用许多项目文件通用的代码。在将公共代码块移入其他项目文件中时,它使您可在一个中心位置维护代码并传播更改。例如,项目 A 和项目 B 为各自的生成设置特定的项和属性值,而项目 C 包含公共生成过程。项目 A 和项目 B 可以导入项目 C,但是,对生成过程的任何更改都只能应用于一个文件。

导入的公共项目文件按约定另存为 .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) 块)中放置代码。

示例

下面的代码示例演示一个设置几个项和属性并导入通用项目文件的项目。

<Project DefaultTargets="Compile"
    xmlns="https://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 项目文件架构引用