Visual Studio 2017 Extensibility SDK 的一些改變

相信許多人使用 Visual Sutdio 2017 安裝擴充套件時應該也都有發現,他會出現一個等待 Processes 處理序結束的對話框,等待處理序結束後才進行安裝,當您獨立執行 VSIX 安裝包時會跳出一個對話框...

前言

相信許多人使用 Visual Sutdio 2017 安裝擴充套件時應該也都有發現,他會出現一個等待 Processes 處理序結束的對話框,等待處理序結束後才進行安裝

下圖是當您獨立執行 VSIX 安裝包時會跳出如下對話框

且當您在 Visual Studio 2017 的擴充管理員安裝套件時會自動進入排程安裝,反之,解除安裝也是相同的

 

新的 Visual Studio 2017 Extensibility SDK 有些什麼改變?

根據官方 Visual Studio 2017 Release Notes & Changes in Visual Studio 2017 extensibility 的文件中可以看的出來以下這些改變

1. VSIX 的 manifest 提升到 v3 的格式

這一定要提一下,這裡有相當多的改變,因為從 Visual Studio 2017 開始支援  light-weight install (輕量化安裝),這只有在 v3 格式的擴充的 manifest 上才有。新的 v3 格式支援如下:

  • 在安裝 VSIX 封裝時您可能需要更明確的指定此 VSXI 安裝包的先決條件 (prerequisites)
  • 開始支援在 VSIX 安裝包理將 Assembly 註冊到 Ngen
  • 允許將 VSIX 安裝包裡面的資產安裝在 Extension folder 以外的地方

這些都是值得一提的地方,新版的 VSIX 在安裝的時候會更為嚴謹,他必須在你電腦裡面目前無任何與 Visual Studio 相關的行程在執行的時候才允許執行安裝動作,且不再限制你可以將 VSIX 內的資產安裝到 Extension 資料夾,您可以在參考進來的 Assembly 上面設定 Install Root

原先的預設值就是存放在 Extension Folder 裡面。另外,要注意的是您必須將「This VSIX is installed for all users (requires elevation on install)」勾起來。

 

2. 什麼是 Lightweight Solution Load (LSL)?

所謂的 Lightweight Solution Load (LSL) 後面都簡稱為 LSL,是 Visual Studio 2017 新加入的特性,它會大大的縮短方案載入的時間,也就是說,當你開啟現有方案時,Visual Studio 並不會一次將整個方案裡的所有專案都一次載入,只有當你使用到,點開這個專案的時候才會載入。

您可以在「選項」=>「專案和方案」的「一般」找到「輕量型解決方案載入」這個設定,不過筆者目前取得的 Visual Studio 2017 RC 這一版的選項設定畫面似乎有些問題,畫面會跳動,無法選擇到該勾選項目

不過 LSL 在 Extensibility 的開發一些擴充功能上面造成元件未載入的問題,詳細可以參考「Lightweight Solution Load (LSL)

 

3. 改變安裝自定義專案與樣版的方式

從 Visual Studio 2017 開始,Visual Studio 改變了由.vsix或.msi安裝的 Project Item 和 Project Templates 的方式。如果您擁有使用自定義 Project Item 或 Project Templates 的擴充套件,您可能需要做一個升級的動作,因為 Visual Studio 2017 不再自動掃描擴充內容含括的 Project Items 與 Project Templates 了,您必須明確定義 Manifest,詳情可以參考:「Upgrading Custom Project and Item Templates for Visual Studio 2017

 

4. 關於 Global Assembly Cache (GAC)

關於 GAC 的部分,微軟認為未來需要安裝到 GAC 的 Assembly 只會越來越少,因此會慢慢將安裝到 GAC 的功能抽掉。

 

5. 關於原本全域 COM 物件的註冊

原先 Visual Studio 2015 之前的版本裡,有許多預設的全域 COM 物件需要註冊,還自己提供了預設的存放路徑「%ProgramFiles(x86)%\Common Files\Microsoft Shared\MSEnv」加以存放,新的 Visual Studio 2017 將使用一個新的機制,自動載入本身的 COM 物件,不再需要註冊,詳細可參考:「Changes in Visual Studio 2017 extensibility

 

結語:

如果您是一個元件、擴充套件 或是 Project Templates 的開發者,或是您的團隊有導入開發流程、Coding Rule/Coding Standard 是使用 Project Templates 的,那麼您可能需要注意在 Visual Studio 2017 的這一些變更,以免未來升級到 Visual Studio 2017 時遭遇到一些困難,若您已經有打算升級,那麼可以著手開始了解這些改變、以及這些改變對於你們團隊在使用的擴充套件 VSIX 或是 Project Templates 有哪些影響。

 

其他更多的部分可以參考:

What's New in the Visual Studio 2017 SDK
https://docs.microsoft.com/en-us/visualstudio/extensibility/what-s-new-in-the-visual-studio-2017-sdk
 
Changes in Visual Studio 2017 extensibility
https://docs.microsoft.com/en-us/visualstudio/extensibility/breaking-changes-2017
 
Upgrading Custom Project and Item Templates for Visual Studio 2017
https://docs.microsoft.com/en-us/visualstudio/extensibility/upgrading-custom-project-and-item-templates-for-visual-studio-2017
 
Lightweight Solution Load (LSL)
https://docs.microsoft.com/en-us/visualstudio/extensibility/lightweight-solution-load-extension-impact
 
How to: Migrate Extensibility Projects to Visual Studio 2017
https://docs.microsoft.com/en-us/visualstudio/extensibility/how-to-migrate-extensibility-projects-to-visual-studio-2017


 

簽名:

學習是一趟奇妙的旅程

這當中,有辛苦、有心酸、也有成果。有時也會有瓶頸。要能夠繼續勇往直前就必須保有一顆最熱誠的心。

軟體開發之路(FB 社團)https://www.facebook.com/groups/361804473860062/

Gelis 程式設計訓練營(粉絲團)https://www.facebook.com/gelis.dev.learning/


 

如果文章對您有用,幫我點一下讚,或是點一下『我要推薦,這會讓我更有動力的為各位讀者撰寫下一篇文章。

非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^