此次發布的 Visual Studio 2019 版本 16.8 的新增功能摘要
F#:
- F# 5 現在與 .NET 5 一起發布
- 通過 F# 工具版本 11.0.0 對 Visual Studio 工具進行性能改進和修復
- GitHub 上提供了完整發行說明
C++:
- 現在,/std:c++latest 和 <coroutine> 標頭中支持 C++20 協同例程。
- IntelliSense 現提供對 C++20 <concepts> 和 <ranges> 標頭的支持,還支持重命名和瀏覽概念定義。
- STL 現支持大多數 C++20 范圍。
- MSVC 中現支持有條件的平凡特殊成員函數。
- /std:c11 和 /std:c17 開關下現支持 C11 和 C17。
- 在 STL 方面的其他改進包括對 std::atomic_ref、std::midpoint and std::lerp 和 std::execution::unseq 的完全支持,以及針對 std::reverse_copy 的優化等等。
- 將 Visual Studio 附帶的 CMake 版本升級到了 CMake 3.18。
- 我們的代碼分析工具現支持 SARIF 2.1 標准(即行業標准靜態分析格式)。
- 如果 Linux 項目中缺少生成工具,現將在工具欄中發出一個警告並在錯誤列表中明確描述缺少的工具。
- 你現可直接通過 Visual Studio 在遠程 Linux 系統或 WSL 上調試 Linux 核心轉儲。
- 對於 C++ Doxygen 注釋生成,我們添加了其他注釋樣式選項(/*! 和 //!)。
- 其他 vcpkg 公告
- 在未求值的上下文中對 lambda 的編譯器支持
- /debug:通過創建多線程 pdb 改善了完整鏈接性能。 幾個大型應用程序和 AAA 游戲的鏈接速度提高了 2 到 4 倍。
- Visual Studio 調試器現支持 char8_t。
- 支持使用 clang-cl 的 ARM64 項目。
- Intel AMX 內部函數支持。
調試程序:
- 對 .NET Core Linux 核心轉儲調試的支持
- .NET 和 .NET Core 自動分析
- .NET 和 .NET Core 內存熱路徑自動分析
- Blazor 燈泡
- C# 燈泡
- 使 Razor 格式化得到增強
- 從 .razor 文件中重命名標記中的 Razor 組件
- Blazor 組件標簽命名空間的“轉到定義”功能
- C# 懸停着色
- C# 完成工具提示着色
- Razor 的實用定義/實現,包括已關閉的文件
- 在已關閉的 Razor 文件中“查找所有引用”
- 針對大型項目和解決方案,改進了 Razor 編輯性能和穩定性
- 對 SDK 樣式的項目使用新的 Fakes 支持時,一些用戶在生成填充碼時遇到以下問題
- 詳細了解如何使用新的聯機文檔中的所有 Git 功能
- 通過“Git 更改”窗口、“視圖”菜單和狀態欄,隨時打開“Git 存儲庫”窗口
- 在“Git 更改”窗口中從多個遠程庫提取、拉取和推送
- 在“Git 存儲庫”窗口頂部查看 Git 命令的成功消息和錯誤消息
- 基於 Azure DevOps 工作項創建一個新分支
- 從 Git 菜單中的本地存儲庫列表打開 Git 存儲庫
- 現在,默認源代碼管理提供程序是 Git,而不是 TFVC
- 單擊可在“Git 存儲庫”窗口中的分支歷史記錄之間進行切換
- 在 Live Share 會話中以來賓身份使用只讀模式訪問“新建 Git”窗口
- 打開存儲庫后,在解決方案資源管理器中查看並選擇解決方案列表
- 通過“Git 存儲庫”窗口中的工具欄修改歷史記錄視圖並搜索提交
- 從分支歷史記錄圖中的傳入和傳出提交部分提取、拉取和推送
- 在將分支推送到遠程位置后獲得創建拉取請求的提示
- 在分支列表上下文菜單中查看合並和變基命令中的分支名稱
- 通過解決方案資源管理器和編輯器中的上下文菜單訪問 Git 命令
- 通過新的模式對話,可查看克隆進度,並可選擇將進程移到后台
IntelliCode:
- Roslyn 分析器現包含在 .NET 5.0 SDK 中
- 出現抑制運算符時,引入與語法相匹配的新的 C# 9
not
模式的重構 - 內聯方法重構,有助於替換單個語句主體中的靜態、實例和擴展方法的用法
- 可將
typeof
的實例轉換為nameof
(在 C# 中),將GetType
的實例轉換為NameOf
(在 Visual Basic 中)的代碼修復 - 對 C# 和 Visual Basic 的內聯參數名稱提示支持,可在函數調用中的每個參數之前插入對文本、強制轉換文本和對象實例化的修飾
- 將所選類中的成員提取到 C# 和 Visual Basic 中的新基類的重構
- 代碼清除包含新的配置選項,這些選項可將 EditorConfig 文件中設置的格式設置和文件頭首選項應用於單個文件或整個解決方案
- 可在不應通過引用傳遞參數時刪除
in
關鍵字的代碼修復 - 引入新的 C#9 模式組合器和模式匹配建議(例如,轉換
==
以使用is
(如果適用))的重構 - 嘗試在非抽象類中編寫抽象方法時,可以將類變為抽象類的代碼修復
- 鍵入第一個引號時,自動顯示 DateTime 和 TimeSpan 字符串文本中的 IntelliSense 完成項
- 用於刪除不必要的
pragma suppressions
和不必要的SuppressMessageAttributes
的代碼修復 Rename
和Find All References
理解對全局SuppressMessageAttributes
的目標字符串內符號的引用- ByVal 淡化表明並不需要它,並提供代碼修復來刪除 Visual Basic 中不必要的 ByVal
- 對多個運行時(例如 .NET Framework 和 .NET Core)的交互式窗口支持。
- 添加了新的 RegisterAdditionalFileAction API,分析器作者可通過它創建適用於其他文件的分析器。
- 使用帳戶管理體驗添加 GitHub 帳戶
- 在此版本中,棄用了舊的“在文件中查找”體驗,並且所有用戶都將移動到新體驗。 編輯器團隊正積極與遇到“在文件中查找”新式體驗問題並在開發人員社區中留下反饋的人員合作解決問題。
- ClickOnce 發布提供程序現可用於 .NET Core 3.1 和 .NET 5.0 Windows 桌面應用程序。
XAML 工具(WPF、UWP 和 Xamarin.Forms):
- XAML 綁定失敗診斷改進
- XAML 熱重載設置已移至“調試”>“熱重載”
- 來自未引用的 NuGet 包的工具箱填充
JavaScript/TypeScript:
- JavaScript/TypeScript 調試器現支持同時調試服務輔助角色、Web 輔助進程、iFrame 和頁面 JavaScript! 此外,新的調試體驗還支持在瀏覽器中同時調試后端節點服務器應用程序和客戶端 JavaScript。 該功能仍以試驗版提供。 可以在“調試選項”菜單中啟用新的調試體驗
- 現在,可以通過使用代碼操作快捷鍵 (ctrl + .) 在可用的任何位置觸發重構。 甚至不需要選擇任何文本 - TypeScript 現在足夠智能,可以查找光標位置來獲得最佳的可用重構!
- 現在,可以微調 TypeScript 搜索哪些包以自動完成導入。 這可以在含有很多依賴項的項目中提高性能。 有關更多詳細信息,請參閱 TypeScript 4.0 (發行說明)[https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html ]
- 我們在輸出窗格中添加了一條消息,顯示我們安裝了哪些類型以支持 IntelliSense。 我們建議將 tsconfig 添加到你的項目,以自定義使用的類型。
- 請注意,我們包括 TypeScript 4.0 編譯器和語言服務
安全顧問公告
CVE-2020-17100 Visual Studio 篡改漏洞
針對 Visual Studio 的 Python 工具創建 python27 文件夾時存在篡改漏洞。 成功利用此漏洞的攻擊者可在提升的上下文中運行進程。
此版本中解決的問題
- 解決了這樣一個問題,那就是使用 Intel C++ 編譯器的 80 位長雙精度型在 Visual Studio 2019 16.7 中編譯會引發編譯器錯誤,從而阻止生成項目。
- 解決了 Live Unit Testing 在某些場景中拒絕啟動的問題。
- 向 Visual Studio 2019 v16.8 預覽版 4 添加了 .NET 5.0.RC2
- 修復了導致會開始臨時 Git 操作且該操作永不完成的一個 bug。
- 向 Visual Studio Codespaces 創建和連接添加了附加功能。 注冊適用於 Visual Studio 的 GitHub Codespaces,嘗試使用它。
- 修復了一個 bug。當關閉或退出 ASP.NET Core 解決方案時,該 bug 導致 Visual Studio 2019 崩潰或停止響應。
Visual Studio 2019 版本 16.8.0 中的新增功能詳細信息
C++
- 現在 /std:c++latest 和 標頭中支持 C++20 協同例程。 在 <experimental/coroutine> 和 /await 開關中提供對舊行為的支持。
- IntelliSense 現提供對 C++20 和 標頭的支持,還支持重命名和瀏覽概念定義。 存在一項我們預計將在預覽版 4 中解決的已知問題。
- STL 現支持大多數 C++20 范圍。 你可在我們的 GitHub 上關於范圍的問題上跟蹤我們的進度。
- MSVC 中現支持有條件的平凡特殊成員函數。
- /std:c11 和 /std:c17 開關下現支持 C11 和 C17。
- 在 STL 方面的其他改進包括對 std::atomic_ref、std::midpoint and std::lerp 和 std::execution::unseq 的完全支持,以及針對 std::reverse_copy 的優化等等。 可在我們的更改日志中找到各項更新。
- 我們將 Visual Studio 附帶的 CMake 版本升級到了 CMake 3.18。
- 我們的代碼分析工具現支持 SARIF 2.1 標准(即行業標准靜態分析格式)。 可在官方規范中詳細了解 SARIF 格式。
- 如果 Linux 項目中缺少生成工具,現將在工具欄中發出一個警告並在錯誤列表中明確描述缺少的工具。
- 你現可直接通過 Visual Studio 在遠程 Linux 系統或 WSL 上調試 Linux 核心轉儲。
- 對於 C++ Doxygen 注釋生成,我們添加了其他注釋樣式選項(/*! 和 //!)。
- 其他 vcpkg 公告
- 添加了對未計算上下文中的 lambda 的編譯器支持,讓你可以在 decltype 說明符中使用 lambda。
- 現在 Visual Studio 中提供建入時 Linter 和修補程序。 通過“工具”->“選項”->“文本編輯器”->“C/C++”->“代碼樣式”->“Linter + 修復”。

調試器
對 .NET Core Linux 核心轉儲調試的支持
到目前為止,很難實現對 Windows 上托管的 Linux 核心轉儲的調試,它常常意味着再設置一個與生產環境完全鏡像的 Linux 環境,然后安裝一組用於分析的工具。 慶幸地是,借助 Visual Studio 2019 16.8 預覽版 3,你只需將托管 Linux 核心轉儲直接拖放到 IDE 中就可立即開始調試。
.NET 自動分析
異步編程已在 .NET 平台上推出多年,但之前一直很難做得很好。 我們引入了托管內存轉儲分析器,它可幫助識別以下方案和反模式:
- Sync-over-Async
- 線程池耗盡
.NET 和 .NET Core 內存熱路徑自動分析
這使得客戶可使用“診斷內存工具”窗口中的 Flame 注釋直觀查看其內存堆中主要的對象類型。
造成 SDK 樣式的項目在生成填充碼時出現問題的 Fakes
對 SDK 樣式的項目使用新的 Microsoft Fakes 支持時,一些用戶在生成填充碼時遇到以下問題。
Cannot generate shim for System.DateTime: type is not supported because of internal limitations
16.8 預覽版 3 中發布了此問題的修補程序。 如果你使用的是 16.7.* 版本,則可使用以下暫時解決方法:
- 將 <FakesUseV2Generation>False</FakesUseV2Generation> 添加到 csproj 文件中的 PropertyGroup。
- 將 <Fakes Include="Fakes\.fakes" /> 添加到 csproj 文件中的 ItemGroup。.fakes" /> to an ItemGroup in your csproj file.
- 在 ProjectDir/FakesAssemblies 中添加對生成的 Fakes 程序集的引用。
還可按照開發者社區反饋獲取其他更新。
實驗性 Razor 編輯器更新
新的實驗性 Razor 編輯器現在支持以下 Razor 編輯功能:
- Blazor 燈泡:
- 提取到代碼后置*:
- 根據標記創建組件*
- 為組件添加
@using
指令 - 完全限定組件標記名稱
- C# 燈泡
- 添加
@using
指令 - 完全限定類型名稱
- 添加
- 使 Razor 格式化得到增強
- 從 .razor 文件中重命名標記中的 Razor 組件
- Blazor 組件標簽名稱的“轉到定義”功能
- C# 懸停着色
- C# 完成工具提示着色
- 在已關閉的 Razor 文件中“查找所有引用”
- 針對大型項目和解決方案,改進了 Razor 編輯性能和穩定性
* 僅適用於本地 Razor 方案,Codespaces 或 Live Share 中尚不支持該功能。
若要啟用實驗性 Razor 編輯器,請轉到“工具” > “選項” > “環境” > “預覽功能”,選擇“啟用實驗性 Razor 編輯器”,然后重新啟動 Visual Studio。
Visual Studio 2019 IDE
- 使用熟悉的 Visual Studio 帳戶管理體驗添加 GitHub 帳戶。 版本控制、集成終端和其他功能隨后將能夠使用你的帳戶憑據來滿足其 GitHub 身份驗證需求。

- ClickOnce 發布提供程序現可用於 .NET Core 3.1 和 .NET 5.0 Windows 桌面應用程序。 若要開始使用,請在解決方案資源管理器中右鍵單擊項目,然后選擇“發布”,或選擇“生成”>“發布 ”菜單。 可以在文件夾類別下找到 ClickOnce。

Git 效率
-
基於 Azure DevOps 工作項創建一個新分支
-
從 Git 菜單中的本地存儲庫列表打開 Git 存儲庫

-
默認源代碼管理提供程序現在是 Git 而不是 TFVC;你可通過“工具”-“選項”-“源代碼管理”進行更改
-
單擊可在“Git 存儲庫”窗口中的分支歷史記錄之間進行切換
-
在 Live Share 會話中以來賓身份使用只讀模式訪問“新建 Git”窗口
-
打開存儲庫后,在解決方案資源管理器中查看並選擇存儲庫中的解決方案列表

.NET 效率
- .NET Compiler Platform (Roslyn) 分析會檢查 C# 或 Visual Basic 代碼的安全性、性能、設計和其他問題。 從 .NET 5.0 開始,這些分析器包含在 .NET SDK 中。 分析器針對面向 .NET 5.0 或更高版本的項目默認啟用。 可通過將 EnableNETAnalyzers 屬性設置為 true,在面向 .NET 早期版本的項目上啟用代碼分析。 可通過將 EnableNETAnalyzers 設置為 false,為項目禁用代碼分析 。 還可使“項目屬性”窗口啟用/禁用 .NET 分析器。 若要訪問“項目屬性”窗口,請在解決方案資源管理器中右鍵單擊一個項目,然后選擇“屬性” 。 接下來,請選擇“代碼分析”選項卡;在這里,你可選擇或清除“啟用 .NET 分析器”復選框 。

- 現在有一個重構,它引入了在出現抑制運算符時與語法相匹配的新的 C# 9
not
模式。 將光標放在抑制運算符上。 按 (Ctrl+.) 觸發“快速操作和重構”菜單 。 選擇“使用模式匹配”。

- 現在有一個內聯方法重構,它可幫助你將單個語句中對靜態、實例和擴展方法的使用替換為刪除原始方法聲明的選項。 將光標放在方法使用上。 按 (Ctrl+.) 觸發“快速操作和重構”菜單 。 接下來,選擇以下選項之一:
選擇“內聯 <QualifiedMethodName>
”,刪除內聯方法聲明:
