ASP.NET Core 3 開發實戰:從入門到進階 實作環境說明
請先安裝 Chocolatey 套件管理器,並以系統管理員身分開啟 CMD 命令提示字元,並執行以下命令:
choco install clink -y
mkdir c:\Projects
cd /d c:\Projects
git clone https://github.com/doggy8088/clink-completions.git
cd clink-completions
install.bat
建議各位同學安裝 Open in Visual Studio Code 擴充套件 (VS2019),這個套件可以讓你快速從 Visual Studio 2019 裡面直接開啟 Visual Studio Code 工具,並自動開啟目前專案資料夾! 👍
如此一來,就可以在 Visual Studio 2019 缺乏好用工具 (Code Snippets) 的情況下,改用 Visual Studio Code 撰寫程式碼! 😃
.NET Core支援週期
.Net Core 支援原則 參考表
版本 | 支援時間 | 備註 |
---|---|---|
Current | 三個月 | 第一次釋出的時間往後推三個月,時間到就不更新了 會標示End of life |
LTS | 三年 |
示範如何鎖定 .NET Core SDK 版本
dotnet new globaljson --sdk-version 3.0.101
你可以用以下命令查詢已安裝的 SDK 版本清單:
dotnet --list-sdks
如何在多個 .NET Core SDK 版本之間進行切換 (global.json)
3.0升到3.1很簡單 只需要改一個地方,
只需要將Csproj檔裡的 TargetFramework 標籤中,
netcoreapp3.0 改為 netcoreapp3.1
mkdir solution1
cd solution1
dotnet new -l
列出可以建立的專案清單dotnet new console -o console1
-o:輸出到資料夾cd console1
dotnet restore
dotnet build
建置.NET Core 應用程式dotnet run
從專案目錄直接執行應用程式(會自動建置)dotnet clean
清除建置時所輸出的相關檔案dotnet publish -c Release
發行.NET Core 應用程式dotnet bin\Release\netcoreapp3.0\console1.dll
Release出現的檔案中裡面的.exe檔案 其實只是執行
dotnet console1.dll
cd..
(回到Solution1資料夾)dotnet new classlib -o classlib1 -f netcoreapp2.2
如果沒加-f netcoreapp2.2
默認是2.0cd classlib1
dotnet bulid
dotnet build -c Release
dotnet msbuild /p:Configuration=Release
dotnet clean
dotnet pack
打包Nutget套件 dotnet publish
dotnet publish -c Release
dotnet msbuild /t:Publish /p:Configuration=Release
cd..
(回到solution1資料夾)dotnet new mstest -n classlib1.test
cd classlib1.test
dotnet add reference ..\classlib1\classlib1.csproj
dotnet test -t
(列出專案中所有測試案例)dotnet test
(執行測試)dotnet build
dotnet vstest bin\Debug\netcoreapp3.0\classlib1.test.dll
.NET Framework 微軟已經沒再更新了
選擇 .NET Standard 版本時,您應該考量下列取捨:
可以讓一份sorce code 產生多版本的dll檔案
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
<RootNamespace>ApiPortVS</RootNamespace> <DefineConstants>$(DefineConstants);VS2019</DefineConstants>
</PropertyGroup>
使用 Visual Studio 2019 只需要在專案上點兩下就可直接編輯 .csproj 專案檔。
設定完成後,Visual Studio 2019 會提示必須重新 Reload 所有專案、這時點選 Yes 即可。
這時再重新編譯會發現,成功編譯了!
這時候在進入relase資料夾底下可以看到產生兩個資料夾
TargetFramework
=>TargetFrameworks
<TargetFrameworks>
netstandard2.0;net472
</TargetFrameworks>
#if NET472
#elif
#else
#endif
<TargetFrameworks>
netstandard2.0;netcoreapp3.0
</TargetFrameworks>
#if NETCOREAPP3_0
return "netcoreapp3.0";
#else
return "netstandard2.0";
#endif
dotnet pack solution1.sln
用zip開啟 .nupkg 可看到兩個版本
升級專案的簡單幾個步驟:
單元測試比較麻煩一些,package.JSON定義了nuget裡面安裝了哪些package
所以需要比較一下,這些套件再剛剛單元測試裡面有沒有出現,如果沒有出現,就需要自己想辦法加進去
[assembly: AssemblyTitle("NeuralNetworkCSharp")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("NeuralNetworkCSharp")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: InternalsVisibleTo("NeuralNetworkCSharpTests")]
的專案名稱要跟你新建的測試專案名稱一樣設定讓 Visual Studio Code 開啟 *.csproj 的時候,自動切換到 MSBuild 語言模式,請參考一下 VSCode 設定值:
"files.associations": {
"*.csproj": "msbuild"
},
按下 Ctrl+, 就可以開啟設定視窗
你只要在 Visual Studio Code 中使用滑鼠右鍵點選 *.csproj 檔案,就可以直接 建置 (Build)、執行 (Run) 或 **執行測試 **(Tests) 👍
ctrl
+ shift
+b
可以直接buildctrl
+ space
可以跳出提示,但要修正輸入法ctrl
+ ,
ctrl
+ .
.net core 真正的主程式是.dll檔,產生的exe 裡面其實只是在執行.dll檔
Framework 相依部署 (FDD) => .net core 2.2以前預設
dotnet publish -c Release -p:UseAppHost=false
Framework 相依可執行檔 (FDE)
dotnet publish -c Release -r <RID> --no-self-contained
自封式部署 (SCD)
適合電腦環境不是自己能控制的地方
-r = runtimes的意思
可以針對,特定作業系統產生runtimes所需要的dll檔
缺點:檔案太大
優點:不用再安裝.net core平台
可以透過dotnet –info 查RID
一般只需要記得最常用的三個
樹梅派 可以跑 .net core 不過速度很慢
dotnet publish -c Release -r <RID> --self-contained
dotnet publish -c Release -r <RID> -p:PublishSingleFile=true
dotnet publish -c Release -r <RID> -p:PublishTrimmed=true
-PublishTrimmed=true 會幫你把沒用到的code移除掉 可以減少檔案大小
-PublishSingleFile 幫你壓縮成一個檔案
- -p:PublishSingleFile=true執行的時候,會自動解壓縮到特定目錄
1.windows command line => %TMP%\.net\
2.windows powershell => $env:TMP\.net
3.linux => /var/tmp/.net/
4.osx => $TMPDIR.net
今天課程提到一個 .NET Core 發行的命令:
dotnet publish -c Release -r <RID> -p:PublishSingleFile=true
他會將 SCD 佈署的所有檔案壓縮成一支可執行檔,但執行的時候,會自動解壓縮到特定目錄,我特別找出這個目錄的位置 (如下),如果以後硬碟不夠用的時候,可以從以下目錄找出這些暫存檔案,隨時可以安全的移除這個目錄下的所有檔案!
命令提示字元
%TMP%\.net\
Windows PowerShell
$env:TMP\.net
Linux bash (請同學幫忙驗證一下 macOS 的路徑)
/var/tmp/.net/
UNIT 1 • 練習實作進度回報
請先建立 ASP․NET Core MVC 專案
dotnet new mvc -n m1
cd m1
然後練習不同的 .NET Core 發行方法
dotnet publish -c Release -p:UseAppHost=false
dotnet publish -c Release -r <RID> --no-self-contained
dotnet publish -c Release -r <RID> --self-contained
dotnet publish -c Release -r <RID> -p:PublishSingleFile=true
dotnet publish -c Release -r <RID> -p:PublishTrimmed=true
ASP.NET Core - Kestrel Web Server
.NetCore 可以透過 Kestrel直接對外連線
參數化的方式可以避免sql injection,不可用組字串的方式
適合應用的情境:聊天室、即時的報表監控、客服系統
官方有做壓測過可以百萬人連線
利用WebAssembly的技術讓c#的dll檔直接跑在瀏覽器上,想要做到離線會有機會用到
BlazorService 會用WebSocket 切換頁面時事實上是在service端把結果算好,再傳送至前端
如果想在 Windows PowerShell 或 Bash/Zsh 環境下使用命令列自動完成,請參考這篇文章進行設定喔! 👍
#macOS也能用命令列自動完成
參考資料