透過上一個lab: 了解到了如何更容易評估把.net framework程式碼port到.net Standard之後,接下來的問題就是,可是有些第三方.net framework library沒有source code但是又要用怎麼辦?
在這個lab將會介紹.Net Standard 2.0帶來的一大優勢,能夠直接reference .net framework的library。將會使用一個2012的library:NQuery
,主要目的是可以用sql語法來查詢資料。將會調整改成這種方式來查資料。
上個lab的最後成果的程式碼可以再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 Library使用NQuery
- 測試net core console結果
- 測試WinForm
修改Net Standard Library使用NQuery
- 以NQuery這個套件為例子,最後更新是2012年 肯定不是.net core
- https://www.nuget.org/packages/NQuery/
- 準備加入Nquery
- 對
NorthwindDalNetStandard
點右鍵 - 選擇
Manage Nuget Package..
- 搜索
NQuery
- 安裝
- 對
- 調整
NorthwindDalNetStandard.NorthwindDal.cs
的GetEmployeeFromCountry
方法內容,改成用NQuery
來過濾 - 改成以下程式碼:
public static string GetEmployeeFromCountry(string filterCountry = "UK") { DataSet dataSet = new DataSet(); dataSet.ReadXml("northwind.xml"); var dataContext = new DataContext(); dataContext.AddTablesAndRelations(dataSet); var sql = @" SELECT e.FirstName + ' ' + e.LastName FROM Employees e WHERE e.Country = '" + filterCountry + "'"; var query = new Query(sql, dataContext); var results = query.ExecuteDataTable(); var values = results.Rows.Cast<DataRow>().Select(r => (string)r[0]); var result = string.Join(Environment.NewLine, values); return result; }
測試net core console結果
- build專案,並且用dotnet執行
- 用
cmd
執行:dotnet NetCoreConsole.dll
執行結果和未修改前一致,換句話說使用沒有問題
測試WinForm
- 如果用 WinForm來執行會出錯
會出現說 Nquery 這個 dll 找不到
System.IO.FileNotFoundException: Could not load file or assembly 'NQuery, Version=0.9.5.0, Culture=neutral, PublicKeyToken=c65c4087e4cc0612' or one of its dependencies. The system cannot find the file specified.
- 這個是一個已知的bug,只有以前的程式(.Net Framework)的會發生,需要手動改csproj
- 先對
LegacyApplication.View
點右鍵然後選擇Unload Project
這個bug目前沒有任何預計解決辦法,只有改csproj檔案而已。相關issue請看:https://github.com/dotnet/sdk/issues/901 - 在來對csproj做修改
- 對
LegacyApplication.View
點右鍵,然後選擇Edit LegacyApplication.View.csproj
- 加入
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
- 確定也有<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
- 好了 之後
Reload Project
- 對
- 設定 為起始專案 之後嘗試執行
透過以上方式,據說70%的nuget net Framework api net standard 2.0 都能夠支援,換句話說能夠減少整合成本。
完整程式碼可以再github看到:https://github.com/alantsai-samples/2017-10-14-net-core-workshop
git標籤:lab3/3-use-net-framework-lib-finish
兩種方式取得:
- 用git clone然後在checkout到
lab3/3-use-net-framework-lib-finish
- 從github release下載:下載鏈接
沒有留言 :
張貼留言