無法使用.NET Core 2.0加載文件或程序集

.net-core c# html-agility-pack visual-studio

我剛開始用Net Core 2.0編寫一個新的應用程序,我有這個結構:

ConsoleApp
Library

ConsoleApp導入Library引用,是一個DLL, Library進口HtmlAgilityPack 1.8.0可供查看的最後一個版本。

當我運行ConsoleApp ,我收到此錯誤:

Library.dll中類型為“System.IO.FileNotFoundException”的未處理異常無法加載文件或程序集“HtmlAgilityPack,Version = 1.8.0.0,Culture = neutral,PublicKeyToken = bd319b19eaf3b43a”。找不到指定的文件。

該文件可用,如圖所示:

在此處輸入圖像描述

一般承認的答案

使用Fuslogvw.exe (程序集綁定日誌查看器)來確定發生了什麼

程序集綁定日誌查看器顯示程序集綁定的詳細信息。此信息可幫助您診斷.NET Framework無法在運行時找到程序集的原因。這些故障通常是部署到錯誤位置的程序集,不再有效的本機映像或版本號或文化不匹配的結果。公共語言運行庫無法找到程序集通常會在應用程序中顯示為TypeLoadException。

重要

您必須以管理員權限運行fuslogvw.exe。

此工具隨Visual Studio自動安裝。要運行該工具,請使用Developer Command Prompt

欲了解更多詳情,請訪

https://docs.microsoft.com/en-us/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer

以下示例日誌條目顯示有關失敗的程序集綁定的詳細信息。

> *** Assembly Binder Log Entry  (3/5/2007 @ 12:54:20 PM) ***  
> 
> The operation failed.   Bind result: hr = 0x80070002. The system
> cannot find the file specified.  
> 
> Assembly manager loaded from: 
> C:\WINNT\Microsoft.NET\Framework\v2.0.50727\fusion.dll   Running under
> executable  C:\Program
> Files\Microsoft.NET\FrameworkSDK\Samples\Tutorials\resourcesandlocalization\graphic\cs\graphicfailtest.exe
> 
> --- A detailed error log follows.   
> 
> === Pre-bind state information ===   LOG: DisplayName = graphicfailtest.resources, Version=0.0.0.0, Culture=en-US,
> PublicKeyToken=null    (Fully-specified)   LOG: Appbase = C:\Program
> Files\Microsoft.NET\FrameworkSDK\Samples\Tutorials\resourcesandlocalization\graphic\cs\
> LOG: Initial PrivatePath = NULL   LOG: Dynamic Base = NULL   LOG:
> Cache Base = NULL   LOG: AppName = NULL   Calling assembly :
> graphicfailtest, Version=0.0.0.0, Culture=neutral,
> PublicKeyToken=null.  
> ===  
> 
> LOG: Processing DEVPATH.   LOG: DEVPATH is not set. Falling through to
> regular bind.   LOG: Policy not being applied to reference at this
> time (private, custom, partial, or location-based assembly bind).  
> LOG: Post-policy reference: graphicfailtest.resources,
> Version=0.0.0.0, Culture=en-US, PublicKeyToken=null   LOG: Attempting
> download of new URL file:///C:/Program
> Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/graphicfailtest.resources.DLL.
> LOG: Attempting download of new URL file:///C:/Program
> Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/graphicfailtest.resources/graphicfailtest.resources.DLL.
> LOG: Attempting download of new URL file:///C:/Program
> Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/graphicfailtest.resources.EXE.
> LOG: Attempting download of new URL file:///C:/Program
> Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/graphicfailtest.resources/graphicfailtest.resources.EXE.
> LOG: All probing URLs attempted and failed.

熱門答案

似乎我能夠修復“bug”。總而言之,我有兩個應用程序,第一個是控制台,第二個是NET CORE庫,兩者都基於NET Core 。所以我刪除了第二個應用程序NET CORE library ,並創建了與STANDARD NET library相同的項目。

我遇到了同樣的問題,當我運行控制台應用程序時,編譯器顯示相同的消息錯誤:

Library.dll中類型為“System.IO.FileNotFoundException”的未處理異常無法加載文件或程序集“HtmlAgilityPack,Version = 1.8.0.0,Culture = neutral,PublicKeyToken = bd319b19eaf3b43a”。找不到指定的文件。

因此我嘗試在Console應用程序上安裝HtmlAgilityPack ,就像黑暗魔法一樣,這非常有效。

所以我想我應該安裝導入到Console的庫上使用的依賴項,也應該安裝在Console應用程序上,因為NET Core必須確保導入的庫的所有依賴項都與NET Core兼容。

恕我直言這應該由微軟指定,再次,這個問題應該由Visual Studio本身處理,為什麼我需要安裝依賴性twices?

當然我不會接受我的回答,我會等一個解釋這種情況的人,因為這個問題對我來說更清楚,當然還有社區。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow