Xamarin+.NET Standard之同時存在的HttpClient衝突小筆記
團隊試著使用「Xamarin + .NET Standard」的組合來試著開發跨平台應用程試,因為 .NET Standard 是比較新的 PCL(可攜式類別庫),碰到問題解決時,G大和S大能提供的解決方法也比較少,例如,如上圖,在 .NET Standard 裡呼叫 HttpClient 連編譯都有問題,這可不好玩…
問題還原
使用前面提供的 Xamarin - .NET Standard 專案範本新增專案。
由於我們要存取 API,依照正常的教學與常識,我們首先加入 HttpClient 函式庫:
HttpClient 函式庫的選擇,可以參考之前的揭開HttpClient APIs在UWP的神秘面紗文章。我們選擇第一個 Microsoft.NET.Http 組件來加入參考:
{ "supports": {}, "dependencies": { "Microsoft.Net.Http": "2.2.29", "NETStandard.Library": "1.6.1", "Newtonsoft.Json": "9.0.1", "Xamarin.Forms": "2.3.3.175" }, "frameworks": { "netstandard1.4": { "imports": "portable-net45+wpa81+wp8+win8" } } }
重新建置後,寫下第一行 HttpClient 程式碼:
HttpClient htpclient = new HttpClient();
即可得到紅色錯誤提示,建置錯誤訊息:
類型 'HttpClient' 同時存在於 'System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 和 'System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 中 The type 'HttpClient' exists in both 'System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'System.Net.Http, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
問題原因
.NET Standard 已經內含 System.Net.Http 組件,所有當你安裝了 Microsoft.NET.Http 組件,會得到二個相同命名空間衝突錯誤。
解決辦法
移除 Microsoft.Net.Http 的參考,並重新建置即可。
{ "supports": {}, "dependencies": { "NETStandard.Library": "1.6.1", "Newtonsoft.Json": "9.0.1", "Xamarin.Forms": "2.3.3.175" }, "frameworks": { "netstandard1.4": { "imports": "portable-net45+wpa81+wp8+win8" } } }
小結
這一次的經驗非常明顯是對 .NET Standard 目前所擁有組件的不夠了解,重覆參考了相同命名空間的組件所造成的。而且G大和S大找到的都是比較早期的錯誤與解答,還好,後來自己想想「同時存在」又在參考列表看不到,找到 NETStandard.Library.packages.targets 資訊後,答案就很清楚了。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。