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