於該VM的事件檢視器中,可以發現有一警告的Exception資訊如下:
Exception Details: System.IO.FileLoadException: Could not load file or assembly 'System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes' or one of its dependencies. The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)
竟然是無法參考到System.Core!
參閱了網友的文章後,發現多與Autofac這套IoC Container相關,其中在Autofac的FAQ提到:
Autofac (as of 3.0) is a Portable Class Library that targets multiple platforms.......
Make sure your .NET framework is patched. Microsoft released patches to .NET to allow Portable Class Libraries to properly find the appropriate runtime (KB2468871). If you are seeing the above exception (or something like it), it means you're missing the latest .NET framework patches.
由於Autofac是PCL(Portable Class Libraries)形式,需要安裝KB2468871的Patch,才能找到正確的runtime元件;無獨有偶,雖然我未使用Autofac,但我的程式中也有參考一個類似的PCL元件:AutoMapper,因此推測與Autofac雷同,於安裝該Patch後,果然順利解決此問題!
由於出事的VM是測試部署用,幾乎沒做過Windows Update,自然未安裝過該Patch,因此會引發此錯誤,另一台可正常執行的測試機,經事後查證後果然是有安裝過的。
順帶一提,AutoMapper是於3.0後才以PCL形式發佈,因此若沒有執行安裝Patch的權限,網路上大多的應急方式都是將AutoMapper的nuget package退回到參考2.x版本(非PCL)即可。
由於出事的VM是測試部署用,幾乎沒做過Windows Update,自然未安裝過該Patch,因此會引發此錯誤,另一台可正常執行的測試機,經事後查證後果然是有安裝過的。
沒有留言:
張貼留言