VSPackage 安裝案例
請務必設計 VSPackage 安裝程式的靈活性。 例如,您可能需要在未來發行安全性修補檔,或變更需要徹底並存版本控制支援的商務策略。
在支援多個 Visual Studio 版本中,您可以使用 VSPackage 的共用或並存安裝,藉以了解支援 Visual Studio 並存安裝的優點和問題。 簡言之,並存 VSPackage 可讓您彈性支援 Visual Studio 的新功能。
本主題中討論的案例不是唯一選擇,只是建議的最佳做法。
元件、隱私權和共用
讓您的元件獨立作業
您一旦找到並填入元件、指派 GUID
和部署元件之後,就無法變更其組合了。 如果您變更元件的組合,產生的元件必須是具有新 GUID
的新元件。 鑒於這些事實,讓每個元件獨立、自立的裝置,提供最大的版本控制彈性。 如需控管元件之規則的詳細資訊,請參閱變更元件程式碼 ,以及違反元件規則會有何後果?。
請勿在元件中混合共用的資源和私人資源
參考計數發生於元件層級。 因此,在一個元件中混合共用的資源和私人資源會造成無法更新私人資源 (例如可執行檔),而不需覆寫共用資源。 此案例會建立回溯相容性問題,並侷限您建立並存功能。
例如,用來向 Visual Studio SDK 註冊 VSPackage 的登錄值,應該與用來向 Visual Studio 註冊 VSPackage 的元件分開。 共用檔案或登錄值會進入另一個元件。
案例 1:共用 VSPackage
在此案例中,共用 VSPackage (支援多個 Visual Studio 版本的單個二進位檔隨附於 Windows Installer 套件中。 向每個 Visual Studio 版本註冊是由使用者可選取的功能所控制。 這也表示指派給個別功能時,可以個別選取每個元件以進行安裝或解除安裝,讓使用者控制將 VSPackage 整合到不同版本的 Visual Studio 中。 (請參閱 Windows Installer 功能,以取得在 Windows Installer 套件中使用功能的詳細資訊)。
如下圖所示,共用元件是一律安裝的 Feat_Common 功能的一部分。 藉由顯示 Feat_VS2002和Feat_VS2003 功能,使用者可以在安裝時間選擇想要 VSPackage 整合的 Visual Studio 版本。 使用者也可以使用 Windows Installer 維護模式來新增或移除功能,而這種情況會新增或移除不同 Visual Studio 版本的 VSPackage 註冊資訊。
注意
將功能的 [顯示] 資料行設定為 0 會將它隱藏。 低層級資料行值 (例如 1) 可確保一律安裝。 如需詳細資訊,請參閱 INSTALLLEVEL 屬性 和 功能資料表。
案例 2:共用 VSPackage 更新
在此案例中,提供了案例 1 中 VSPackage 安裝程式的更新版本。 為便於討論,更新會新增對 Visual Studio 的支援,但也可能是更簡單的安全性修補檔或 Bug 修正 Service Pack。 Windows Installer 安裝較新元件的規則要求不重新複製系統上已存在的未更改元件。 在此情況下,已有 1.0 版的系統將會覆寫更新的元件 Comp_MyVSPackage.dll,讓使用者選擇使用其元件 Comp_VS2005_Reg 新增新功能 Feat_VS2005。
警告
每當在多個 Visual Studio 版本之間共用 VSPackage 時,VSPackage 的後續版本必須維持與舊版 Visual Studio 的回溯相容性。 如果無法維護回溯相容性,則必須使用並存的私人 VSPackage。 如需詳細資訊,請參閱支援多個版本的 Visual Studio。
此案例呈現新的 VSPackage 安裝程式,充分善用了 Windows Installer 對次要升級的支援。 使用者只要安裝 1.1 版,就會升級 1.0 版。 不過,系統上並不需要有 1.0 版。 相同的安裝程式會在沒有 1.0 版的系統上安裝 1.1 版。 以這種方式提供次要升級的優點是,不需要執行開發升級安裝程式和完整產品安裝程式的所有工作。 一個安裝程式會執行這兩項作業。 安全性修正或 Service Pack 可能會改用 Windows Installer 修補程式。 如需詳細資訊,請參閱修補和升級。
案例 3:並存 VSPackage
此案例提供兩個 VSPackage 安裝程式,每個版本的 Visual Studio .NET 2003 和 Visual Studio 各一個。 每個安裝程式會並存安裝 VSPackage 或私用 VSPackage (專為特定版本的 Visual Studio 建置和安裝)。 每個 VSPackage 都位於自己的元件中。 因此,每個都可以個別使用修補檔或維護版本提供服務。 因為 VSPackage DLL 現在是版本特定的,所以可以放心將其註冊資訊包含在與 DLL 相同的元件中。
每個安裝程式也包含兩個安裝程式之間共用的程式碼。 如果共用程式碼安裝到通用位置,則安裝這兩個 .msi 檔案只會安裝共用程式碼一次。 第二個安裝程式只會遞增元件上的參考計數。 參考計數可確保如果解除安裝其中一個 VSPackage,共用程式碼會保留給另一個 VSPackage。 如果同時解除安裝第二個 VSPackage,將會移除共用的程式碼。
案例 4:並存 VSPackage 更新
在此案例中,適用於 Visual Studio 的 VSPackage 遭遇到安全漏洞,而且您需要發出更新。 如同案例 2,您可以建立新的 .msi 檔,以更新現有的安裝為包含安全性修正程式,以及部署已安裝安全性修正的新安裝。
在此情況下,VSPackage 是安裝在全域組件快取 (GAC) 中的受控 VSPackage。 當您重建以包含安全性修正時,您必須變更元件版本號碼的修訂編號部分。 新元件版本號碼的註冊資訊會覆寫舊版,導致 Visual Studio 載入固定組件。
如需並行組件部署的詳細資訊,請參閱使用 .NET Framework 簡化部署和對決 DLL 挑戰。