Import 項目 (MSBuild)
更新:2007 年 11 月
將一個專案檔的內容匯入至另一個專案檔。
<Import Project="ProjectPath"
Condition="'String A'=='String B'" />
屬性和項目
下列小節將說明屬性 (Attribute)、子項目和父項目。
屬性
屬性 |
描述 |
---|---|
Project |
必要的屬性。 要匯入的專案檔路徑。 |
Condition |
選擇性屬性。 要評估的條件。如需詳細資訊,請參閱 MSBuild 條件。 |
子項目
無
父項目
項目 |
描述 |
---|---|
MSBuild 專案檔的必要根項目。 |
備註
Import 項目可讓您重複使用許多專案檔通用的程式碼。當您將通用的程式碼區塊移至其他專案檔時,可讓您維護程式碼並從中央位置傳送變更。例如,專案 A 和專案 B 為其組建 (Build) 設定特定的項目和屬性值,Project C 則含有通用建置處理序。專案 A 和專案 B 可以匯入專案 C,並且只需對一個檔案進行建置處理序的任何變更。
依照慣例,一般匯入的專案檔會儲存為 .targets 檔,而不是標準的 MSBuild 專案檔;MSBuild 不會阻止您匯入具有不同副檔名的專案,但為了一致性,建議您使用 .targets 副檔名。
匯入目標專案中的所有相對路徑,都會解譯成相對於匯入來源專案的目錄。因此,如果將專案檔匯入至許多不同位置的專案檔,則匯入目標專案檔中的相對路徑,就會根據每個匯入來源專案而有不同的解譯。
所有與專案檔相關的 MSBuild 保留屬性,例如,MSBuildProjectDirectory 和 MSBuildProjectFile (這些是在匯入目標專案中參考的屬性),都會根據匯入來源專案檔來指派屬性值。
如果匯入來源專案沒有 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>