[ASP.NET Core 3框架揭秘] 跨平台開發體驗: Windows [上篇]

  • 2019 年 10 月 9 日
  • 筆記

微軟在千禧年推出 .NET戰略,並在兩年後推出第一個版本的.NET Framework和IDE(Visual Studio.NET 2002,後來改名為Visual Studio),如果你是一個資深的.NET程式設計師,相信傳統的.NET應用的開發方式已經深深地烙印在你的腦子裡面。.NET Core帶來了全新的開發體驗,但開發方式的差異根本不足以成為你快速跨入.NET Core 世界的門檻,因為在.NET Core在很多方面比傳統的.NET Framework應用開發要簡單。為了消除很多尚未接觸過.NET Core的讀者對未知世界的恐懼,我們先通過幾個簡單的Hello World應用讓大家感受一下在Windows上的.NET Core全新的開發體驗。

一、安裝開發環境

.NET Core的官方站點介紹了在各種平台下安裝開發環境的方式。總的來說,我們在不同的平台下開發.NET Core應用都需要安裝相應的SDK和IDE。成功安裝SDK之後,我們在本地將自動擁有.NET Core的運行時(CoreCLR)、基礎類庫以及相應的開發工具。

dotnet.exe是.NET Core SDK為我們提供的一個重要的命令行工具,我們在進行.NET Core應用的開發部署的時候將會頻繁地使用它。dotnet.exe提供了很多有用的命令,為了不“節外生枝”,我們就不對它們作系統介紹了,如果後續章節涉及到相關命令,我們再對它們作針對性的介紹。當.NET Core SDK安裝結束之後,我們可以運行dotnet命令來確認SDK是否安裝成功。如下圖所示,我們執行dotnet –info命令查看當前安裝的.NET Core SDK的基本資訊,顯示的資訊包含SDK的版本、運行時環境以及本機按照的所有運行時版本。

image

二、選擇IDE

高效的開發自然離不開一個優秀的IDE,在這方面作為一個.NET開發者是幸福的,因為我們擁有宇宙第一的開發神器Visual Studio。雖然Visual Studio Code也不失為一個優秀的IDE,如果Windows依舊是我們主要的開發環境,我個人還是推薦使用Visual Studio。當我在敲這行文字的時候,Visual Studio的最新版本為2019。順便說一下,Visual Studio已經提供了Mac版本。

