Impossibile caricare file o assembly utilizzando .NET Core 2.0

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

Domanda

Ho appena iniziato a scrivere una nuova applicazione con Net Core 2.0 e ho questa struttura:

ConsoleApp
Library

la ConsoleApp importa il riferimento alla Library che è una dll e la Library importa HtmlAgilityPack 1.8.0 che è l'ultima versione disponibile.

Quando ConsoleApp , ottengo questo errore:

Eccezione non gestita di tipo 'System.IO.FileNotFoundException' in Library.dll Impossibile caricare il file o l'assembly 'HtmlAgilityPack, Versione = 1.8.0.0, Cultura = neutra, PublicKeyToken = bd319b19eaf3b43a'. Il file specificato non è stato trovato.

Il file è disponibile, come puoi vedere nell'immagine:

inserisci la descrizione dell'immagine qui

Risposta accettata

Utilizzare Fuslogvw.exe (Assembly Log Viewer di binding) per determinare cosa sta accadendo esattamente

Il visualizzatore del registro binding di assembly visualizza i dettagli per i binding di assembly. Queste informazioni consentono di diagnosticare il motivo per cui .NET Framework non è in grado di individuare un assembly in fase di esecuzione. Questi errori sono solitamente il risultato di un assembly distribuito nella posizione errata, un'immagine nativa che non è più valida o una mancata corrispondenza nei numeri di versione o nelle culture. L'errore del Common Language Runtime di localizzare un assembly si presenta tipicamente come TypeLoadException nell'applicazione.

Importante

È necessario eseguire fuslogvw.exe con i privilegi di amministratore.

Questo strumento viene installato automaticamente con Visual Studio. Per eseguire lo strumento, utilizzare il Prompt dei comandi dello sviluppatore

Per maggiori dettagli visita:

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

La seguente voce di registro di esempio mostra informazioni dettagliate su un bind di assemblaggio fallito.

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

Risposta popolare

Sembra che sia stato in grado di sistemare il "bug". Quindi, per riassumere, ho due applicazioni, la prima è una console e la seconda è una libreria NET CORE, entrambe basate su NET Core . Così ho rimosso la seconda NET CORE library dell'app e ho creato lo stesso progetto della STANDARD NET library .

Ho avuto lo stesso problema, quando eseguo l'app della console il compilatore ha visualizzato lo stesso messaggio di errore:

Eccezione non gestita di tipo 'System.IO.FileNotFoundException' in Library.dll Impossibile caricare il file o l'assembly 'HtmlAgilityPack, Versione = 1.8.0.0, Cultura = neutra, PublicKeyToken = bd319b19eaf3b43a'. Il file specificato non è stato trovato.

Così ho provato a installare HtmlAgilityPack anche sull'applicazione Console e, come per magia oscura, ha funzionato perfettamente.

Quindi suppongo che dovrei installare la dipendenza usata sulla libreria importata nella Console , anche sull'applicazione Console perché NET Core deve essere sicuro che tutta la dipendenza della libreria importata sia compatibile con NET Core .

IMHO questo dovrebbe essere specificato da Microsoft, e ancora, questo problema dovrebbe essere gestito da Visual Studio stesso, perché devo installare i tweak delle dipendenze?

Ovviamente non accetterò la mia risposta, aspetterò qualcuno che spieghi questa situazione ora che il problema è più chiaro per me e, ovviamente, per la comunità.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché