2017年6月3日 星期六

[研究] 無法載入檔案或組件 'System.Net.Http' 或其相依性的其中之一。

[研究] 無法載入檔案或組件 'System.Net.Http' 或其相依性的其中之一

2017-06-03

同事執行 SVN Commit ( SubVersion 簽入),我再執行 SVN Update 更新我的程式碼,編譯成功,Deploy 出去後執行出錯。



在 Visual Studio 2017 測試,「重建方案」成功,「發行」成功,執行失敗,錯誤如下:


無法載入檔案或組件 'System.Net.Http' 或其相依性的其中之一。 找到的組件資訊清單定義與組件參考不符。 (發生例外狀況於 HRESULT: 0x80131040)



********************************************************************************
2020-03-13 再次遇到


'/' 應用程式中發生伺服器錯誤。

Could not load file or assembly 'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 系統找不到指定的檔案。
  描述: 在執行目前 Web 要求的過程中發生未處理的例外狀況。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

 例外狀況詳細資訊: System.IO.FileNotFoundException: Could not load file or assembly 'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 系統找不到指定的檔案。

原始程式錯誤:



行 27:             GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
行 28:
行 29:         }
行 30:     }
行 31: }


原始程式檔:  D:\Git\TWNCERTWebAzure\TWNCERTAzure\WebRole1\Global.asax.cs    行:  29

組件載入追蹤: 下列資訊在確定為何無法載入組件 'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 時是有幫助的。



=== Pre-bind state information ===
LOG: DisplayName = System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 (Fully-specified)
LOG: Appbase = file:///D:/Git/TWNCERTWebAzure/TWNCERTAzure/WebRole1/
LOG: Initial PrivatePath = D:\Git\TWNCERTWebAzure\TWNCERTAzure\WebRole1\bin
Calling assembly : WebRole1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: D:\Git\TWNCERTWebAzure\TWNCERTAzure\WebRole1\web.config
LOG: Using host configuration file: C:\Program Files\IIS Express\config\templates\PersonalWebServer\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Redirect found in application configuration file: 4.2.0.0 redirected to 4.3.4.0.
LOG: Post-policy reference: System.Net.Http, Version=4.3.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/796cf0a0/a6d9df88/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/796cf0a0/a6d9df88/System.Net.Http/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///D:/Git/TWNCERTWebAzure/TWNCERTAzure/WebRole1/bin/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///D:/Git/TWNCERTWebAzure/TWNCERTAzure/WebRole1/bin/System.Net.Http/System.Net.Http.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/796cf0a0/a6d9df88/System.Net.Http.EXE.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/796cf0a0/a6d9df88/System.Net.Http/System.Net.Http.EXE.
LOG: Attempting download of new URL file:///D:/Git/TWNCERTWebAzure/TWNCERTAzure/WebRole1/bin/System.Net.Http.EXE.
LOG: Attempting download of new URL file:///D:/Git/TWNCERTWebAzure/TWNCERTAzure/WebRole1/bin/System.Net.Http/System.Net.Http.EXE.



堆疊追蹤:



[FileNotFoundException: Could not load file or assembly 'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 系統找不到指定的檔案。]

[FileNotFoundException: Could not load file or assembly 'System.Net.Http, Version=4.3.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 系統找不到指定的檔案。]
   WebRole1.Global.Application_Start(Object sender, EventArgs e) in D:\Git\TWNCERTWebAzure\TWNCERTAzure\WebRole1\Global.asax.cs:29

[HttpException (0x80004005): Could not load file or assembly 'System.Net.Http, Version=4.3.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 系統找不到指定的檔案。]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +517
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +185
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +168
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +277
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +369

[HttpException (0x80004005): Could not load file or assembly 'System.Net.Http, Version=4.3.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 系統找不到指定的檔案。]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +532
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +111
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +724




版本資訊: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.8.4075.0
********************************************************************************

嘗試解決

因為同事請假數天,只好自己嘗試解決。

缺 System.Net.Http,那就先用 NuGet 安裝看看





結果依然 Visual Studio 2017「重建方案」成功,「發行」成功,執行失敗。

********************************************************************************

再次嘗試解決

(下圖) 搜尋 4.1.1.1,雖然已經安裝了 4.3.2 版,但發現方案中 Web.config 和 app.config 某些地方指定使用 System.Net.Http 4.1.1.1 版


(下圖) 搜尋 System.Net.Http,發現 packages.config 和 Web.config 和 app.config 中有設定System.Net.Http

如何重新安裝?(NuGet 已經安裝過一次),並且全部設定用新版呢?

考慮後把 packages.config 和 Web.config 和 app.config 中有關 System.Net.Http 的部分都註解掉,重新用 NuGet 再次重新安裝。






這次 Visual Studio 2017「重建方案」成功,「發行」成功,執行也成功了。

檢查 app.config 發現,我被註解掉的部分,重新被一模一樣的加回去了,所以可能是之前這樣設定的時候,某些檔案找不到 (或還有沒注意到的設定地方),註解掉,重新第二次安裝 NuGet 後,錯誤的設定修正了,檔案也被放到需要的地方了。


問題解決。

********************************************************************************
2020-03-13
上述方法失敗,
發現 System.Net.Http.Formatting 在 NuGet  不再提供,自己 Source Code 中 卻有 using,但都灰色未使用,砍掉。

(完)

沒有留言:

張貼留言