1. 程式人生 > >[ASP.NET Core 3框架揭祕] 跨平臺開發體驗: Windows [上篇]

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

微軟在千禧年推出 .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的版本、執行時環境以及本機按照的所有執行時版本。

二、選擇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”列出當前安裝的腳手架模板。

上圖列出的就是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就是這麼一個檔案。

對於傳統的.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編譯模式,所以編譯生成的程式集會儲存在\bin\debug\目錄下。除此之外,針對不同目標框架編譯生成的程式集是不同的,由於我們建立的是針對.NET Core 3.0的應用程式,所以最終生成的程式集被儲存在“\bin\Debug\netcoreapp3.0\”目錄下。

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

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

[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