在多個專案檔中使用相同的目標
如果您撰寫了數個 MSBuild 專案檔,您可能已發現到需要在不同的專案檔中使用相同的工作和目標。 您可以不在每個專案檔中包含這些工作或目標的完整描述,而是在一個個別的專案檔中儲存目標,然後將該專案匯入到任何其他需要使用該目標的專案中。
使用 Import 項目
使用 Import
元素可將一個專案檔插入到另一個專案檔中。 所要匯入的專案檔必須是有效的 MSBuild 專案檔,並且包含格式正確的 XML。 Project
屬性會指定所匯入之專案檔的路徑。 如需 Import
項目的詳細資訊,請參閱 Import 項目 (MSBuild)。
匯入專案
在匯入端專案檔中,定義用來作為所匯入專案中屬性和項目之參數的所有屬性和項目。
使用
Import
元素來匯入專案。 例如:<Import Project="MyCommon.targets"/>
在
Import
元素之後,定義必須覆寫所匯入專案中預設屬性和項目定義的所有屬性和項目。
評估順序
當 MSBuild 到達 Import
元素時,會將所匯入之專案有效地插入到匯入端專案中 Import
元素的位置。 因此,Import
元素的位置會影響屬性和項目的值。 請務必了解所匯入之專案所設定的屬性和項目,以及所匯入之專案所使用的屬性和項目。
在組建專案時,會先評估所有屬性,然後才評估項目。 例如,下列 XML 定義所匯入的專案檔 MyCommon.targets:
<Project xmlns="http://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="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyApp</Name>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>
在組建專案時,會顯示下列訊息:
Name="MyCommon"
由於會在 MyApp.proj 中定義 Name
屬性之後,才匯入專案;因此 MyCommon.targets 中 Name
的定義會覆寫 MyApp.proj 中的定義。 如果是在定義 Name 屬性之前就匯入專案,組建就會顯示下列訊息:
Name="MyApp"
匯入專案時,請使用下列方法
在專案檔中,定義用來作為所匯入專案中屬性和項目之參數的所有屬性和項目。
匯入專案。
在專案檔中,定義必須覆寫所匯入專案中預設屬性和項目定義的所有屬性和項目。
範例 1
下列程式碼範例示範第二個程式碼範例匯入的 MyCommon.targets 檔案。 .targets 檔案會評估來自匯入端專案的屬性以設定組建。
<Project xmlns="http://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>
範例 2
下列程式碼範例會匯入 MyCommon.targets 檔案。
<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor>RETAIL</Flavor>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>