共用方式為


在 MSBuild 專案檔中保存資料

專案子類型可能需要將子類型特定的資料保存到專案檔案中,以便日後使用。 專案子類型會使用專案檔持續性來滿足下列需求:

  1. 保存建置專案時使用的資料。 (如需 Microsoft Build Engine 的詳細資訊,請參閱 MSBuild。) 組建相關資訊可以是:

    1. 與組態無關的資料。 也就是說,儲存在 MSBuild 元素中的資料具有空白或缺失情況。

    2. 與組態相關的資料。 也就是說,儲存在 MSBuild 元素中的資料以特定專案組態為條件。 例如:

      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
      
  2. 保存與建置無關的資料。 此資料可以用未根據 XML 結構驗證的自由格式 XML 來表示。

    1. 與組態無關的資料。

    2. 與組態相關的資料。

透過 MSBuild 保存對建置專案有用的資料。 MSBuild 系統會維護與建置相關資訊的主資料表。 專案子類型負責存取此資料以取得和設定屬性值。 專案子類型也可以藉由新增要保存的其他屬性以及移除不想保存的屬性,來增強與建置相關的資料表。

為了修改 MSBuild 資料,專案子類型負責透過 IVsBuildPropertyStorage 從基底專案系統擷取 MSBuild 屬性物件。 IVsBuildPropertyStorage 是在核心專案系統上實作的介面,並藉由執行 QueryInterface 來彙總專案子類型查詢。

下列程序概述使用 IVsBuildPropertyStorage 移除屬性的步驟。

從 MSBuild 專案檔案中移除屬性

  1. 在專案子類型 IVsBuildPropertyStorage 上呼叫 QueryInterface

  2. 呼叫 RemoveProperty,並將 pszPropName 設定為您想要移除的屬性。

透過 IPersistXMLFragment 保存專案檔案中與建置無關的資料。

您可以在主要 IPersistXMLFragment 物件、project subtype aggregator 物件或兩者上實作 project subtype project configuration

以下幾點概述與建置無關的資訊持續性之主要概念。

  • 基底專案會呼叫主要專案子類型 (也就是最外層的專案子類型) 彙總工具物件來載入和儲存與組態無關的資料,並呼叫專案子類型專案組態物件來載入或儲存與組態相關的數據。

  • 基本專案會為專案子類型彙總的每個層級多次呼叫 IPersistXMLFragment 的方法,並傳遞每層的 GUID。

  • 基底專案會傳遞或接收專用於特定專案子類型的 XML 片段,並使用這個機制做為彙總層級之間保存狀態的方式。

  • 基底專案呼叫最外層專案子類型的 IPersistXMLFragment 實作,並傳遞 GUID。 如果 GUID 屬於最外層的專案子類型,則會處理呼叫本身;否則,它會將呼叫委派給內部專案子類型等等,直到找到 GUID 所對應的專案子類型為止。

  • 專案子類型也可以在將呼叫委派給內部專案子類型之前或之後修改 XML 片段。 下列範例顯示專案檔案的摘錄,其中包含專案子類型特定屬性的檔案名稱會傳遞至該專案子類型。

    <ProjectExtensions>
        <VisualStudio>
          <FlavorProperties GUID="{<FlavorGUID>}">
            <FlavorProject TestFileFolder="TestFile" />
          </FlavorProperties>
        </VisualStudio>
      </ProjectExtensions>