Visual Studio Code是一個完全免費並且提供全平台支援(Windows、Mac和Linux)的IDE,我們可以直接在其官網(https://code.visualstudio.com/)上下載。Visual Studio 2019提供了社區版(Community)、專業版(Professional)和企業版(Enterprise),其中社區版是免費的,專業版和企業版需要付費購買。Visual Studio的官網地址為https://www.visualstudio.com/。

除了Visual Studio和Visual Studio Code,我們還可以使用一款叫做Rider的IDE來開發.NET Core應用。Rider是著名的JetBrains公司開發的一款專門針對.NET的IDE,我們可以利用它來開發ASP.NET、.NET Core、Xmarin以及Unity應用。和Visual Studio Code一樣,Rider同樣也是個跨平台的IDE,我們可以同時在Windows、Max OS X以及各種桌面版本的Linux Distribution上使用它。不過這不是一款免費的IDE,對它感興趣的朋友可以在官方站點載30天試用版。

三、項目模板

dotnet .exe提供了基於 “腳手架(Scaffolding)”創建初始應用的new命令。如果需要開發某種類型的.NET Core應用,我們一般不會從第一行程式碼寫起,而是利用這個命令幫助我們創建一個具有初始結構的應用程式。除此之外,在開發過程中如果需要添加某種類型的文件(比如各種類型的配置文件、MVC的視圖文件等),我們也可以利用該命令來完成,通過這種方式添加的文件具有預定義的初始內容。.NET Core SDK在安裝的時候為我們提供了一系列預定義的腳手架模板,我們可以按照如下圖所示的方式執行命令行“dotnet new –list”列出當前安裝的腳手架模板。

image

上圖列出的就是NET Core SDK安裝後提供的預定義的腳手架模板,這些模板大致分為Project Template和Item Template兩類,前者為我們創建一個初始項目,後者則在一個現有項目中針對某種項目元素添加一個或者多個對應的文件。細心的讀者可以從圖2中看到dotnet new命令具有一個–type參數,該參數具有三個預定義的選項(project、item和other),其中前兩個分別對應著Project和Item這兩種模板類型。

如果這些預定義的腳手架模板不能滿足我們的需求,我們還可以創建自定義的Project或者Item模板,至於自定義模板該如何定義,有興趣的讀者朋友可以參考.NET Core官方文檔。自定義模板最終會封裝成一個NuGet包,我們可以通過執行dotnet new -i或者dotnet new –install命令對其進行安裝。除此之外,對於已經安裝的模板,我們可以通過執行dotnet new -u或者dotnet new –uninstall命令將其卸載。

四、創建一個控制台程式

接下來我們利用dotnet new命令(dotnet new console -n helloworld)按照如下圖所示的方式創建一個名為“helloworld”的控制台程式。和傳統的.NET Framework應用一樣,一個針對C#的.NET Core項目依然由一個對應的.csproj文件來定義,圖3所示的helloworld.csproj就是這麼一個文件。

image

對於傳統的.NET Framework應用來說,即使是一個空的C#項目,定義該項目的.csproj文件在內容和結構上都是很複雜的,因為這個.csproj文件的結構並不是面向開發者設計的,我們也不會直接編輯這個文件,而是利用Visual Studio通過設置當前項目的某些屬性間接地修改它。但是對於一個.NET Core應用來說,這個.csproj文件的結構變得相對簡單並清晰了一些,以至於作為開發人員的我們經常會直接編輯它。對於前面我們執行腳手架命令創建的控制台程式,定義項目的helloworld.csproj文件的完整內容如下。

<Project Sdk="Microsoft.NET.Sdk">    <PropertyGroup>      <OutputType>Exe</OutputType>      <TargetFramework>netcoreapp3.0</TargetFramework>    </PropertyGroup>  </Project>

如上面的程式碼片段所示,這個helloworld.csproj是一個根節點為<Project>的XML文件,與項目相關的屬性可以分組定義在相應的<PropertyGroup>節點下。這個helloworld.csproj文件實際上只定義了兩個屬性,分別是通過<OutputType><TargetFramework>節點表示的編譯輸出類型和目標框架。由於我們創建的是一個針對.NET Core 3.0的可執行控制台應用,所以目標框架為“netcoreapp3.0”,編譯輸出為Exe。

我們執行的dotnet new命令行除了幫助我們創建一個空的控制台程式之外,還會幫助我們生成一些初始化程式碼,這就是項目目錄下的這個Program.cs文件的內容。如下所示的程式碼片段給出了定義在這個文件的整個C#程式碼的定義,我們可以看到它定義了代表程式入口點的Main方法,並在這個方法中將字元串“Hello World”列印在控制台上。

using System;  namespace helloworld  {      class Program      {          static void Main(string[] args)          {              Console.WriteLine("Hello World!");          }      }  }

 

通過執行腳手架命令行創建出來應用程式雖然簡單,但是它卻是一個完整的.NET Core應用,它可以在無需任何修改的情況下直接編譯和運行。針對.NET Core應用的編譯和運行同樣是利用這個dotnet.exe命令行來完成的。如下圖所示,在進入當前項目所在目錄之後,我們執行dotnet build命令對這個控制台應用實施編譯,由於默認採用Debug編譯模式,所以編譯生成的程式集會保存在bindebug目錄下。除此之外,針對不同目標框架編譯生成的程式集是不同的,由於我們創建的是針對.NET Core 3.0的應用程式,所以最終生成的程式集被保存在“binDebugnetcoreapp3.0”目錄下。

image

如果查看編譯的輸出目錄,我們會發現兩個同名(“helloworld”)的文件,一個是helloworld.dll,另一個是helloworld.exe,後者在尺寸上會大很多。很明顯helloworld.exe是一個可以直接運行的可執行文件,而helloworld.dll僅僅是一個單純的動態鏈接庫,需要藉助命令行dotnet.exe才能執行。

如圖5所示,當我們在項目目錄下執行dotnet run命令後,編譯後的程式隨即被執行,程式入口Main方法中指定的“Hello World”字元串被直接列印在控制台上。其實當我們執行dotnet run命令啟動程式之前無需顯示執行dotnet build對源程式碼實施編譯,因為該命令會自動觸發編譯操作。在執行dotnet命令啟動應用程式集的時候,我們也可以直接指定啟動程式集的路徑(dotnet binDebugnetcoreapp3.0helloworld.dll)。

image

[ASP.NET Core 3框架揭秘] 跨平台開發體驗: Windows [上篇]
[ASP.NET Core 3框架揭秘] 跨平台開發體驗: Windows [中篇]
[ASP.NET Core 3框架揭秘] 跨平台開發體驗: Windows [下篇]
[ASP.NET Core 3框架揭秘] 跨平台開發體驗: Mac OS
[ASP.NET Core 3框架揭秘] 跨平台開發體驗: Linux
[ASP.NET Core 3框架揭秘] 跨平台開發體驗: Docker