共用方式為


How to: 修改專案系統,使專案載入多個版本的 Visual Studio

在Visual Studio 2012,可以使自訂專案系統無法載入的 Visual Studio,使用較早版本所建立的專案,或您可以啟用它來辨別它自己的新版本,萬一它需要修復、 轉換或取代。

注意事項注意事項

在此情況下,一詞修復表示修改的專案,使它可以自動載入 Visual Studio 版,讓它在建立或更新版本中。轉換,或 升級、 修改專案,使它不會再載入在它所建立的版本中的方法。

標示為不相容的專案

您可以將專案以與較早版本的 Visual Studio 不相容。 例如,假設您建立在Visual Studio 2012使用的專案。NET Framework 5 功能。 因為無法在 Visual Studio 2010 SP1 中建置這個專案,可以標示為 Visual Studio 2010 SP1 與不相容,讓該版本不會嘗試載入它。

新增不相容的功能的元件會負責將標示為不相容的專案項目。 元件必須擁有存取權IVsHierarchy介面,其代表想要的專案。

若要將專案標記為不相容

  1. Visual Studio 會識別為不相容的專案,它會顯示對話方塊,詢問要標示為不相容的所有特定的專案的權限。 如果您同意將專案變更為不相容、 AskForUserConsentToBreakAssetCompat傳回 S_OK 元件。 否則,它會傳回OLE_E_PROMPTSAVECANCELLED。

    警告

    在最常見的案例中, IVsHierarchy陣列將包含只有一個項目。

  2. 如果AskForUserConsentToBreakAssetCompat會傳回S_OK,使得此元件,或接受中斷相容性的變更。

重要

您必須實作VSHPROPID_MinimumDesignTimeCompatVersion將專案變更為相容或不相容的屬性。比方說,如果專案系統會使用 MSBuild 專案檔,將加入至專案檔<MinimumVisualStudioVersion>建置到相對應的相等值的屬性VSHPROPID_MinimumDesignTimeCompatVersion屬性值。

偵測是否專案是不相容

無法載入必須保持與 Visual Studio 的目前版本不相容的專案。 此外,不相容的專案無法升級或修復。 因此,專案必須檢查相容性的兩次: 第一,則會被視為的升級或修復,而第二,之前就會載入。

若要啟用專案不相容造成的偵測,您必須實作UpgradeProject_CheckOnlyCreateProject方法。 如果專案是不相容, UpgradeProject_CheckOnly必須傳回成功程式碼VS_S_INCOMPATIBLEPROJECT和CreateProject必須傳回錯誤碼VS_E_INCOMPATIBLEPROJECT。

注意事項注意事項

您可以快取的相容性檢查的結果UpgradeProject_CheckOnly方法,它也可由後續的呼叫CreateProject。

比方說,如果UpgradeProject_CheckOnly和CreateProject Visual Studio 2010 SP1 專案系統所撰寫的方法會檢查專案檔,並發現<MinimumVisualStudioVersion>組建屬性是"11.0"、 Visual Studio 2010 SP1 不會載入專案。 此外, 方案導覽就表示專案"不相容 」,而且會載入。

升級或修復專案

Visual Studio 2010 SP1,就可以將轉換大部份較早版本的 Visual Studio 中所建立的專案。 不但可以Visual Studio 2012執行這項操作,它也可以修改特定種類的專案,讓他們可以載入不論是哪一版中,使用較早版本所建立的。

在載入專案之前,會呼叫 Visual Studio UpgradeProject_CheckOnly方法,以查看是否可以升級的專案。 如果專案可以升級, UpgradeProject_CheckOnly方法會設定旗標,會導致後續的呼叫UpgradeProject升級該專案的方法。 因為不相容的專案無法升級, UpgradeProject_CheckOnly必須先選取專案相容性,如前一節所述。

在Visual Studio 2012,您可以實作UpgradeProject_CheckOnly來決定在載入之前,是否可以修復專案。 如果專案可以修復, UpgradeProject_CheckOnly應該會傳回成功程式碼VS_S_PROJECTREPAIRONLYUPGRADEREQUIRED。 可能的升級需求會列舉在VSPUVF_REPAIRFLAGS,其中包括下列可能性:

  1. SPUVF_PROJECT_NOREPAIR: 需要沒有修復。

  2. VSPUVF_PROJECT_SAFEREPAIR: 使專案相容於 Visual Studio 2010年無的問題,您可能會遇到與舊版的產品。

  3. VSPUVF_PROJECT_UNSAFEREPAIR: 使專案相容 Visual Studio 2010年,但您可能會發現問題的風險與先前版本的產品。 例如,專案就會不相容如果它相依於不同的 SDK 版本之間Visual Studio 2012和 Visual Studio 2010年。

  4. VSPUVF_PROJECT_ONEWAYUPGRADE: 使專案 Visual Studio 2010年與不相容。

  5. VSPUVF_PROJECT_INCOMPATIBLE: 表示Visual Studio 2012不支援這個專案。

  6. VSPUVF_PROJECT_DEPRECATED: 表示此專案已不再支援。

如果在 flavored 專案系統 (例如,Visual Basic 或 C# 的專案系統具有 web、 辦公室 (VSTO)、 Silverlight,與其他專案類型建立在它之上),這些專案類別可實作函式UpgradeProjectFlavor_CheckOnly的IVsProjectFlavorUpgradeViaFactory2介面。 若要進行工作時,這個函式IVsProjectUpgradeViaFactory4. UpgradeProject_CheckOnly先前所述的實作必須呼叫這個方法。 (請注意這已經實作 Visual Basic 或 C# 的基底的專案系統中)。 這個函式的效果,可讓專案口味,也決定專案的資料,除了基底的專案系統程式發現升級的要求。 [相容性] 對話方塊會顯示最嚴重的兩個的需求。

受管理的實作,這兩個介面可用於[Microsoft.VisualStudio.Shell.Interop.11.0.dll]組件。

如果方案中的專案必須升級或轉換, Visual Studio 2012在對話方塊中,加上任何不相容的專案中會列出它們。 如果您選擇執行建議的變更, UpgradeProject呼叫方法時,並進行升級和修復。 UpgradeProject方法判斷它所產生的變更會阻止較早版本的 Visual Studio 在載入專案,如果是的話,會標示為不相容的專案。 比方說,您可能會在 Visual Studio 2010,有了 sp1 之後建立的專案,並再開啟該專案中的Visual Studio 2012。 如果升級或修復,可能出現對話方塊詢問您的權限進行變更。 如果您同意,專案就會修改,而接著載入。如果您關閉方案,然後重新開啟它,在 Visual Studio 2010,有了 sp1 之後,將升級的專案視為不相容,且修復的產品正確載入。