随时随地以任意方式编写 .NET 应用程序
希望大家現在都知道,Microsoft .NET 不再僅適用于 Windows。借助 .NET Core,可以使用想要的語言(C#、Visual Basic 或 F#)編寫應用程序,這些應用程序可以在選定的任何 OS(Windows、macOS 或 Linux)上運行。當然,由于現在可以編寫定目標到選定平臺的應用程序,因此大家還期望能使用相同的開發者工具,這些超棒工具一直都是 .NET 開發的標志。令人鼓舞的是,隨著我們支持的平臺越來越多,用于創建超棒 .NET 應用程序的工具也越來越多。?
本文將逐個介紹這些開發工具,它們適用于不同的個人工作風格和 OS。首先,將介紹 SDK 隨附的命令行工具,此類工具可與任意編輯器(盡管建議為 Visual Studio Code)相互配對。然后,將介紹 Visual Studio 2017 超棒的新功能,再介紹 Visual Studio 系列的最新成員 Visual Studio for Mac。最后,將介紹這些工具如何幫助大家利用軟件容器,并嘗試將應用程序順暢發布到 Microsoft Azure 云中。
為了方便本文演示,將通篇使用“.NET Core”一詞,以保持一致性。不過,此名稱涉及兩項非常重要的技術,分別是 .NET Core 和 .NET Standard。.NET Core 是執行應用程序的跨平臺運行時。.NET Standard 是由編譯器強制執行的一組 API,這些 API 被用作類庫的目標,因此一個庫就可以在任何支持標準的運行時上運行。例如,.NET Core 2.0、.NET Framework 4.6.1 和 Mono 4.8 都支持 .NET Standard 2.0(及更低版本)類庫。若要更好地理解這一概念,請參閱本期中的姊妹篇文章“揭秘 .NET Core 和 .NET Standard”。
同樣值得一提的是,.NET Core 和 .NET Standard 2.0 支持的語言。粗略地講,這兩種技術的 2.0 版都支持 C#、Visual Basic 和 F#。不過,我們對這一版 Visual Basic 的目標是,啟用 .NET Standard 2.0 類庫。也就是說,Visual Basic 只提供類庫和控制臺應用程序的模板,而 C# 和 F# 則還提供 ASP.NET Core 2.0 應用程序模板。
處理 .NET Core 項目時,首先會注意到的地方之一是,它們共用高度簡化的通用項目格式。也就是說,使用一種工具(例如,命令行工具)創建的項目,可以在任何支持 .NET Core 的平臺(如 Visual Studio 或 Visual Studio for Mac)上運行。采用全新的項目文件格式后,便不再需要使用 GUID,也不再需要明確列出所含文件,這大大減少了將更新提交到版本控制系統時發生的合并沖突。下面的代碼展示了新 C# .NET Core 控制臺應用程序項目文件的全部內容:
此外,通用格式也意味著同一團隊的成員可以使用自己選擇的設備和平臺進行工作。如果三個團隊成員分別想要在 Mac、Windows 和 Linux 上工作,他們全都可以順暢參與同一個項目。若要詳細了解更新后的項目格式,請訪問?aka.ms/newprojectfile。
任何開發者工具的基礎都是軟件開發工具包 (SDK),.NET Core 也不例外。.NET Core SDK 不可或缺的一部分是命令行接口 (CLI),支持用戶使用命令行創建、生成和運行應用程序。借助 CLI,可以使用常用編輯器創建應用程序,而無需安裝更重量級的工具。
首先,安裝免費的 .NET Core SDK(可從 dot.net 下載)。
安裝 SDK 后,立即打開常用命令提示符,并運行“dotnet --help”,列出所有可用命令。dotnet 命令是 .NET CLI 的驅動程序,語法為“dotnet <謂詞> [參數]”。例如,若要查看可以創建的所有項目類型模板,請鍵入“dotnet new”。? 若要新建項目,請提供短名稱作為“new”操作的參數;例如,“dotnet new razor”創建包含新 .NET Core 2.0 Razor 頁面(若要了解這項超棒的新功能,請訪問 aka.ms/razorpages)的 C# ASP.NET Core Web 應用程序。若要運行應用程序,請鍵入“dotnet run”,它會生成并啟動應用程序。打開瀏覽器后轉到輸出字符串中指明的 URL(例如,http://localhost:5000),可以與要生成的應用程序進行交互。? 由此觀之,開發并不是什么難事,只需選擇常用編輯器生成并運行應用程序即可。
生成應用程序后,不妨在生命周期的相對早期添加單元測試支持。與預期一樣,單元測試適用于 IDE,但也可以直接通過 .NET CLI 生成并運行單元測試。?
大家可能已注意到,“dotnet new”提供了兩種不同的單元測試項目類型,分別為 xunit 和 mstest。首先,使用首選單元測試框架(如“dotnet new xunit”)創建單元測試項目,然后再在測試項目文件夾中鍵入“dotnet add reference <測試項目的路徑>”,讓 CLI 為大家添加對項目文件的引用。生成單元測試項目后,便可以使用“dotnet test”命令通過 CLI 運行測試項目。無論選擇哪種項目類型,xunit 和 mstest 項目都受到 Visual Studio 和 Visual Studio for Mac 以及 CLI 的支持。
雖然可以自由選擇使用所需的任何編輯器,但對于渴望輕量級編輯體驗同時又需要結合使用 .NET Core CLI 的用戶,Visual Studio Code 提供的體驗最佳。? Visual Studio Code 是輕量級跨平臺編輯器,內置源代碼管理和調試支持。通過將 .NET CLI 與 Visual Studio Code 結合使用,可以在所選的任何平臺上生成 .NET 應用程序。首先,需要安裝 .NET Core SDK,如前所述。在計算機上安裝 SDK 后,便可以從 code.visualstudio o.com 下載并安裝 Visual Studio Code,再選擇 Visual Studio Code 左側的“擴展”選項卡,安裝 Microsoft 提供的 C# 擴展,即適用于 Visual Studio Code 的 C#(由 OmniSharp 提供技術支持)。(如果使用的是 F#,不妨也安裝 Ionide-fsharp 擴展。請注意,若要獲得 .NET Core 生成和調式支持,必須安裝 C# 擴展。) 現在,可以使用 Visual Studio Code 開發 .NET Core 項目了。?
借助 C# 擴展,Visual Studio Code 可以代表用戶調用 CLI,從而生成并運行應用程序以供調試。創建項目后,立即打開 Visual Studio Code,并選擇“文件”菜單中的“打開文件夾”。打開 C# 文件 (.cs) 時會看到提示,即編輯器頂部的建議欄,建議生成必需資產以供生成和調試之用,如圖 1?所示。選擇“是”,便會生成兩個文件:支持使用 Visual Studio Code 進行生成的 tasks.json 文件,以及支持調試的 launch.json 文件。現在,可以直接使用 Visual Studio Code 進行編輯、編譯和調試。
圖 1:Visual Studio Code 建議生成必需資產以供生成和調試之用
Visual Studio 會繼續支持世界一流的開發者體驗,對 .NET Core 的工具支持也不例外。Visual Studio 2017(版本 15.3)現已開始支持 .NET Core 2.0。若要在 Visual Studio 中開始編寫 .NET Core 2.0 應用程序,需要下載并安裝 .NET Core 2.0 SDK。在計算機上安裝 SDK 后,立即重啟 Visual Studio,便會發現新項目可定目標到 .NET Core 2.0。
我們設定的目標是,讓 Visual Studio 2017 成為迄今為止提供的最高效的開發服務。為了提供一些亮點,我們改進了代碼導航、新增了大量重構/快速修復命令,并增添了代碼樣式強制措施和 Live Unit Testing。
導航和重構:我們知道,在用戶處理代碼時,務必要提供對基準代碼導航的巨大支持。下面列出了 Visual Studio 2017 中最受歡迎的代碼導航改進:
-
轉到實現 (Ctrl+F12):從任何基類型或基成員轉到各種實現。
-
轉到全部(Ctrl+T 或 Ctrl+,):直接轉到任何文件/類型/成員/符號聲明。可以使用此功能頂部的一排圖標,以篩選結果列表或使用查詢語法(例如,對文件使用“f searchTerm”、對類型使用“t searchTerm”等)。
-
查找所有引用 (Shift+F12):現在,借助語法著色,可以綜合項目、定義和路徑,對“查找所有引用”結果進行自定義分組。還可以“鎖定”結果,這樣就可以繼續查找其他引用,同時又不丟失原始結果。
-
縮進參考線:灰色的豎虛線可以在代碼中起到關鍵點的作用,方便用戶獲得可視范圍內的上下文。可以通過常用的 Productivity Power Tools 添加此類參考線。
此外,光做到基準代碼導航還是不夠的;我們知道,在代碼中查找要更改或清理的部分時,需要使用工具進行重構。為了幫助用戶進行重構,現已開始支持執行以下操作:將類型移到同名文件中、同步文件和類型名稱、為參數添加 null 檢查、添加參數、添加缺少的 switch/Select case、同步方法、將方法轉換為屬性(反之亦然)和解決合并沖突等。?
代碼樣式:在 Visual Studio 2017 中,可以配置并強制執行團隊的編碼約定,通過 EditorConfig 提高整個存儲庫的一致性。EditorConfig 是一種開放的文件格式,我們與其社區合作,共同在此格式內提供 .NET 代碼樣式支持。團隊可以配置約定首選項,并選擇如何在編輯器內強制執行它們(如通過建議、警告或錯誤消息的形式)。這些規則適用于包含 EditorConfig 文件的目錄中的任意文件。如果編碼約定因項目而異,只要項目位于不同的目錄,就可以在不同的 EditorConfig 文件中定義各個項目的規則。因為歸根結底 EditorConfig 只是文本文件,所以可以將它輕松簽入源代碼管理系統中,并讓它與源代碼并存。若要詳細了解 Visual Studio 中的 EditorConfig 支持,請訪問?aka.ms/editorconfig。
Live Unit Testing:生成 MSTest、xUnit 或 NUnit 測試項目后,就可以為 .NET Core 項目啟用 Live Unit Testing (LUT)。LUT 是 Visual Studio 2017 Enterprise 版本中引入的一項新功能。啟用 LUT 后,可以一邊鍵入,一邊在代碼編輯器中看到有關單元測試覆蓋率和測試通過/未通過的反饋,如圖 2?所示。也就是說,不再需要離開編輯器,即可運行單元測試來驗證代碼更改。一鍵入代碼,就可以在編輯器中看到即時反饋,查看所有受代碼更改影響的測試的結果。
圖 2:.NET Core 項目中運行的 Live Unit Testing
熱衷于提升質量的團隊和熱愛測試驅動開發 (TDD) 的用戶都會喜歡這項新功能。若要啟用 LUT,請轉到 Visual Studio 菜單欄中的“測試”條目,再依次選擇“Live Unit Testing”和“啟動”。
Visual Studio for Mac 是 Visual Studio 系列的最新成員,適用于要在 macOS 上使用 IDE 的開發者。從 Xamarin Studio 起步,Visual Studio for Mac 有了很大的發展和變化,現已開始支持 C# 和 F# 項目。首先,安裝 .NET Core 2.0 SDK(可從 dot.net 下載),依次選擇“創建項目”和“.NET Core”類別下的“應用程序”條目,以選擇所需的項目模板。?
將會看到一個功能完備的 IDE,可用于在 Mac 上開發 .NET Core 應用程序,如圖 3?所示。我們正在努力解決的一個問題是,讓 Visual Studio 與 Visual Studio for Mac 保持一致。現在,可以使用在 Visual Studio 中依靠的大部分功能,包括 IntelliSense、代碼導航、重構、單元測試和源代碼管理集成。為了支持 Web 開發,我們為 Visual Studio for Mac 引入了 Visual Studio HTML、CSS 和 JSON 編輯器。大家可能會注意到,Razor 文件 (.cshtml) 和 JavaScript/TypeScript 暫不受支持。不過,我們正在努力解決此問題,計劃將在今后發布的更新中讓 Visual Studio for Mac 支持它們。
圖 3:Visual Studio for Mac
隨著技術不斷發展,有一點是明確的,即越來越多的應用程序在創建之初就要在云中運行。也就是說,工具需要采用兼顧新式云的設計模式和做法,同時還要方便用戶將應用程序從本地開發計算機快速轉移到云中。? 為了實現此目標,Visual Studio 和 Visual Studio for Mac 均已內置支持,不僅支持直接發布到 Microsoft Azure,還支持將應用程序打包為 Docker 容器。
直接發布到 Azure:準備好將應用程序遷移到云中運行時,很可能希望盡可能輕松地在云中開始嘗試執行此操作。使用 Visual Studio 和 Visual Studio for Mac,都可以將應用程序直接從計算機發布到 Azure App Service。App Service 是完全托管式云環境,在其中運行應用程序,無需擔心復雜的配置或基礎結構管理。
具體操作真的很簡單,只需右鍵單擊項目并選擇“發布”,即可使用 Visual Studio 或 Visual Studio for Mac 將應用程序從本地計算機發布到 Azure App Service。系統會提示輸入一些信息(如應用程序的唯一 URL)。可以選擇現有的應用服務計劃(要為成員應用程序集合保留多少資源),也可以新建一個(如果還沒有的話)。輸入信息后,只需花幾分鐘時間,就可以在云中運行應用程序了。?
容器開發工具:關于新式云開發,我們逐漸明白的是,容器將徹底改變人們架構和生成軟件的方式。使用容器,可以將應用程序及其所有依賴項(包括運行時副本)打包到一個單元中,這樣能夠保證對基礎服務器的更改永遠不會破壞應用程序。這會形成一種微服務體系結構模式。在此模式中,可以將應用程序中的每個邏輯單元都單獨部署為一個容器,它們通過已定義的協議相互通信。這樣一來,可以根據需要縮放應用程序的高需求部分,而無需付費縮放整個應用程序。這也意味著,修補程序只會影響正在更新的容器,而不會影響整個應用程序。
本著這種想法,我們為 .NET Core 設定的目標之一是,讓它成為創建容器化微服務的主要運行時。Visual Studio、Visual Studio for Mac 和 Visual Studio Code 全都支持將應用程序生成為 Docker 容器。(請注意,在本文撰寫時,必須有 Docker 工具擴展,Visual Studio for Mac 才提供 Docker 工具支持;Microsoft 為 Visual Studio Code 提供 Docker 擴展,以支持創建 Docker 容器。)
若要生成 Docker 容器,需要安裝適用于 OS 的 Docker 工具(可以訪問 docker.com 了解詳細信息并下載工具)。安裝必需項后,只需在 Visual Studio 或 Visual Studio for Mac 中右鍵單擊項目,再依次選擇“添加”和“Docker 支持”即可。這樣可以向解決方案添加 docker-compose 項目,并將 Dockerfile 添加到項目中。借助這些資產,可以將項目生成到 Docker 容器中。然后,通過 IDE 運行應用程序時,就是在容器中(而不是直接在主機上)運行和調試應用程序了。令人鼓舞的是,本文介紹的發布到 Azure App Service 體驗也支持發布 Linux Docker 容器。
如果還沒有嘗試過生成 .NET Core 應用程序,現在就是最好時機。使用 .NET Core 和 .NET Standard 2.0(如“揭秘 .NET Core 和 .NET Standard”中所述),可以輕松創建 .NET 應用程序,無論選擇的工具、OS、語言或工作風格如何。
?
希望本次 .NET Core 工具概覽能夠對大家有所幫助。可以訪問我們的博客 (aka.ms/dotnetblog),繼續關注團隊發展和后續改進。請嘗試本文介紹的工具,并向我們發送反饋,讓我們知道如何進一步提升 .NET Core 應用程序創建體驗。可以在我們的博客文章中寫下留言和問題,也可以直接通過 Visual Studio 和 Visual Studio for Mac 向我們發送反饋,具體方法為使用 IDE 內置的“報告問題”和“提供建議”功能。
Andrew Hall?是主管 Visual Studio 中 .NET 語言和工具的項目經理。大學畢業后,他先編寫了業務線應用程序,然后又重回學校攻讀計算機科學專業的碩士學位。取得碩士學位后,他加入了 Visual Studio 診斷團隊,負責開發調試程序、分析和代碼分析工具。然后,他轉入 .NET 語言和工具團隊,負責開發 .NET 語言和支持工具,包括適用于 ASP.NET、Web 和 Azure App Service 的工具。可通過 Twitter (@AndrewBrianHall) 與 Hall 取得聯系。
Joe Morris?是負責 Visual Studio 中 .NET Core 工具和 Live Unit Testing 的項目經理。他獲有計算機科學專業的碩士學位。上世紀 90 年代,他開始了自己的職業生涯,在美國的一些企業擔任應用程序開發顧問。他于 1997 年加入 Microsoft 咨詢服務部門(先是在艾奧瓦州,后來搬到了雷德蒙德)。在過去兩年里,他的工作重心一直是靜態代碼分析和開發者實用工具。可通過 Twitter (@_jomorris) 與 Morris 取得聯系。
衷心感謝以下 Microsoft 技術專家對本文的審閱:Dustin Campbell、Phillip Carter、Livar Cunha、Mikayla Hutchinson、Mads Kristensen、Jordan Matthiesen 和 Kasey Uhlenhuth
原文地址:?https://msdn.microsoft.com/zh-cn/magazine/mt842494
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的随时随地以任意方式编写 .NET 应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net core封装layui组
- 下一篇: 一张图理清ASP.NET Core启动流