Impossible de charger le fichier ou l'assembly à l'aide de .NET Core 2.0

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

Question

Je viens de commencer à écrire une nouvelle application avec Net Core 2.0 et j'ai cette structure:

ConsoleApp
Library

ConsoleApp importe la référence de Library qui est une dll et Library importe HtmlAgilityPack 1.8.0 , dernière version disponible.

Lorsque ConsoleApp la ConsoleApp , j'obtiens cette erreur:

Exception non gérée du type 'System.IO.FileNotFoundException' dans Library.dll Impossible de charger le fichier ou l'assembly 'HtmlAgilityPack, version = 1.8.0.0, Culture = neutre, PublicKeyToken = bd319b19eaf3b43a' Le fichier spécifié est introuvable.

Le fichier est disponible, comme vous pouvez le voir sur l'image:

entrez la description de l'image ici

Réponse acceptée

Utilisez Fuslogvw.exe (Viewer Log Binding Assembly) pour déterminer ce qui se passe exactement.

La visionneuse du journal des liaisons d'assemblage affiche les détails des liaisons d'assemblage. Ces informations vous aident à diagnostiquer pourquoi le .NET Framework ne peut pas localiser un assembly au moment de l'exécution. Ces échecs sont généralement le résultat d'un assemblage déployé au mauvais emplacement, d'une image native qui n'est plus valide ou d'une non-concordance des numéros de version ou des cultures. L'échec du common language runtime lors de la localisation d'un assembly s'affiche généralement sous la forme d'une exception TypeLoadException dans votre application.

Important

Vous devez exécuter fuslogvw.exe avec des privilèges d'administrateur.

Cet outil est automatiquement installé avec Visual Studio. Pour exécuter l'outil, utilisez l'invite de commande du développeur.

Pour plus de détails, visitez:

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

L'exemple de journal suivant montre des informations détaillées sur une liaison d'assembly ayant échoué.

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

Réponse populaire

On dirait que j'ai pu résoudre le "bug". Donc, pour résumer, j'ai deux applications, la première est une console et la seconde est une bibliothèque NET CORE, les deux sont basées sur NET Core . J'ai donc supprimé la deuxième NET CORE library application et créé le même projet que la STANDARD NET library .

J'ai eu le même problème, lorsque je lance l'application de la console, le compilateur affiche le même message d'erreur:

Exception non gérée du type 'System.IO.FileNotFoundException' dans Library.dll Impossible de charger le fichier ou l'assembly 'HtmlAgilityPack, version = 1.8.0.0, Culture = neutre, PublicKeyToken = bd319b19eaf3b43a' Le fichier spécifié est introuvable.

J'ai donc essayé d'installer HtmlAgilityPack également sur l'application Console et, comme la magie noire, cela fonctionnait parfaitement.

Je suppose donc que je devrais installer la dépendance utilisée sur la bibliothèque importée dans la Console , ainsi que sur l'application Console , car NET Core doit être sûr que toutes les dépendances de la bibliothèque importée sont compatibles avec NET Core .

IMHO cela devrait être spécifié par Microsoft, et encore une fois, ce problème devrait être traité par Visual Studio lui-même, pourquoi dois-je installer la dépendance deux fois?

Bien sûr, je ne vais pas accepter ma réponse, j'attendrai quelqu'un qui explique cette situation maintenant que le problème est plus clair pour moi et, bien sûr, pour la communauté.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi