Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[.Net Core 與 .Net Standard 實戰教學][Lab][03-1]現有.Net Framework Lib 改成 .Net Standard

image
圖片來源:https://pixabay.com/en/workshop-rustic-hammer-wrench-tool-2608390/

在前兩個lab 2裡面([Lab2-1]了解Framework Dependent Deployment(FDD)執行(發佈)模式[Lab2-2]了解Self Contained Deployment(SCD)執行(發佈)模式)了解了.Net Core和.Net Framework 不同執行模式以後。

在lab 3將會切換到另外一個很重要的部分,.Net Standard 2.0的到來。

這個lab將會介紹如何移轉現有target .net Framework的程式改成.Net Standard以達到多runtime使用重複邏輯。

一般來說會先port test程式碼,在port實際的業務程式碼,不過做法都類似,以這個範例就直接port業務程式碼。

操作步驟

  1. 取得一個WinForm的ap模擬一個要轉移的AP
  2. 建立一個.Net Standard 1.6的lib,嘗試轉移出現錯誤 - 了解如何檢查api版本
  3. 建立一個.net core console使用建立出來的.Net Standard Lib

取得一個WinForm的ap模擬一個要轉移的AP

先取得模擬舊ap的.net framework程式
可以兩個方式取得:
    • 用git clonehttps://github.com/alantsai-samples/2017-10-14-net-core-workshop.git
    • 用 git checkout切換到branch:lab3/1-port-net-standard-start
    • 瀏覽到:src\lab3-port-to-net-standard - 複製這個資料夾出來
      image
      看到:LegacyApplication.sln
  1. 可以使用 http://kinolien.github.io/gitzip/來下載,做法如下:

    1. 網址輸入:http://kinolien.github.io/gitzip/
    2. 鏈接輸入:https://github.com/alantsai-samples/2017-10-14-net-core-workshop/tree/lab3/1-port-net-standard-start/src/lab3-port-to-net-standard
    3. 按下 Download
    image

    或者使用https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/alantsai-samples/2017-10-14-net-core-workshop/tree/lab3/1-port-net-standard-start/src/lab3-port-to-net-standard 來直接下載開始檔案。

測試現行AP
直接run起來,這是一個模擬找出所有在英國的員工並且列出來。
image

建立一個.Net Standard 1.6的lib,嘗試轉移出現錯誤 - 了解如何檢查api版本

LegacyApplication的sln點 右鍵 -> New Project,然後在彈出的畫面輸入:
  1. 先選擇 .Net Standard
  2. 再選Class Library(.net Standard)
  3. 輸入框Name:NorthwindDalNetStandard
image
這個時候會建立出一個.net standard的library專案
  1. NorthwindDalNetStandard右鍵
  2. 選擇 Properties
  3. Target Framework改成.Net Standrd 1.6
image
模擬建立出來的是.Net Standard 1.6的lib
LegacyApplication.View專案裡面把northwind.xmlNorthwindDal.cs複製一份到NorthwindDalNetStandard專案底下,最後結果如下
image
把專案 Build,會出現錯誤,發生DataSet找不到的情況
image
可以使用 .Net Api Browser來檢查api支援度
https://docs.microsoft.com/zh-tw/dotnet/api/?view=netstandard-1.6 - 會發現DataSet並不存在
image
而在 .Net Standard 2.0 有
  1. 點選 .Net Standard 1.6
  2. 選擇.Net Standard
  3. 選擇版本為2.0
  4. 可以看到就有支援DataSet
image
把Target從1.6轉回到2.0 在build就沒有問題了
image
northwind.xmlNorthwindDal.csLegacyApplication.View專案刪掉,並且把NorthwindDalNetStandard加入到reference,最後樣子如下:
image
最後,把LegacyApplication.View專案調整target framework
  1. LegacyApplication.View點右鍵
  2. 選擇Properties
  3. Target Framework改成.Net Framework 4.6.2
image

記得.Net Framework 4.6.2才有支援 .Net Standard 2.0嗎:http://immo.landwerth.net/netstandard-versions/#

把程式run起來,發現執行結果和之前一樣
image

建立一個.net core console使用建立出來的.Net Standard Lib

建立一個 .net core console 程式並且 reference 剛剛的 standard library
image
最後執行結果 - 出現錯誤
image

這個錯誤是Visual Studio已知的一個bug,原因是VS在執行的時候Working Directory放在了sln的位置,而不是bin的路徑,造成相對路徑檔案會找不到

預計 VS 2017.6會修正。相關issue: https://github.com/dotnet/project-system/issues/2239

改成用dotnet執行
  • 切換到bin下面
  • cmd執行:dotnet NetCoreConsole.dll
image

完整程式碼可以再github看到:https://github.com/alantsai-samples/2017-10-14-net-core-workshop

git標籤:lab3/1-port-net-standard-finish

兩種方式取得:

  1. 用git clone然後在checkout到lab3/1-port-net-standard-finish
  2. 從github release下載:下載鏈接

參考資料

.Net Standard和Runtime版本對應
http://immo.landwerth.net/netstandard-versions/#
.Net Api Browser - 檢查api支援度
https://docs.microsoft.com/zh-tw/dotnet/api/?view=netstandard-2.0
官方介紹port到standard建議執行方式
https://docs.microsoft.com/en-us/dotnet/core/porting/

如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus