No se pudo cargar el archivo o el ensamblaje utilizando .NET Core 2.0

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

Pregunta

Acabo de comenzar a escribir una nueva aplicación con Net Core 2.0 y tengo esta estructura:

ConsoleApp
Library

ConsoleApp importa la referencia de la Library que es una dll, y la Library importa HtmlAgilityPack 1.8.0 que es la última versión disponible.

Cuando ejecuto ConsoleApp , recibo este error:

Excepción no controlada del tipo 'System.IO.FileNotFoundException' en Library.dll No se pudo cargar el archivo o el ensamblaje 'HtmlAgilityPack, Versión = 1.8.0.0, Culture = neutral, PublicKeyToken = bd319b19eaf3b43a'. No se pudo encontrar el archivo especificado.

El archivo está disponible, como se puede ver en la imagen:

introduzca la descripción de la imagen aquí

Respuesta aceptada

Utilice Fuslogvw.exe (Visor de registro de enlace de ensamblaje) para determinar qué está sucediendo exactamente

El Visor de registro de enlace de ensamblaje muestra detalles para los enlaces de ensamblaje. Esta información le ayuda a diagnosticar por qué .NET Framework no puede localizar un ensamblaje en tiempo de ejecución. Estas fallas generalmente son el resultado de un ensamblaje implementado en la ubicación incorrecta, una imagen nativa que ya no es válida, o una falta de coincidencia en los números de versión o culturas. El error en el tiempo de ejecución del lenguaje común para localizar un ensamblaje generalmente aparece como una excepción TypeLoadException en su aplicación.

Importante

Debe ejecutar fuslogvw.exe con privilegios de administrador.

Esta herramienta se instala automáticamente con Visual Studio. Para ejecutar la herramienta, use la solicitud de comando del desarrollador

Para más detalles visite:

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

La siguiente entrada de registro de muestra muestra información detallada sobre un enlace de ensamblado fallido.

> *** 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.

Respuesta popular

Parece que pude arreglar el "error". Entonces, para resumir, tengo dos aplicaciones, la primera es una consola y la segunda es una biblioteca NET CORE, ambas se basan en NET Core . Así que eliminé la segunda NET CORE library aplicación y creé el mismo proyecto que la STANDARD NET library .

Tengo el mismo problema, cuando ejecuto la aplicación de consola, el compilador mostró el mismo mensaje de error:

Excepción no controlada del tipo 'System.IO.FileNotFoundException' en Library.dll No se pudo cargar el archivo o el ensamblaje 'HtmlAgilityPack, Versión = 1.8.0.0, Culture = neutral, PublicKeyToken = bd319b19eaf3b43a'. No se pudo encontrar el archivo especificado.

Así que traté de instalar HtmlAgilityPack también en la aplicación de la Console , y como magia oscura funcionó perfectamente.

Así que supongo que debo instalar la dependencia usada en la biblioteca importada a la Console , también en la aplicación de la Console porque NET Core debe estar seguro de que toda la dependencia de la biblioteca importada es compatible con NET Core .

En mi humilde opinión, esto debería ser especificado por Microsoft, y nuevamente, este problema debería ser manejado por Visual Studio , ¿por qué necesito instalar los twices de dependencia?

Por supuesto que no voy a aceptar mi respuesta, esperaré a alguien que explique esta situación ahora que el problema es más claro para mí y, por supuesto, para tanta comunidad.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué