本篇作為筆記用途,紀錄 Dotnet Core 參考資料

真正跨平台之前,還是多利用 .NET Portability Analyzer 分析你的專案是否用到了不支援的 API 比較保險

指令

常用指令

  • dotnet run --verbosity normal
    • 開發時執行程式,並輸出相關執行的資訊
    • --verbosity 設定命令的詳細資訊層級。允許的值為 q[uiet]、m[inimal]、n[ormal]、d[etailed] 及 diag[nostic]

Entity Framework

Code First

  • 教學文(en):使用 EF Core 在 Console App 建立 新資料庫
    • 執行以下指令安裝所需套件
      • dotnet add package Microsoft.EntityFrameworkCore.Sqlite
      • dotnet add package Microsoft.EntityFrameworkCore.Design
      • dotnet add tool Microsoft.EntityFrameworkCore.Tools.DotNet
        • 目前還不支援,要手動在 .csproj 中增加
        • <ItemGroup><DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /></ItemGroup>
    • 用程式碼表達資料庫及資料表結構,即建立 DbContext
    • 執行以下指令建立資料庫及其資料表
      • dotnet ef migrations add InitialCreate 產生 migrations 程式碼
      • dotnet ef database update 執行 migrations 程式碼至資料庫

Data Annotations

教學文(cht):建立複雜的 EF Core 資料模型

  • [Key] 主鍵
  • [Required] 必要的屬性
  • [DataType(DataType.Date)] 用來指定比資料庫內建類型更特殊的資料類型
  • [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 屬性用來明確指定日期格式
    • [DisplayFormat(NullDisplayText = "No grade")]
  • [StringLength(50, MinimumLength = 3)]
  • [Range(0, 5)]
  • [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
  • [Column("FirstName")]

Http StatusCode

你可以使用 StatusCode(???) 回傳任何 HTTP status code。或者可以使用以下方法:

  • Success
    • return Ok() ← Http status code 200
    • return Created() ← Http status code 201
    • return NoContent() ← Http status code 204
  • Client Error:
    • return BadRequest()` ← Http status code 400
    • return Unauthorized()` ← Http status code 401
    • return NotFound()` ← Http status code 404
  • 更多方法請參考

參考資料:How to return a specific status code and no contents from Controller?

佈署至 IIS

參考資料:在使用 IIS 的 Windows 上裝載 ASP.NET Core

重點:

  • .NET 網站下載相關安裝檔
  • 下載並安裝 .NET Core Runtime (v2.0.6 載點)
  • 下載並安裝 .NET Core Windows Server Hosting 模組
    • 在 .NET 網站中先點選All Downloads
    • 選擇你的 .NET Core Runtime
    • 選擇並下載 Windows 的 Server Hosting Installer (v2.0.6 載點)

開發時自動編譯

使用 dotnet watch,他會監測檔案是否有異動,並自動為我們編譯專案,官方 README 文件

Microsoft.DotNet.Watcher.Tools 加入 .csproj 檔案中,程式碼如下;

<ItemGroup>
 <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
</ItemGroup>

設定後執行 dotnet resotre 還原相依套件,接著就可以使用 dotnet watch 指令來監測專案,基本執行令對照如下:

Command Command with watch
dotnet run dotnet watch run
dotnet run -f net451 dotnet watch run -f net451
dotnet test dotnet watch test

參考資料:

ASP.NET Core 教學 - Middleware

Blog:ASP.NET Core 教學 - Middleware

  1. 建立 Middleware
  2. 註冊 Middleware

參考 Gist

ASP.NET Core 框架揭秘 by Artech

http://www.cnblogs.com/artech/p/inside-asp-net-core-1.html

ASP.NET Core 原始碼閱讀筆記 by Bill Shooting

計算程式執行時間

需要測量程式執行時間時,可以使用 .NET 提供的 Stopwatch 物件,參考以下寫法:

/* 使用 Stopwatch 測量的程式執行時間 */
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
// ========================================
sw.Reset(); // 碼表歸零
sw.Start(); // 碼表開始計時
/* 要測量的程式區段 */
sw.Stop(); // 碼錶停止
System.Diagnostics.Debug.WriteLine("程式區段執行時間");
System.Diagnostics.Debug.WriteLine(sw.Elapsed.TotalMilliseconds.ToString());    // 輸出執行時間(毫秒)
System.Diagnostics.Debug.WriteLine(sw.Elapsed.TotalSeconds.ToString());         // 輸出執行時間(秒)
// ========================================

.NET 實作支援

參考資料:.NET Standard

下表列出所有 .NET Standard 版本和支援的平台:

.NET Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
.NET Framework (含 .NET Core 1.x SDK) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.2
.NET Framework (含 .NET Core 2.0 SDK) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1

執行(發佈)模式

Framework Dependent Deployment(FDD)

程式碼編譯出來的是 dll,不是預期中的 exe 檔案,必須由電腦安裝的Dotnet Runtime 去執行對應的程式。

Self Contained Deployment(SCD)

要做到自封式部署,可透過修改專案檔 .csproj 將裡面的 PropertyGroup 改成如下:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <RuntimeIdentifiers>win-x64;linux-x64</RuntimeIdentifiers>
  </PropertyGroup>
</Project>

主要是加上 RuntimeIdentifiers 這個設定,上述範例會產生出 Windows x64 和 Linux x64 環境適用的可執行檔。

更多 Runtime IDentifiers 請參考官方文件 .NET Core RID Catalog

開啟 Dotnet 專案時效能低落的問題

使用 Dotnet CLI 時,如果遇到 dotnet run 很慢的情形,通常是該專案下有類似 node_modules 資料夾存在,這時需要將 csproj 內設定排除 node_modules 資料夾,這樣才能讓 dotnet rundotnet build 速度正常 設定項目如下:

<PropertyGroup>
	<DefaultItemExcludes>$(DefaultItemExcludes);YOUR_PATH\node_modules\**\*</DefaultItemExcludes>
</PropertyGroup>

上面程式碼中請修改 YOUR_PATH 成你要的路徑。

這個提交可以看出來上述的問題,是因為斜線打反了 所以會抓到 node_modules 資料夾,造成效能低落。

Web Depoly

下載 .NET Framework 離線安裝檔

以下下載連結都來自微軟官方網站:

Windows 內建版本

  • Windows 10 自帶 .NET Framework 4.6
  • Windows 8.1 自帶 .NET Framework 4.5.1
  • Windows 8 自帶 .NET Framework 4.5
  • Windows 7 自帶 .NET Framework 3.5(2.0/1.1)

可以透過 .NET Version Detector 這個軟體來查看電腦安裝了那些 .NET Framework。

.NET Framework 基本上分三類,只要安裝各類中最新版的即可,對應版號如下:

  • CLR1 - .NET Framework 1.1
  • CLR2 - .NET Framework 3.5
  • CLR4 - .NET Framework 4.X

參考資料:


Poy Chang

Trial and Error