无法使用.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