2011-12-15 11 views
9

Volevo solo condividere qualcosa che ho imparato. Ci sono molti post su TypeLoadExceptions qui, ma nessuno di loro sembrava avere la risposta di cui avevo bisogno.Soluzione a TypeLoadException

Questa pagina ha alcune particolarmente buone informazioni, ma non sembrava affrontare specificamente quello che stavo vedendo e come ho risolto esso (potrebbe essere sbagliato):

TypeLoadException says 'no implementation', but it is implemented

La SOLUZIONE per me era semplice: eliminare tutti i file cache di Visual Studio 2010 e utilizza per generare file di assembly.


Sfondo del problema:

Ecco alcuni ulteriori dettagli. Stavo vedendo un TypeLoadException come:

Eccezione non gestita: System.TypeLoadException: Metodo [nome del metodo] in tipo [nome del tipo] dal gruppo [nome assembly], Version = xxxx, Lingua = il neutro PublicKeyToken = null non ha un'implementazione.

Ho avuto un'implementazione ... ho pensato, fino a quando ho guardato l'assemblea con ILDASM. Ho scoperto che stavo ottenendo vecchie versioni di DLL scritte nella mia cartella di output che aveva interfacce obsolete. La mia cartella di output non era l'impostazione predefinita, ma un percorso relativo al di fuori della cartella del progetto (forse VS non può gestirlo completamente ??). Dopo aver eseguito la pulizia/ricostruzione del progetto, la cartella "obj" del progetto era l'unica cartella in tutte le cartelle figlio della cartella del progetto che aveva il datestamp corretto nella DLL. La cartella "bin" per qualche motivo aveva ancora una vecchia versione. E suppongo che era quello che stava per essere copiato nella cartella di output.

Prima di questo avevo provato:

  • pulito/ricostruzione
  • riavviare Visual Studio (2010)
  • riavvio
  • cancellando i miei DLL di assemblaggio nella cartella di output (bin \ x86 \ debug)

... senza successo.

Io non sono sicuro perché VS non stava copiando il corretto montaggio in "obj" nella cartella di output ... Il progetto che fa riferimento l'assemblea obsoleto era corretta.

+2

Non pubblicare la soluzione nella domanda. Pubblica la domanda come se stia ancora riscontrando il problema, quindi pubblica la soluzione come risposta.È meglio aspettare un giorno o giù di lì - dare alle persone il tempo di pubblicare le proprie soluzioni, è possibile che uno sia migliore del tuo. – ChrisF

+0

Devo essere d'accordo con @ChrisF, dovresti aver postato prima la domanda e poi la risposta Anche se apprezzo la risposta (mi ha aiutato) avresti potuto ottenere alcuni punti di gloria anche per questo, e forse ho visto altre persone rispondere che non hai pensare. – iMortalitySX

risposta

2

Stai usando una specie di controllo del codice sorgente e stai facendo check-in e check-out? In caso affermativo, assicurarsi che le cartelle obj e bin non siano archiviate nel controllo sorgente. Se sono quindi eliminati dal controllo del codice sorgente, controlla tutto, quindi ricostruisci la soluzione.

0

Avevo questo tipo di problema in Visual Studio 2015 e l'ho risolto utilizzando il gestore pacchetti NuGet per la soluzione, per reinstallare un pacchetto che era stato installato in qualche modo in versioni diverse.