在前兩個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使用重複邏輯。
操作步驟
- 取得一個WinForm的ap模擬一個要轉移的AP
- 建立一個.Net Standard 1.6的lib,嘗試轉移出現錯誤 - 了解如何檢查api版本
- 建立一個.net core console使用建立出來的.Net Standard Lib
取得一個WinForm的ap模擬一個要轉移的AP
- 先取得模擬舊ap的.net framework程式
- 可以兩個方式取得:
- 用git
clone
:https://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
- 複製這個資料夾出來
- 用git
可以使用 http://kinolien.github.io/gitzip/來下載,做法如下:
- 網址輸入:
http://kinolien.github.io/gitzip/
- 鏈接輸入:
https://github.com/alantsai-samples/2017-10-14-net-core-workshop/tree/lab3/1-port-net-standard-start/src/lab3-port-to-net-standard
- 按下 Download
- 網址輸入:
- 測試現行AP
- 直接run起來,這是一個模擬找出所有在
英國
的員工並且列出來。
建立一個.Net Standard 1.6的lib,嘗試轉移出現錯誤 - 了解如何檢查api版本
- 在
LegacyApplication
的sln點 右鍵 ->New Project
,然後在彈出的畫面輸入: - 先選擇
.Net Standard
- 再選
Class Library(.net Standard)
- 輸入框Name:
NorthwindDalNetStandard
- 先選擇
- 這個時候會建立出一個.net standard的library專案
- 對
NorthwindDalNetStandard
點 右鍵 - 選擇
Properties
- 把
Target Framework
改成.Net Standrd 1.6
- 對
- 從
LegacyApplication.View
專案裡面把northwind.xml
和NorthwindDal.cs
複製一份到NorthwindDalNetStandard
專案底下,最後結果如下 - 把專案 Build,會出現錯誤,發生DataSet找不到的情況
- 可以使用 .Net Api Browser來檢查api支援度
- https://docs.microsoft.com/zh-tw/dotnet/api/?view=netstandard-1.6 - 會發現
DataSet
並不存在 - 而在 .Net Standard 2.0 有
- 點選 .Net Standard 1.6
- 選擇.Net Standard
- 選擇版本為2.0
- 可以看到就有支援DataSet
- 把Target從1.6轉回到2.0 在build就沒有問題了
- 把
northwind.xml
和NorthwindDal.cs
從LegacyApplication.View
專案刪掉,並且把NorthwindDalNetStandard
加入到reference,最後樣子如下: - 最後,把
LegacyApplication.View
專案調整target framework
- 對
LegacyApplication.View
點右鍵 - 選擇
Properties
Target Framework
改成.Net Framework 4.6.2
記得.Net Framework 4.6.2才有支援 .Net Standard 2.0嗎:http://immo.landwerth.net/netstandard-versions/#
- 對
- 把程式run起來,發現執行結果和之前一樣
建立一個.net core console使用建立出來的.Net Standard Lib
- 建立一個 .net core console 程式並且 reference 剛剛的 standard library
- 最後執行結果 - 出現錯誤
這個錯誤是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
完整程式碼可以再github看到:https://github.com/alantsai-samples/2017-10-14-net-core-workshop
git標籤:lab3/1-port-net-standard-finish
兩種方式取得:
- 用git clone然後在checkout到
lab3/1-port-net-standard-finish
- 從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/