2017-06-25 22 views
1

我目前正在開發一個API包裝程序.NET標準庫1.6並且我遇到了「問題」或理解錯誤我這邊。我選擇了.Net Standard,因爲它可以用在不同的平臺(.Net Core/.Net Framework等),所以我創建了一個類來處理API的Http端(產生GET請求)。問題是.Net Standard 1.6中的System.Net.Http版本是4.3.0.0,但.Net Framwork或Unit Test甚至Nuget中的System.Net.Http版本是4.0.0.0。.NET庫1.6中的HttpClient在.NET Framework或單元測試中使用時出現錯誤

這會導致運行使用我的庫的應用程序失敗,並說它找不到組件System.Net.Http,Version = 4.3.0.0。這使我想到我的問題:

  • 爲什麼版本不同?
  • 某人如何解決這個問題? (現在我去了.Net標準1.1到 使它工作)
  • 這是一個正常的「行爲/系統」?

謝謝你的時間。

+0

不應該使用'System.Net.Http'嗎? –

+0

我認爲這個問題的確是如果你應該使用Net 4.0(32位)或淨4.5(64位)。您可能在Net版本之間存在錯誤匹配。如果API是使用64位網絡構建的,則它不會從使用32位網絡構建的應用程序運行。 – jdweng

+0

你使用哪個框架版本?因爲我記得,.NET Standard 1.6甚至不能被4.6.2引用。 – Evk

回答

2

根據@terrajobst on GitHub,您需要手動將綁定重定向屬性添加到.net框架項目的csproj文件中。

<PropertyGroup> 
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> 
</PropertyGroup> 

綁定重定向自動添加到應用程序項目類型,但不是類庫...它也適用於單元測試庫。

訣竅是HttpClient符合完整的.Net框架的簽名,並且次要版本似乎是內部變化,不適用於框架(可能是其他平臺?我不確定。)作爲結果,System.Net.Http 4.0.0.0是.Net Framework的正確版本,而4.3.0是適用的.Net標準版本號。綁定重定向是這個和其他幾種情況的正確解決方案。

我個人遇到問題給出MissingMethodException,並將其跟蹤到HttpClient版本不匹配,正如您所描述的。 (我希望我的這個評論能幫助別人節省下來的時間,我試圖追蹤它!)

相關問題