VS2017 開啟專案找不到 System.Net.Http 參照

某個使用 Microsoft.AspNet.WebApi.SelfHost 4.0.20918 NuGet Package 的 Console Application 專案使用 VS2017 開啟時出現 System.Net.Http 及 System.Net.Http.WebRequest 參照失效,改用 VS2015 開啟則無此問題。

VS2017 開啟失敗但 VS2015 正常的狀況之前遇過(VS2017 無法載入 MVC4 專案),但這回發生在 Console Appliation 專案,狀況不同。

優先檢查導致 NuGet 參照失敗的頭號戰犯 - .csproj 的 HintPath 設定 - 發現 System.Net.Http 的 HintPath 有正確指向 packages 目錄:

    <Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll</HintPath>
    </Reference>

而 packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll 確實存在,但我留意到有另一個目錄 net45,底下有個 _._ 空白檔案。

爬文學到新知識,_._ 檔案是用來確保 net45 資料夾在 ZIP 壓縮時不會被略過,而沒放 DLL 檔的 net45 資料夾代表 Package 相容於 .NET 4.5,但組件已內建於 GAC 不需額外複製安裝:

This is important because the existence of an "empty" net46 folder means that the package supports .NET Framework 4.6, but does not require any assemblies (DLLs) in order to run on that version of .NET. This is most likely because the implementation of the package is in the GAC.

專案為 .NET 4.5.2,故應改用 .NET 4.5+ 內建的 System.Net.Http.dll,換句話說,是參照 GAC 的 System.Net.Http 出了問題。回想專案升級 4.5.2 是很久以前的事,而升級後曾用 VS2017 編譯過,何以忽然不行?

鎖定關鍵字查到兩篇相關討論:

得到結論:這是 VS2017 15.5.x 的 Bug (我的 VS2017 版本是 15.5.7),將會在 VS2017 15.5.8 修正(目前進入 Preview 階段)。在修正釋出前,最簡單的 Workaround 是將 .csproj <Reference Include="System.Net.Http"> 及 <Reference Include="System.Net.Http.WebRequest"> 的 HintPath 刪除,即可藥到病除。

歡迎推文分享:
Published 26 July 2018 10:44 PM 由 Jeffrey
Filed under:
Views: 2,327



意見

# 棉花 said on 26 July, 2018 09:21 PM

文章最後一段"藥到命除".....這沒問題嗎XD

# Jeffrey said on 26 July, 2018 10:50 PM

to 棉花,哈哈哈哈,能錯成這樣自己都覺得好笑。謝謝指正。

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<July 2018>
SunMonTueWedThuFriSat
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication