如何:使用多個專案檔內相同的目標

如果您已撰寫數個 MSBuild 專案檔,可能會發現需要在不同的專案檔中使用相同的工作和目標 (Target)。 您不需要在每個專案檔中納入完整的工作或目標描述,只要將目標儲存到個別的專案檔,然後再將該專案匯入到需要使用此目標的其他專案即可。

使用 Import 項目

您可以使用 Import 項目,將一個專案檔插入至另外一個專案檔。 要匯入的專案檔必須是有效的 MSBuild 專案檔,並且包含語式正確 (Well-Formed) 的 XML。 Project 屬性 (Attribute) 指定了匯入的專案檔路徑。 如需 Import 項目的詳細資訊,請參閱 Import 項目 (MSBuild)

若要匯入專案

  1. 在匯入 (Importing) 來源專案檔中定義所有屬性和項目,做為匯入 (Imported) 目標專案中屬性及項目的參數。

  2. 使用 Import 項目來匯入專案。 例如:

    <Import Project="MyCommon.targets"/>

  3. Import 項目之後,定義所有必須的屬性及項目,以便於覆寫匯入的專案中屬性及項目的預設定義。

評估的順序

當 MSBuild 到達 Import 項目時,匯入目標專案實際上是插入至匯入來源專案中 Import 項目的位置。 因此,Import 項目的位置會影響屬性和項目的值。 請務必了解匯入的專案所設定以及使用的屬性和項目。

專案建置 (Build) 時,會先評估所有屬性,然後再評估項目。 例如,下列 XML 定義匯入的專案檔 MyCommon.targets:

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyCommon</Name>
    </PropertyGroup>

    <Target Name="Go">
        <Message Text="Name=$(Name)"/>
    </Target>
</Project>

下列 XML 定義了 MyApp.proj,這個專案檔會匯入 MyCommon.targets:

<Project
    DefaultTargets="Go"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyApp</Name>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

建置專案時,會顯示下列訊息:

Name="MyCommon"

由於專案會在屬性 Name 定義於 MyApp.proj 後才匯入,因此 MyCommon.targets 中的 Name 定義會覆寫 MyApp.proj 中的定義。 如果專案在定義 Name 屬性之前便已匯入,組建便會顯示下列訊息:

Name="MyApp"

請使用下列方法匯入專案

  1. 在專案檔中定義所有屬性和項目,做為匯入的專案中屬性及項目的參數。

  2. 匯入專案。

  3. 在專案檔中定義所有必須的屬性及項目,以便於覆寫匯入的專案中屬性及項目的預設定義。

範例

在下列程式碼範例中,示範了第二個程式碼範例所匯入的 MyCommon.targets 檔。 .targets 檔案會評估匯入來源專案的屬性,以設定組建的組態。

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
        <Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
        <appname>$(MSBuildProjectName)</appname>
    <PropertyGroup>
    <Target Name="Build">
        <Csc Sources="hello.cs"
            Optimize="$(Optimize)"
            OutputAssembly="$(appname).exe"/>
    </Target>
</Project>

下列程式碼範例會匯入 MyCommon.targets 檔:

<Project DefaultTargets="Build"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor>RETAIL</Flavor>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

請參閱

參考

Import 項目 (MSBuild)

概念

MSBuild 目標