Come eseguire il debug di errori System.TypeLoadException in .NET?

Sto ottenendo il seguente errore su uno dei miei assembly di riferimento:

Could not load type 'System.Func`2' from assembly 'MyAssembly, ...

Sarò onesto, non credo di poter ricordare l’ultima volta che ho visto un errore System.TypeLoadException, o se l’ho visto, la soluzione era ovvia. Il mio primo istinto era vedere cosa MSDN aveva da dire al riguardo :

TypeLoadException viene generato quando il runtime della lingua comune non riesce a trovare l’assembly, il tipo all’interno dell’assembly o non può caricare il tipo.

Forse sto leggendo questo sbagliato, ma sta dicendo che il CLR semplicemente non riesce a trovare il tipo? Questo potrebbe avere più senso se non fosse qualcosa che era in mscorlib. Questo è stato tutto basato su .NET4 con VS2010, quindi non ci sono problemi di libreria mono o di altro tipo. Sto pensando troppo a questo? Cosa sta succedendo?

Il problema è che hai una mancata corrispondenza nelle tue versioni. Assicurati che tutti gli assembly siano compilati per .NET 4.

Ho ricevuto questo errore dopo il refactoring. Ho avuto due progetti per la compilazione di DLL con lo stesso nome.

Controllare il “Nome Assemblaggio” nella sezione “Applicazione” delle proprietà del progetto.

Non sono sicuro del tuo scenario specifico, ma l’Assembly Binding Log Viewer (fuslogvw) è di solito molto utile nel debug dei problemi di caricamento del tipo. Maggiori dettagli su http://msdn.microsoft.com/en-us/library/e74a18c4.aspx

È ansible ottenere questo anche se si modifica l’assembly che si sta tentando di caricare ma si dispone ancora di una versione precedente nel GAC. Cerca di caricare la versione di GAC non quella di cui si fa riferimento nel proprio progetto VS.

Ho ricevuto questo errore quando ho spostato una class da un progetto a un altro in uno sforzo di pulizia. Dopo aver esaminato tutti gli altri possibili motivi, ho ricaricato ciascuno dei progetti nella mia soluzione e tutto ha funzionato.

  1. Fare clic con il tasto destro sul nome del progetto in Solution Explorer
  2. Seleziona Scarica progetto
  3. Fare clic con il tasto destro sul nome del progetto in Solution Explorer
  4. Seleziona Ricarica progetto

Ho riscontrato questa eccezione quando ho effettuato il refactoring per spostare alcune classi nella propria libreria e ho fatto riferimento a una versione diversa della libreria che sta tentando di caricare nella nuova libreria (acquisita con NuGet) rispetto a quella che avevo utilizzato nel progetto originale.

La cosa che lo ha risolto è stato aprire NuGet Manager nel vecchio progetto e aggiornare il pacchetto appropriato in modo che fosse la stessa versione che stavo usando nella mia nuova libreria.