2013-06-03 22 views
15

Ho distribuito un'applicazione ASP.NET MVC 4 e la home page si carica bene, ma quando provo ad accedere a qualsiasi altra pagina (che tenta di connettersi a un database SQL) ottengo questo errore:Impossibile caricare il file o l'assembly EntityFramework

Could not load file or assembly 'EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.FileLoadException: Could not load file or assembly 'EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

ho controllato il file web.config ed ha le seguenti voci rilevanti:

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
... 
<compilation targetFramework="4.0" /> 

che ho letto tutto quello che potevo trovare tramite Google, ma niente di così aiutato finora . So che in qualche modo la versione di EF I costruita con l'applicazione è diversa dalla versione che si trova sulla macchina di distribuzione, ma potrei usare qualche direzione su come correggere questa differenza.

+0

Non si può inviare la libreria EF al server? Hai EF nel GAC sul server? – Justin

+1

Avete dll EntityFramework nella directory bin? – Shyju

+3

Sembra che tu stia utilizzando EF5 su .NET Framework 4 (da cui la versione 4.4.0.0 nel tuo file di configurazione) ma l'eccezione che ottieni è di EF 4.1 (la versione è 4.1.0.0). Sembra che alcuni assiemi che stai usando provino ancora a usare 4.1 mentre l'altro EF5 (4.4.0.0). Assicurati di fare riferimento allo stesso assembly ovunque. Anche la voce nel file di configurazione è solo per puntare il.NET Framework per un tipo che sa leggere la sezione di configurazione quindi non è sufficiente aggiornarlo per far funzionare l'app contro EF5 – Pawel

risposta

14

Sembra che tu stia utilizzando EF5 su .NET Framework 4 (da cui la versione 4.4.0.0 nel file di configurazione) ma l'eccezione che ottieni è EF 4.1 (la versione è 4.1.0.0). Sembra che alcuni assiemi che stai usando provino ancora a usare 4.1 mentre l'altro EF5 (4.4.0.0). Assicurati di fare riferimento allo stesso assembly ovunque. Quindi, è necessario aggiornare tutti i riferimenti per utilizzare EF5 e ricostruire il progetto. Btw. la voce nel file di configurazione è solo per indirizzare .NET Framework a un Tipo che sappia leggere la sezione di configurazione quindi non è sufficiente aggiornarlo per far funzionare l'app contro EF5

2

si può provare il seguente:

nella soluzione Explorer andare al nodo di riferimento e individuare EntityFramework nodo di riferimento e poi nelle sue proprietà impostate per False proprietà Specific Version

quindi rimuovere l'identificativo della versione dal web.config, sostituire:

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 

con semplice:

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" requirePermission="false" /> 

in questo modo l'errore relativo alle versioni non corrispondenti deve essere risolto.

ancora come altri hanno detto nei commenti, è buono se si ottengono tutti i riferimenti da NuGet e il check-in tutto nel sistema di controllo del codice sorgente.

questo approccio ha funzionato per me molte volte per molti assemblaggi e non richiede ulteriori modifiche in web.config quando si esegue l'aggiornamento a una versione più recente di EF in seguito.

+1

La versione specifica era già impostata su false e, sfortunatamente, la modifica della linea suggerita in Web.config non ha modificato nulla. – Splendor

0

Ho incontrato questo mentre provavo a eseguire il debug di un progetto localmente su IIS Express.

Ho scaricato manualmente il sito aprendo le opzioni di IIS Express e selezionando Stop Site. Quindi sono stato in grado di procedere normalmente.

1

Prima di passare attraverso il divertimento di aggiornare tutti i riferimenti, prova a riavviare Visual Studio. Questo ha risolto il problema per me.

Problemi correlati