Visual Studio 2017 15.8 版本已正式發(fā)布,現(xiàn)可選擇在開始安裝之前下載所有安裝文件。要使用這一新選項,請在安裝程序中選擇“全部下載后再安裝”選項。 如果 Internet 連接速度較慢,建議使用此選項。默認選項仍為“下載時安裝”,它可并行下載和安裝。
性能
此版本包含以下性能改進:
由于無需再重新加載解決方案,因此可更快地對大型解決方案執(zhí)行 C#、VB 和 C++ 項目的分支切換。
縮短在大型解決方案中卸載和重載一小組 C# 和 VB 項目的時間 - 從數(shù)分鐘縮短到數(shù)秒鐘。
添加了一個選項,用于禁止重新打開已在上一會話中打開的文檔,因為重新打開某些類型的文件或設(shè)計器會延遲解決方案加載。
通過“工具”>“選項”>“項目”>“解決方案”>“常規(guī)”切換此選項。
測試性能
顯著提升了在運行包含多個測試項目的大型解決方案期間的性能。 在我們的實驗室中,超過 10,000 個 MSTest 的解決方案執(zhí)行單個測試的速度提高了 82%!
Visual Basic 性能改進
Visual Basic 現(xiàn)顯著提升了使用 CInt(Fix(number)) 模式將非整數(shù)類型轉(zhuǎn)換為整數(shù)時的性能。
性能分析
此版本在以下方面增強了性能分析功能:
添加了“啟動但暫停分析”功能:
性能探查器 (ALT-F2) 中的 CPU 使用情況工具現(xiàn)可啟動但暫停分析。 如果 CPU 使用情況調(diào)查在一段時間后才提供有價值的結(jié)果,則此功能非常有用。 通過在禁用 CPU 使用情況收集的情況下啟動,性能探查器將不收集任何 CPU 使用情況示例堆棧數(shù)據(jù),直到專門啟用此類數(shù)據(jù)。 這樣一來,收集和分析的數(shù)據(jù)量大幅降低,從而使性能調(diào)查更加高效。
要在禁用 CPU 使用情況示例收集的情況下啟動會話,請在性能探查器啟動頁中單擊 CPU 使用情況工具旁邊的設(shè)置(齒輪)圖標,以顯示 CPU 使用情況屬性頁,然后取消選中標記為“啟用 CPU 分析(采樣)”的復(fù)選框。 最后,按“確定”以保存這些設(shè)置。
\*啟動目標應(yīng)用程序后(按性能探查器啟動頁中的“開始”按鈕),將看到一個顯示 CPU 使用率圖的監(jiān)視屏幕,你可通過它控制 CPU 分析**。 要啟用 CPU 使用情況示例堆棧數(shù)據(jù)收集功能,請按視圖中間的“啟用 CPU 分析”鏈接,或單擊 CPU 使用率圖下方的“記錄 CPU 配置文件”按鈕。 可單擊“記錄 CPU 配置文件”按鈕,根據(jù)需要多次啟用/禁用示例數(shù)據(jù)收集。 CPU 使用率圖的顏色出現(xiàn)相應(yīng)變化,表示在該時間點是否啟用/禁用示例收集。
添加了 .NET 對象分配跟蹤工具:
向性能探查器提供的工具系列增添了 .NET 對象分配跟蹤工具。 如果為性能探查器會話調(diào)用此工具,將為目標應(yīng)用程序中發(fā)生的每個 .NET 對象分配收集堆棧跟蹤。 此堆棧數(shù)據(jù)和對象類型及大小信息一同進行分析,以顯示應(yīng)用程序的內(nèi)存活動詳情。 你可以快速確定代碼中的分配模式并識別異常。 此外,對于垃圾回收 (GC) 事件,用戶可輕松確定已收集和保留了哪些對象,從而快速確定占用應(yīng)用程序大部分內(nèi)存的對象類型。
這對 API 編寫器來說尤其有用,有助于最大程度減少分配。 許多應(yīng)用程序都會超出診斷數(shù)據(jù)收集中涉及的緩沖區(qū)限制,但仍可很好地診斷執(zhí)行 API 關(guān)鍵方案的小型測試應(yīng)用程序。 測試應(yīng)用程序執(zhí)行過程中,性能探查器會顯示一個監(jiān)視視圖,其中包含實時對象(計數(shù))的折線圖和對象增量(百分比變化)的條形圖。
要使用 .NET 對象分配跟蹤工具,請調(diào)出性能探查器啟動頁,選擇要分析的目標(默認目標是解決方案中的啟動項目),從可用工具列表中勾選“.NET 對象分配跟蹤”,然后按“開始”按鈕。
性能分析(CPU 使用情況)
此版本對性能探查器的 CPU 使用情況工具做出了以下改進(可通過 ALT-F2 獲得):
默認情況下,“調(diào)用樹”視圖現(xiàn)按邏輯調(diào)用堆棧顯示異步執(zhí)行。 可通過取消選中 CPU 使用情況主視圖的“篩選器”下拉列表中的“拼結(jié)異步代碼”選項來關(guān)閉此行為。
添加了“模塊/函數(shù)”視圖,該視圖按模塊 (dll) 和模塊內(nèi)的函數(shù)顯示性能信息。 在 CPU 使用情況主視圖中選擇函數(shù)時,可從上下文菜單中顯示“模塊/函數(shù)”視圖,也可以從“調(diào)用樹”或“調(diào)用方/被調(diào)用方”視圖的“查看”下拉列表中顯示“模塊/函數(shù)”視圖。
在 CPU 使用情況工具的主視圖中,為 CPU 使用情況圖添加了“實例指示”。 雙擊任意 CPU 使用情況視圖中列出的函數(shù),即可在函數(shù)執(zhí)行時(例如在堆棧上)查看實例。
生產(chǎn)力
此版本在以下方面提升了生產(chǎn)力:
可使用格式文檔(Ctrl + K、D 或 Ctrl + E、D)執(zhí)行其他代碼清理進行 C# 開發(fā)。 按以下方式配置清理:轉(zhuǎn)到“工具” > “選項” > “文本編輯器” > “C#” > “代碼樣式” > “格式” > “常規(guī)”。
增添了更多使用 Ctrl + . 或 Alt + Enter 的重構(gòu)和快速操作:
dotnet_style_prefer_conditional_expression_over_assignment
dotnet_style_prefer_conditional_expression_over_return
dotnet_style_parentheses_in_arithmetic_binary_operators
dotnet_style_parentheses_in_relational_binary_operators
dotnet_style_parentheses_in_other_binary_operators
dotnet_style_parentheses_in_other_operators
“倒轉(zhuǎn) If”可讓 if-else 語句中的邏輯反轉(zhuǎn)。 將光標置于 if 關(guān)鍵字,以觸發(fā)此重構(gòu)。
通過從方法調(diào)用站點添加參數(shù),可向方法調(diào)用站點添加參數(shù)并觸發(fā)“快速操作和重構(gòu)”,從而向方法添加參數(shù)。
刪除不必要的括號時會一并刪除對編譯不重要的二元運算符兩側(cè)的括號。 可通過“工具” > “選項” > “文本編輯器” > “C#” > “代碼樣式” > “常規(guī)”或以下 .editorconfig 配置此樣式規(guī)則:
此外,還可通過“工具” > “選項” > 或以下 .editorconfig 將“在分配中使用三元條件并返回語句”配置為樣式規(guī)則:
在“轉(zhuǎn)到所有”窗口中添加了新的命令和改進功能:
通過“轉(zhuǎn)到封閉塊”(Ctrl + Alt + 向上鍵),可快速導(dǎo)航到封閉代碼塊的開頭。
通過“轉(zhuǎn)到下一個/上一個問題”(Alt + PgUp/PgDn),可跳到下一個/上一個問題(錯誤、波形曲線和燈泡)。
“轉(zhuǎn)到成員”(Ctrl + T、M)現(xiàn)默認適用于文件。 可通過將作用域切換到當前文檔 (Ctrl + Alt + C),使默認值更改回解決方案。
借助對多個插入點的支持,現(xiàn)可在文件中的多個任意位置創(chuàng)建插入點并選擇內(nèi)容。 這樣,你可以同時在多個位置添加、編輯或刪除文本。
通過“Ctrl + Alt + 單擊鼠標左鍵”插入點。
使用 Shift + Alt + Ins 在與當前所選內(nèi)容匹配的下一個位置添加所選內(nèi)容和插入點。
有關(guān)完整操作列表,請參閱“‘編輯’>‘多個插入點’”。
使用 Alt + ` 訪問上下文導(dǎo)航菜單。
讓鍵綁定與 Visual Studio Code 和 ReSharper (Visual Studio) 這兩個新的鍵盤配置文件保持一致:。 可訪問“工具”>“選項”>“常規(guī)”>“鍵盤”,再使用頂部的下拉菜單查找這些方案。
調(diào)試
此版本在以下方面增強了調(diào)試功能:
如果安裝有多個 Visual Studio 2017 實例,在調(diào)試時現(xiàn)在可選擇要將擴展部署到的實例。 這樣,在預(yù)覽通道中調(diào)試時可以在諸如 Visual Studio 版本等通道中開發(fā)。
\*現(xiàn)在可以直接從發(fā)布摘要頁附加 Snapshot Debugger__。
適用于通用 Windows 平臺開發(fā)的工具
在 Windows 10 Fall Creators Update(內(nèi)部版本 16299)或更高版本的目標平臺版本中,我們對面向通用 Windows 平臺的項目的 XAML 設(shè)計器進行了許多重要改進。
現(xiàn)可在屬性檢查器中編輯集合。
設(shè)計器現(xiàn)在允許對模板和樣式進行編輯,包括這些實體的定義在其他文檔中定義時。
類型 IconElement(如 AppBarButton 中的圖標)的屬性現(xiàn)在在屬性檢查器中有一個自定義編輯器,使設(shè)置這些屬性變得更容易。
設(shè)計器、編輯器和“編輯并繼續(xù)”現(xiàn)都應(yīng)適用于 x:DefaultBindMode。
Blend 中的視覺狀態(tài)管理器體驗現(xiàn)在支持 AdaptiveTrigger。
用于 Visual Studio 的 F# 4.5 和 F# 工具
此版本中我們引入了 F# 語言版本 4.5。 這也與新的 FSharp.Core 4.5.x 系列(F# 核心庫)保持一致。 可以在 F# RFC 存儲庫中閱讀每個更改的說明。 此版本中還有對用于 Visual Studio 的 F# 工具的諸多改進。
F# 4.5
下面是 F# 語言版本 4.5 中的一些亮點:
Span 支持
我們實現(xiàn)了 Span 和相關(guān)功能,因此在 F# 中可通過 Span、Memory 和 ref 之類的構(gòu)造來有效使用和生成 API。 功能包括:
新的 voidptr 類型。
FSharp.Core 中新的 NativePtr.ofVoidPtr 和 NativePtr.toVoidPtr 函數(shù)。
新的類型 inref 和 outref,分別是只讀的 byref 和只寫的 byref。 此值對應(yīng)于 C# 中的 in ref 和 out ref。
能夠生成 ByRefLike 結(jié)構(gòu)(如 Span 和 ReadOnlySpan)。
能夠生成 IsReadOnly 結(jié)構(gòu)。
隱式取消引用方法中的 byref 返回值和 inref 返回值。
能夠在 byref/inref/outref 上生成擴展成員。
此功能集修復(fù)了 F# 4.1中 byref 返回值初始設(shè)計的一個 bug - 即返回 byref 的函數(shù)、方法和屬性未隱式取消引用返回值。 我們進行此更改,使該功能與 C# 處理 ref 返回值的方式保持一致。 當類型批注指示現(xiàn)在使用 ref 返回值的隱式取消引用時,將用到錯誤消息。
此外,此功能集還修復(fù)了 F# 編譯器中的一個 bug - 即可以進行“不良結(jié)構(gòu)替換”,也就是說,調(diào)用 F# 結(jié)構(gòu)上的方法時可以使用其他結(jié)構(gòu)替換正調(diào)用的實際結(jié)構(gòu)。 現(xiàn)將結(jié)構(gòu)上的 this 參數(shù)視為 inref,其中包含一條錯誤:如果你希望修改該結(jié)構(gòu)則該錯誤建議添加可變字段。
可在此功能集的 RFC 中詳細了解 span 和 ref 之類的構(gòu)造。
計算表達式中的 Match!
F# 4.5 引入了 match!,一個用在計算表達式中的新關(guān)鍵字(由 John Wostenberg 獨立提供)。 此語法糖等同于在結(jié)果中 let! 后跟 match。 可在 match! 的 RFC 中了解詳細信息。
放寬了使用 yield 時序列、列表和數(shù)組表達式中的向上轉(zhuǎn)換要求
F# 4.5 現(xiàn)在放寬了某些限制:使用 yield 時需要向上轉(zhuǎn)換來將子類型轉(zhuǎn)換為超類型。 自 F# 3.1 起如果不使用 yield 這些表達式中已無此限制,因此此項改進使得與現(xiàn)有行為更加一致。 可在此功能的 RFC 中了解詳細信息。
列表和數(shù)組括號上允許縮進
F# 4.5 現(xiàn)在放松了列表和數(shù)組括號的縮進規(guī)則,此前如果列表和數(shù)組括號位于自己的行上需將其向前縮進一個作用域。 這項要求一直以來都非常令人困惑,尤其是對 F# 初學(xué)者。 此外,F(xiàn)# 序列表達式無此要求。 現(xiàn)在,數(shù)組表達和列表表達式與序列表達式一樣,不再受此要求限制。 可在此功能的 RFC 中了解詳細信息。
枚舉用例以公共形式發(fā)出
現(xiàn)在 F# 4.5 在所有情況下以公共形式發(fā)出枚舉用例,以與 C# 發(fā)出枚舉用例的方式保持一致。 這也更便于分析工具分析來自 F# 代碼的日志,其中發(fā)出的是值而不是標簽名稱。 可在此功能的 RFC 中了解詳細信息。
F# 編譯器改進
F# 4.5 中不僅包括之前提到的語言功能改進,也包括對 F# 編譯器的改進。 這些方法包括:
我們刪除了 F# 編譯器中高達 2.2% 的分配(各種情況下),改進了編譯器性能。
修復(fù)了對基于結(jié)構(gòu)的可枚舉對象使用 yield! 時 AccessViolatioNException 中產(chǎn)生的 bug。
現(xiàn)可再次從 FSharpFunc 中繼承。
對于 F# for .NET Core 的調(diào)試版本默認禁用尾調(diào)用。 它們在發(fā)布版本中啟用,因此與桌面版 F# 編譯器匹配。
修復(fù)了 F# 引用規(guī)范化,允許你控制寫入輸出文件的可傳遞程序集引用。 你便可執(zhí)行 .NET Core 上程序集重定向的等效操作。
修復(fù)了以下 bug:忽略了嘗試在內(nèi)聯(lián)函數(shù)上使用動態(tài)調(diào)用時用到的錯誤消息。 錯誤消息現(xiàn)將傳送。
F# 現(xiàn)在尊重你可在項目文件中設(shè)置的 WarningsNotAsErrors 標志。
Isaac Abraham 更新了模式匹配分支不返回相同類型時出現(xiàn)的錯誤消息,使其更加友好。
Steffen Forkmann 修復(fù)了編譯缺少重載方法實現(xiàn)的接口實現(xiàn)時出現(xiàn)內(nèi)部錯誤這一 bug。
Gauthier Segay 刪除了編譯器文法階段中一些沒必要的數(shù)組復(fù)制。
F# 枚舉上不完整的模式匹配現(xiàn)在生成詳細的警告,給出未涵蓋的用例示例(由 John Wostenberg 提供)。
`#nowarn "2003" 現(xiàn)在受到尊重(由 Matthias Diitrich 提供)。
Steffen Forkmann 修復(fù)了在 F# 重載解析中使用 C# 擴展方法可能失敗這一 bug。
Steffen Forkmann 修復(fù)了內(nèi)部 QueueList 數(shù)據(jù)結(jié)構(gòu) bug。
Steffen Forkmann、Eugene Auduchinok 和 ncave 還提供了各種小的優(yōu)化并進行了代碼清除工作。
F# 核心庫 4.5.x
現(xiàn)在推出了對 F# 核心庫的下列補充內(nèi)容:
完成了大量工作來改進 async { } 計算表達式的堆棧跟蹤。 現(xiàn)在應(yīng)能夠在堆棧跟蹤中查看用戶代碼和用戶行號。 可在此功能的 RFC 中了解詳細信息。
提供類型 System.Func 和 System.Action 重載的 FuncConvert.FromFunc 和 FuncConvert.FromAction API,幫助 C# 中的互操作。 可在此功能的 RFC 中了解詳細信息。
提供了新類型 ValueOption,它是旨在為活動模式帶來更好性能的系列未來功能中的首個功能。 可在此功能的 RFC 中了解詳細信息。
TryGetValue 現(xiàn)在是 F# Map 類型上的新成員。 可在此功能的 RFC 中了解詳細信息。
我們解決了首次調(diào)用 MailboxProcessor.TryReceive 時 CPU 使用率較高的問題。
bool 比較現(xiàn)在使用快速泛型比較(由 Vasily Kirichenko 提供)。
Array.allPairs 的摘要文本已更新為正確(由 Patrick McDonald 提供)
F# 工具改進
此版本中提供 F# 工具的重大改進,例如性能改進和一些新的編輯器功能。 與往常一樣,F(xiàn)# 開源社區(qū)提供了大量內(nèi)容,作出了巨大貢獻。 以下是一些亮點:
我們改進了所有形式的 .NET SDK 樣式項目的 IntelliSense 性能,包括那些使用多目標的項目。
Vasily KirichenkoSteffen Forkmann 和 Gauthier Segay 進行了社區(qū)驅(qū)動的工作,分析和改進了非常大的文件的 IntelliSense 性能。 非常大的文件(10k 以上的代碼行)中的 IntelliSense 現(xiàn)在約是原來的兩倍快。
過時 FSharp.Core(盡管安裝了包)的警告不再出現(xiàn)在 .NET SDK 樣式項目中。
IntelliSense 中 . 之后為成員顯示 XML 文檔的說明工具提示在 10 秒后不再超時。
修復(fù)了無法在對象構(gòu)造函數(shù)參數(shù)中設(shè)置斷點這一 bug。
修復(fù)了重命名符號屬于泛型參數(shù)時將進行復(fù)制這一 bug。
.NET Framework 的模板(經(jīng)典 F# 模板)現(xiàn)在使用來自 NuGet 包的 FSharp.Core,以便與 .NET SDK F# 模板保持一致。
現(xiàn)在為 ()、[]、{}、[||] 和 [] 大括號對提供自動的事務(wù)型大括號完成。 我們與 Gibran Rosa 一起完成這項工作。
現(xiàn)在,可以通過按住 Ctrl 并單擊 F# 符號來轉(zhuǎn)到定義。 此筆勢的設(shè)置在“工具”>“選項”窗口中也受到尊重。
修改了 IntelliSense 性能 UI,允許為各種 IDE 功能配置過時的 typecheck 信息。 每個選項的說明現(xiàn)在顯示在設(shè)置的工具提示中。
大括號匹配突出顯示現(xiàn)在正確地突出顯示大括號(與 Vasily Kirichenko 協(xié)作完成)。
現(xiàn)在當類型以遞歸方式定義時“轉(zhuǎn)到定義”正確導(dǎo)航(由 Vasily Kirichenko 提供)。
Vasily Kirichenko 修復(fù)了文件頂部為空時未將自動導(dǎo)入命名空間打開這一 bug。
Vasily Kirichenko 修復(fù)了將包含點的 printf 說明符錯誤地著色這一 bug。
Vasily Kirichenko 修復(fù)了將遞歸模塊內(nèi)所有打開項視為未使用這一 bug。
Vasily Kirichenko 大大提升了 Unused Opens 分析器的性能。
屬性自動完成功能現(xiàn)在僅建議確實是屬性的選項(由 Vasily Kirichenko 提供)。
現(xiàn)在為構(gòu)造函數(shù)調(diào)用站點上的類型提供程序靜態(tài)參數(shù)生成簽名幫助工具提示(由 Vasily Kirichenko 提供)。
Vasily Kirichenko 修復(fù)了將用作度量單位的值類型作為引用類型進行著色這一 bug。
Vasily Kirichenko 修復(fù)了滾動時一些文件的語義著色可能消失這一 bug。
現(xiàn)在提供了試驗性的 CodeLens 實現(xiàn)(由 Victor Peter Rouven Müller 提供)。 可在“選項”>“文本編輯器”>“F#”>“代碼透鏡”中將其打開。
Sebastian Urban 修復(fù)了 F# 編譯器服務(wù)會錯誤地省略 XML 文檔中模塊名稱的拼寫這一 bug。
使用 Dictionary 與 ContainsKey 和后續(xù) Item 調(diào)用的代碼已更改為使用 TryGetValue(由 Eugene Auduchinok 提供)。
Jakob Majoka 也參與了使用工具提示的其他 API 這一過程的創(chuàng)作。
基礎(chǔ)結(jié)構(gòu)、打包和開放源代碼改進
我們對基礎(chǔ)結(jié)構(gòu)、打包和開放源供稿體驗進行了以下改進:
隨 Visual Studio 分發(fā)的 F# 編譯器不再作為單一實例安裝在 F# 編譯器 SDK 位置。 它現(xiàn)在完全與 Visual Studio 并行,這意味著,并行安裝 Visual Studio 最后將導(dǎo)致具有真正的并行 F# 工具和語言體驗。
現(xiàn)對 FSharp.Core NuGet 包進行簽名。
ETW 日志記錄已添加到 F# 工具和編譯器。
FSharp.Core 中非常大的 control.fs/contro.fsi 文件現(xiàn)拆分為 async.fs/async.fsi、event.fs/event.fsi、eventmodule.fs/eventmodule.fsi、mailbox.fs/mailbox.fsi 和 observable.fs/observable.fsi。
我們添加了 .NET SDK 樣式版本的項目性能壓力測試項目。
從基本代碼中刪除了 Newtonsoft.Json,現(xiàn)在,你為 OSS 參與者下載的包將少一個。
我們現(xiàn)在使用最新版本的 System.Collections.Immutable 和 System.Reflection.Metadata。
C++ 符合性和工具集改進
此版本包含以下 C++ 符合性和工具集改進:
新的基于令牌的試驗性預(yù)處理器,它符合 C++ 11 項標準(包括 C99 預(yù)處理器功能),并通過 /experimental:preprocessor 開關(guān)啟用。 使用宏 _MSVC_TRADITIONAL 對其進行控制,使用傳統(tǒng)預(yù)處理器時定義為 1,使用符合標準的新試驗性預(yù)處理器時定義為 0。
Visual Studio 開發(fā)人員命令提示支持啟用 Visual C++ Spectre 變體 1 緩解運行時 (-vcvars_spectre_libs = spectre)。 有關(guān) Spectre 緩解的詳細信息,請參閱 Visual C++ 團隊博客。
向 SSA 優(yōu)化器添加的兩項新內(nèi)容重點關(guān)注新式 C++ 代碼生成:冗余存儲清除和冗余分支折疊。
優(yōu)化的內(nèi)存映射了鏈接器中的 I/O 性能以減少鏈接時間。
C++ 跨平臺開發(fā)
此版本中,我們改進了 C++ 跨平臺開發(fā),并向其添加了以下內(nèi)容:
添加了“添加” > “新項”模板,用于生成遵循“工具” > “選項”中為 ClangFormat 指定的編碼約定的 .clang 格式文件。 如果選擇 Visual Studio 約定,則生成的文件嘗試匹配“工具”>“選項”中用戶當前的 Visual Studio 格式設(shè)置配置。
將配送的 format.exe 版本更新到 6.0.0。
用于簡化向 CppProperties.json 添加配置的模板。
添加了模板以簡化向 CMakeSettings.json 添加配置。
C++ 生產(chǎn)力
下面是針對 C++ 生產(chǎn)力的增強功能和改進功能:
有關(guān)宏的 C++ 快速信息工具提示現(xiàn)在顯示它們的擴展功能,而不僅僅是其定義。 如果復(fù)雜宏在其闡明預(yù)處理器使用什么代替宏標識符時引用了其他宏,這將特別有用。
添加了新的快速修復(fù)燈泡,將基本宏轉(zhuǎn)換為 constexpr 作為使代碼變得新式的新工具。
用于模板的 IntelliSense 提供了有關(guān)模板參數(shù)的詳細信息,便于在模板正文中充分利用 IntelliSense。
我們正在努力使代碼分析體驗煥然一新。 你現(xiàn)在可以啟用“工具” > “選項” > “文本編輯器” > “C++” > “試驗” > “代碼分析”下新的進行中功能。 打開或保存文件時,代碼分析可在后臺中運行,并且結(jié)果顯示在錯誤列表中,在編輯器中顯示為綠色波形曲線。
C++ 調(diào)試改進
我們進行了以下調(diào)試改進:
僅我的代碼功能現(xiàn)在允許逐步執(zhí)行系統(tǒng)或第三方 C++ 庫中的代碼,以及折疊調(diào)用堆棧窗口中的那些調(diào)用。 當代碼使用 /JMC 進行編譯且 .natjmc 文件中指定了非用戶庫路徑時,可以為任何 C++ 庫控制此行為。 如果你在進入時系統(tǒng)庫調(diào)入用戶代碼,則調(diào)試器跳過所有系統(tǒng)代碼并在用戶代碼回調(diào)的第一行上停止。
數(shù)據(jù)斷點現(xiàn)在可在“監(jiān)視”、“快速監(jiān)視”、“自動”和“局部變量”窗口中進行設(shè)置,從而只需幾次短的單擊即可在存儲于內(nèi)存中的值發(fā)生更改時切斷。
源鏈接允許在編譯過程將可執(zhí)行的或庫的原始源代碼相關(guān)信息嵌入 PDB。
調(diào)試時,如果程序終止執(zhí)行,控制臺窗口現(xiàn)將默認保持打開狀態(tài)(類似于在沒有調(diào)試器的情況下運行程序)。 可以在“工具” > “選項” > “調(diào)試” > “常規(guī)”中將此行為切換回自動關(guān)閉控制臺。
Visual Studio Web 工具
庫管理器是 Visual Studio 2017 中包含的新功能。 有助于在 Web 項目中管理客戶端端庫。
容器工具
為 ASP.NET Core Web 項目添加了新的單個項目 Docker 容器體驗。 這補充了基于 Docker Compose 的現(xiàn)有容器工具,并提供了更簡單便捷的方法直接從 Visual Studio 創(chuàng)建、調(diào)試和生成 Docker 容器。
創(chuàng)建項目時,可以添加 Docker 支持。
或者,可以通過解決方案資源管理器中項目的上下文菜單對現(xiàn)有項目啟用 Docker 支持。 一旦執(zhí)行此操作,Visual Studio 將在項目中創(chuàng)建單個 Dockerfile。 可以選擇 Windows 還是 Linux。
Visual Studio 還添加用于 Docker 的調(diào)試器啟動配置文件,以便項目在容器內(nèi)運行時可對其進行調(diào)試。
如果有帶多個 Docker 項目的解決方案,默認情況下,選擇啟動解決方案時只有一個容器運行。 如果想要同時運行多個容器,可在解決方案資源管理器中右鍵單擊該項目,并選擇“設(shè)置啟動項目”、“多個啟動項目”,然后對要運行的所有項目將“操作”下拉列表設(shè)置為“啟動”或“啟動(不調(diào)試)”。
容器化項目按所需方式運行后,如果準備好將項目推送到 Azure 容器注冊表或 DockerHub,則可以右鍵單擊該項目并選擇“生成 Docker 映像”以本地生成映像。
此外可以通過新的“容器業(yè)務(wù)流程協(xié)調(diào)程序支持”選項向 ASP.NET Core Web 項目添加基于 Docker Compose 的現(xiàn)有功能。 在解決方案資源管理器中右鍵單擊 ASP.NET Core Web 項目,選擇“添加”>“容器業(yè)務(wù)流程協(xié)調(diào)程序支持”,然后從下拉列表菜單中選擇“Docker Compose”。
發(fā)布改進
此版本包含以下發(fā)布改進:
將 Docker 容器發(fā)布到容器注冊表時,現(xiàn)在可以自定義映像的標記。 可以手動添加標記(默認為“最新”),或使用自動生成的標記來確保每個標記是唯一的。
創(chuàng)建新的 Azure 應(yīng)用服務(wù)時,還可以配置 Application Insights 以自動收集遙測數(shù)據(jù)。 如果選擇的區(qū)域也有 Application Insights,則它默認啟用。 如果選擇的區(qū)域尚不包含 Application Insights,可以從下拉列表中為 Application Insights 資源手動指定其他區(qū)域。
發(fā)布 Azure Functions 項目時,可以選擇使用新的 Run-From-Zip 功能進行發(fā)布。
Visual Studio Tools for Xamarin
此版本包含以下 Xamarin 更新:
添加了對 Xcode 9.4 的支持。
創(chuàng)建新的 Xamarin.Forms 項目時,默認代碼共享選項現(xiàn)在為 .NET Standard。 共享項目選項仍然可用。
添加了 Android 增量生成的改進。 Xamarin.Android 利用在中間輸出目錄中生成的文件實現(xiàn)了比完整生成更快的增量生成。 以前,如果更改了項目的目標框架,它將使文件無效并在下次運行時實現(xiàn)完整生成。 在此版本中,現(xiàn)保留每個框架文件夾中的文件,這樣你可以在不同的目標框架之間進行切換,并且仍可使用增量生成。 通過清理項目,你可以回收保留的文件所占用的磁盤空間。
我們在 Visual Studio 2017 中添加了對 Xamarin.Mac 綁定項目的最低支持。 這樣,Visual Studio 就可加載 Xamarin.Mac 綁定項目并將其識別為“已受支持”。 另外,還可以生成 Xamarin.Mac 綁定項目,不過是在本地執(zhí)行生成過程而不是使用本機 Mac 工具鏈,因此在應(yīng)用中運行或調(diào)試時,不能使用生成的 IL 程序集。
Hyper-V Android Emulator 支持
此版本現(xiàn)在 Windows 10 的 2018 年 4 月更新上運行時支持使用與 Hyper-V 兼容的 Google Android Emulator。 這樣,你可以將 Google Android Emulator 與其他基于 Hyper-V 的技術(shù)(例如 Hyper-V 虛擬機、Docker 工具和 Hololens 模擬器等)并行使用。 現(xiàn)向使用 Hyper-V 的移動應(yīng)用開發(fā)人員提供一款快速運行的 Android 模擬器,該模擬器始終支持最新的 Android API、可與現(xiàn)有的 Google Play Services 配合使用,同時支持 Android Emulator 的各項功能(例如照相機、地理位置和快速啟動)。
Xamarin.Android 設(shè)計器
顯著改善了 Xamarin.Android 的設(shè)計器體驗。 亮點包括:
引入了拆分視圖編輯器,它可用于同時創(chuàng)建、編輯和預(yù)覽布局。
改善了 Intellisense 體驗,同時提升了自定義控件的可靠性。
支持對系統(tǒng)提供的值使用示例數(shù)據(jù)。
Xamarin.Forms 預(yù)覽器
當使用 Xamarin.Forms 3.1.0.583944 版或更高版本時,Xamarin.Forms 預(yù)覽器現(xiàn)提供工具箱支持。 Xamarin.Forms 控件將在工具箱中顯示,這讓工具箱新手們能更輕松地找到它們。 還可將控件拖放到 XAML 代碼編輯器中,從而在頁面上添加控件。
Python
此版本為 Python 開發(fā)人員添加了以下改進功能:
Python IntelliSense 現(xiàn)使用 typeshed 定義為無法通過靜態(tài)分析推斷出自動完成的庫提供更豐富的結(jié)果。
試驗性調(diào)試器在 15.7 預(yù)覽版中首次推出,它現(xiàn)在是 Python 使用的默認調(diào)試引擎,為 Python 代碼提供更快、更可靠的調(diào)試。
增添了對 Python 3.7 的支持且附帶修補程序,可實現(xiàn)調(diào)用附加功能、分析功能和混合模式(跨語言)調(diào)用功能。
要詳細了解上述功能,請務(wù)必查看 Visual Studio 15.8 中的 Python 博客文章。
遷移本地 Azure 函數(shù)設(shè)置
發(fā)布摘要頁中提供的“托管應(yīng)用程序設(shè)置”對話框現(xiàn)可顯示 local.settings.json 文件中的值,且支持你將這些值遷移到 Azure 中托管的遠程 Azure 函數(shù)應(yīng)用。
連接的服務(wù)
對于 Azure 函數(shù)項目的解決方案,現(xiàn)可直接通過 Visual Studio 2017 配置 Azure Functions 的持續(xù)交付。
測試資源管理器方面的改進
選中層次結(jié)構(gòu)視圖中的某個分組時,測試資源管理器現(xiàn)顯示更詳細的測試狀態(tài)摘要窗格(測試資源管理器的下窗格)。 該窗格現(xiàn)顯示該分組中失敗、通過或未運行的測試數(shù)量。
新的擴展性功能語言服務(wù)器協(xié)議
Visual Studio 現(xiàn)提供針對語言服務(wù)器協(xié)議的本機支持。 擴展作者可創(chuàng)建擴展,用于與現(xiàn)有語言服務(wù)器進行通信,從而向 Visual Studio 添加其他語言支持。 擴展用戶可安裝這些擴展,從而開始在 Visual Studio 中使用自己熟悉的語言(如 Rust)。
AsyncPackage 模板
擴展作者現(xiàn)可通過項模板創(chuàng)建 AsyncPackage,從而優(yōu)化其擴展的性能。 要詳細了解如何使用 AsyncPackage,請參閱本文檔。
擴展包
借助擴展包,可輕松共享自己偏好的一組擴展或設(shè)置新的帶有所有擴展的 Visual Studio 安裝。 利用擴展包,可創(chuàng)建擴展列表、將其打包在擴展中,并使用列表快速批量安裝這些擴展。
命令行擴展發(fā)布
使用命令行將擴展發(fā)布到 Visual Studio Marketplace。
.NET Core SDK 2.1.400
Visual Studio 15.8 附帶有 .NET Core SDK 2.1.400。 新的 SDK 功能包括:
添加了 NUnit 模板
添加了對已簽名的全局工具的支持
改進了幫助文本,使其更加清晰明了
解決了 .NET Core CLI 上的 32 個問題。 解決了 .NET Core SDK 上的 20 個問題。
源代碼管理
對于 .NET Core 項目,通過文件資源管理器直接添加到項目的文件現(xiàn)可在解決方案資源管理器中顯示正確的 Git 和 TFS 跟蹤圖標,而無需重新加載解決方案。
.NET 測試適配器擴展:中斷性變更和棄用
.Net 測試適配器具有以下中斷性變更和棄用:
中斷性變更:所有測試項目必須在其 csproj 中包含各自的 .NET 測試適配器 NuGet 引用。 如果未包含,在生成之后啟動測試適配器擴展的發(fā)現(xiàn)或用戶嘗試運行所選測試時,項目中將顯示以下測試輸出:
測試項目 {} 不引用任何 .NET NuGet 適配器。 測試發(fā)現(xiàn)或執(zhí)行可能不適用于此項目。 建議在解決方案的每個測試項目中引用 NuGet 測試適配器。
.NET 測試框架已在 NuGet 包中發(fā)布其適配器,且已遷出 Visual Studio 擴展。 棄用了通過擴展提供的 .NET 測試適配器支持(不過仍受支持)。 這意味著可通過“工具”>“選項”>“測試”使用兩個新選項。
通過第一個選項,Visual Studio 只能使用它在測試程序集文件夾(由測試適配器 NuGet 引用填充)中發(fā)現(xiàn)的或 runsettings 文件中指定的測試適配器。
通過第二個選項,Visual Studio 可“回退”至之前的行為,并為不具備測試適配器 NuGet 引用的項目搜索測試適配器擴展。 默認勾選這兩個選項,因此在該版本中,默認行為保持不變。
請注意,此項更改不影響非 .NET 測試適配器。
ASP.NET .NET Framework 密碼支持
對于面向 .NET Framework 4.7.1 或更高版本的 ASP.NET .NET Framework 項目,現(xiàn)可通過右鍵單擊項目并選擇“托管用戶密碼”,打開源代碼中不需要的密碼并將其存儲到 usersecrets.xml 中。
.NET Framework 4.7.2
Visual Studio 2017 15.8 版現(xiàn)向所有受支持的平臺提供 .NET Framework 4.7.2(包括 4.7.2 運行時)。 .NET Framework 4.7.2 提供多項新功能和改進功能,還有大量可靠性、穩(wěn)定性、安全性和性能方面的修補程序。
有關(guān) .NET Framework 4.7.2 的更多詳細信息,可參閱以下文章:
.NET Framework 4.7.2 RTM 博客
.NET framework 4.7.2 發(fā)行說明
.NET Framework 4.7.2 中的已知問題
.NET Framework 4.7.2 中的應(yīng)用程序兼容性
API 更改
延遲加載以異步方式自動加載的軟件包
Visual Studio 現(xiàn)延遲加載配置為自動加載的異步包,直到 Visual Studio IDE 完全啟動且解決方案加載完畢為止。 此項更改不影響以同步方式自動加載的包。 用戶可查看狀態(tài)欄左下角的“任務(wù)狀態(tài)中心”來監(jiān)視進度。 創(chuàng)建 asyncpackage 的擴展作者應(yīng)測試其擴展。 有關(guān)詳細信息,請參閱 Improving the responsiveness of critical scenarios by updating auto load behavior for extensions(通過更新擴展的自動加載行為來提高關(guān)鍵方案的響應(yīng)能力)。