Visual Studio 2022 在 2024 年的第一個大更新推出了~這次的版本是 17.9,官方的公告是《Visual Studio 2022 17.9 Now Available》,release note 的部分也可以參考官網的資訊;至於針對 C++ 的部分,則是《What’s New for C++ Developers in Visual Studio 2022 17.9》這篇。
至於有那些新功能或改進呢?在 Visual Studio IDE 中的「新增功能」頁面中,列出了下列的項目:
- WinForms 設計工具改善
- 摘要說明您的記憶體轉儲
- VSConfig 現在支持延伸模組
- 分析和追蹤「include」指示詞
- 將 C++ 記憶體配置可視化
- 快速切換索引標籤資料列樣式
- 使用括號快速包圍您的程序代碼
- 探索並啟用訂閱者權益
- 適用於 .NET MAUI 的更佳屬性檢查
- 快速識別事件處理程式流失
- 在沒有視覺中斷的情況下進行偵錯
- 更有效率地偵錯 .NET 8 程序代碼
- 檢測「從收集暫停開始」選項
- 讓 GitHub Copilot 產生 Git 認可訊息
- 試用新的延伸模組管理員
- 輕鬆驗證延伸模組擁有者
- 搜尋所有一對一程式代碼搜尋中的任何文字
而這邊 Heresy 就來先針對整個 IDE 的使用上、覺得比要有趣、或是有幫助的部分來講了~之後,則會再針對 C++ 的部分抓一些功能出來說明。
快速切換索引標籤資料列樣式
在開發程式的時候,常常會開啟一堆檔案、變成整個 IDE 的索引標籤變的相當多、甚至沒辦法完全顯示;所以在 17.3 的時候,Visual Studio 也引進了多列式的索引標籤列,來讓使用者根據自己的需求調整。
這一版則是簡化了操作的方法、允許使用者快速地在單列、多列中切換。
當索引標籤開到超過一列可以顯示的數量時,他會顯示一個提示:
而此時,在索引標籤列的區域中,透過滑鼠滾輪,就可以快速地切換兩種模式了!
比如說下面是單列模式,這時候只要在索引標籤列往下捲動滑鼠滾輪、就會變成多列模式、展開所有的索引標籤。
下面則就是多列展開的樣子。在找到自己要的文件、切換過去後,也只要再往上捲動滑鼠滾輪,就可以切換回單列模式、節省版面了~
新的延伸模組管理員(預覽功能)
這一版的 Visual Studio 開始提供新的延伸模組管理員介面。不過由於還是預覽性質,如果要使用的話,需要到「工具」、「選項」、「環境」、「預覽功能」中,找到「Extension Manager UI Refresh」來開啟。
新的介面不再是一個獨立視窗,而比較像是一個可以 dock 在任何地方的文件。
和舊版相比,新的管理介面可以直接看到延伸模組的介紹,而不需要另外開啟網站,算是相對方便的。
此外,這邊也加入了「藍勾勾」的認證機制,讓使用者可以判斷發行者是否有對應的網域的所有權。不過比較好笑的,是微軟自己的延伸模組發行者很多反而沒有藍勾勾(例如 Microsoft DevLabs)… XD
多啟動專案組態(Multi-project configuration)
一個大型的方案(Solution)裡面通常會包含非常多個專案(project),而有的時候的偵錯也需要同時執行好幾個專案來進行(例如 server-client 這類要互相溝通的程式)。
這一版的 Visual Studio 則是在多個啟動專案的情境下,加入了「啟動設定檔」(Launch profile)的功能,允許使用者預先設定好要執行那些專案來進行偵錯。
使用方法是在「方案總管」中的右鍵選單裡面找到「設定啟動專案」(或者透過方案的「屬性」),在打開的視窗裡會可以選擇偵錯時要啟動的專案。
這邊預設應該會是「單一啟動專案」,在需要一次執行多個程式來偵錯的時候、就也可以改成「多個啟動專案」,然後在右側的專案列表、選擇個別專案的動作。
而這次則是加入了「啟動設定檔」的部分,可以自由地新增、編輯要啟動那些專案。對於比較複雜、可能要針對多總情境來啟動不同專案的大型方案來說,應該是很實用的。
開啟多個資料夾/工作區(Multi-folder Open Support / Workspace)
透過新的「工作區」的功能,Visual Studio 可以透過「.code-workspace
」這個 JSON 檔案,來一次開啟多個資料夾。
這部分可以參考《To open multiple folders》。
在程式碼搜尋中包含純文字搜尋結果(預覽功能)
「搜尋所有一對一程式代碼搜尋中的任何文字」這個標題翻譯得感覺就很怪…所以這邊就改用選項裡的翻譯吧。
他基本上是 17.5 加入的 All-in-one search 中的「程式碼搜尋」(快速鍵是 Ctrl + T 或 Ctrl + ,)強化功能,這次的更新是實驗性地允許他搜尋所有文字。
這項功能也是一項預覽性質的功能,需要到「工具」、「選項」、「環境」、「預覽功能」中,找到「在程式碼搜尋中包含純文字搜尋結果」來開啟。
(英文說明好像是「Plain text search in All-In-One Search」,這到底怎麼翻譯的?)
而在使用上,基本上就是在搜尋時在前面加上代表文字的「x:
」、或是按下下方的「文字(x:)」按鈕,這樣就可以了。
而更方便的用法,應該是在選取要搜尋的文字後,按下快速鍵 Shift + Alt + F,這樣就可以了。
老實說,個人大多是使用傳統的搜尋介面、而很少使用這個介面…或許之後要再來認真用看看吧?
而這部份更詳細的說明則可以參考《17.9 Preview 3 brings exciting changes to Code Search》這篇。
讓 AI 產生 Git 的 commit 內容
基本上是 GitHub Copilot 的訂閱用戶才能用的功能,沒付錢不能玩。
這邊可以在 Visual Studio 中、要進行 commit 的時候、讓 Copilot 幫忙根據程式碼的變化來產生 commit 的內容做為版本紀錄。
再來,則是 C++ 的部分。
分析和追蹤「include」指示詞
這項功能會針對 C++ 的 #include
來進行分析,告訴使用者每個 header 檔被參考的次數、以及在建置時所需要的時間。預設是關閉的,要開啟要的話可以在程式碼編輯器的右鍵選單裡面,在「#include 指示詞」中,找到「開啟 #include 診斷」的選項。
如果要關閉的話,則也是同樣的方式。
在開啟之後,在程式碼中的每一個 header 檔上方,就會顯示該檔案被參考(使用)的次數(這個顯示功能是 CodeLens),可以方便開發者判斷這個 include 是否為必要的;而如果點選他的話,則會顯示出所有參考的項目、方便跳到該處去進行編輯。
不過感覺上他這邊的參考次數似乎是僅針對檔案進行的?比如說在 a.h
裡面去引用了一個 b.h
,但是實際上是在 a.cpp
才有使用 b.h
的內容的話,那在 a.h
裡面會顯示 b.h
是「0 個參考」;所以實際上,應該不能看到這邊沒有參考就把它拿掉,可能會造成其他問題的。
而如果有使用「Build Insights」的話,他也還會顯示這個 header 檔案建置時花費的時間:
要讓他出來的話,可以透過選單的「建置」、「在解決方案上執行 Build Insights」;或怎也可以在方案總管中,透過右鍵選單個別執行。
將 C++ 記憶體配置可視化
在 17.8 的時候,Visual Studio 有加入可以顯示 C++ 資料結構大小、對齊的功能了;而這一版則是進一步、把整個資料結構的記憶體配置視覺化、讓開發者方便觀察、調整了!
假設現在有一個類別是:
class User { protected: size_t uIndex; std::string sName; uint8_t uAge; float fScore; std::string sEMail; uint16_t uEID; };
在這一版 Visual Studio 裡面,把滑鼠游標移到類別名稱上,除了會顯示出大小和對齊的資訊外,右下角會多一個「記憶體配置」的連結。
點下去後,他就會另外開一個文件、顯示記憶體配置圖了!
而如果把滑鼠游標移動到個別成員上,也會看到相關的資訊。
如果要調整記憶體配置、避免浪費的話,這功能應該是有相當的幫助的。像是上面的例子如果把最後的 uEID
往前移的話,就可以減少一點點記憶體使用了。
更完整的介紹可以參考《Size, Alignment, and Memory Layout Insights for C++ Classes, Structs, and Unions》這篇。
支援 mdspan
std::mdspan
(C++ Reference)是 C++23 中加入的新的容器,他基本上是 C++20 的 span
的多維度版本;它可以讓開發者可以將一個一維陣列轉換成多維陣列的形式來使用,對個人來說也是相當期待的一個新的函式庫。
(之前在《C++23 更直覺的多維度資料的存取》也有稍微提到過)
支援遠端 Linux 的測試
應該是針對 CMake 類型的 Linux 專案,現在也可以直接在 Visual Studio 的「測試總管」中執行測試了。
詳細的資料似乎是可以參考《Azure Networking Team reaches peak productivity with Visual Studio’s new remote Linux capabilities and improvements》。
使用自己的 CMake 執行檔
以往 Visual Studio 會自行安裝 CMake、並使用預設的版本。而考量到使用者可能會需要特定版本的 CMake,現在 Visual Studio 也讓使用者可以自己指定要使用哪個版本的 CMake。
如果不想用預設版本的話,可以到「工具」、「選項」、「CMake」裡面,找到「自訂 CMake 資訊」的設定來指定要使用的 CMake 執行檔。
最後,則是個人覺得比較細節、對一般人可能沒那麼重要的東西:
-
使用括號快速包圍您的程序代碼
這個是個人覺得有點微妙、或是說不太確定改了哪些的東西。照他的說法,這個選項是預設關閉的,要開啟要到「工具」、「選項」、「文字編輯器」中,找到「輸入引號或括弧時自動圍繞選取範圍」來開啟。
根據社群討論(連結)的內容,應該是指在已經選取文字的狀況下,輸入單引號(
'
)、雙引號("
)和括號((
)會自動在選取文字的尾端補上另一個成對的結尾。但是就 Heresy 自己的印象,在 C++ 裡面雙引號和括號本來就有這功能了?所以對於 C++ 來說,這次是指加入單引號的功能嗎? o_O
-
VSConfig 支援延伸模組
VSConfig 是在 17.5 的時候,加入的安裝組態功能,它可以用來記錄要安裝那些模組、方便大量部屬。
而在這個版本開始,則是也支援延伸模組(extension)的部分了。
-
探索並啟用訂閱者權益
在視窗右上角、使用者帳號的圖旁邊多了一顆鑽石,針對訂閱用戶在點下去後會出現可以使用的訂閱者權益(例如 Azure 點數)。
-
在沒有視覺中斷的情況下進行偵錯
這個應該是對應到官方部落格的「Non-modal Debug Visualizers」(連結),代表偵錯階段的視覺化顯示視窗會變成 Non-modal 的模式,也就是在開啟的狀況下還可以操作其他功能;這樣的設計會讓整個除厝的流程更順暢、可以在開啟這些視覺化工具的情況下繼續除錯。
不過在 Heresy 這邊似乎沒有改變?字串的視覺化顯示視窗還是 modal 模式…
大概就這樣了?
話說,個人覺得比較可惜的,是現在 AI 輔助開發的部分,在 Visual Studio 上似乎都還沒有比較好的第三方方案可以拿來取代 GitHub Copilot?
在模型的部分,現在已經有 Code Llama(參考)和 Stable Code(參考)這些可以自己 host 的開放模型了;但是在 Visual Studio Code 上似乎還有一些延伸套件可以用,但是回到 Visual Studio 反而沒什麼可以用的感覺… orz
就不知道之後到底會不會有可以掛自己的模型的延伸套件可以玩了。