2013-07-22 17 views
15

Sto costruendo un sito Web di ASP.NET Web Form utilizzando .NET 4.5.La definizione del tipo esiste in due librerie

L'errore ...

The type 'System.ComponentModel.DataAnnotations.Schema.ForeignKeyAttribute' exists in both 'f:\Projects\web sites\RC1Iteration05\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll' and 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.ComponentModel.DataAnnotations.dll' 

ho cercato di alias le librerie utilizzando ...

csc /r:EF_DataAnnotations="f:\Projects\web sites\RC1Iteration05\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll" /r:CM_DataAnnotations="c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.ComponentModel.DataAnnotations.dll" 

ma questo ha portato solo in "No file di origine specificato" che è altrettanto confusa perché i file sorgente sono stati specificati come diretti (here & here).

Ho notato che l'errore stava facendo riferimento alla DLL EF nella cartella net40 piuttosto che nella cartella net45. Immagino che se usassi la versione net45 il problema si risolvesse da solo, tuttavia non so come cambiare quel riferimento. Ho modificato l'attributo "targetFramework" al pacchetto EntityFramework nel file packages.config, ma ciò non ha fatto alcuna differenza.

Sono un po 'bloccato perché entrambe le soluzioni non sembravano fare nulla.

Mi sono guardato intorno e ho trovato una serie di post qui dove la gente ha affrontato problemi simili ma non ha ricevuto risposte. Spero che ci sia qualcuno là fuori che può aiutare!

Grazie

G

+0

L'opzione '/ r' si applica solo quando si sta effettivamente compilando qualcosa sulla riga di comando. – SLaks

+0

Quindi NON faccio mai la riga di comando. Ho pensato che stavo compilando una nuova libreria alias? Se no allora, cosa stava cercando di fare? –

+0

No. Gli alias consentono semplicemente di fare riferimento all'assembly di riferimento utilizzando un nome diverso nei file di origine. – SLaks

risposta

36

Come avrete notato, si sta utilizzando la versione .Net 4.0 su Entity Framework su .Net 4.5.
Questo non funzionerà.

Reinstallare EF da NuGet e dovrebbe funzionare correttamente.

+0

Utilizzo SQL Server CE 4.0 e ho installato un pacchetto che consentiva l'utilizzo dell'EF con CE (parte del problema)? Non lo vedo però nella lista dei pacchetti. Quando sono andato a disinstallare il pacchetto EF non è riuscito a causa di un problema di dipendenza (OAuth). Nella mia esperienza ho scoperto che la disinstallazione e la reinstallazione dei pacchetti tende ad essere una pratica fallita, spesso destabilizzando il mio progetto e richiedendo ore per riassemblarlo o anche dover ricreare il progetto da zero. C'è un modo di reinstallare il pacchetto che non richiede di "sventrare" i riferimenti correnti? –

+0

Provare a cambiare manualmente il riferimento in/net45. Tuttavia, reinstallare i pacchetti NuGet non dovrebbe essere un compito problematico (anche se in seguito potresti voler ripristinare 'web.config' dal controllo del codice sorgente). Sembra che tu abbia incasinato i tuoi riferimenti locali. Se si eliminano tutti i riferimenti e si reinstalla tutto solo da NuGet, non si dovrebbe avere alcun problema. – SLaks

+0

Ho provato a cambiare il valore nel pacchetto.config ma non ha funzionato. C'è qualche altra cosa che dovrei cercare di modificare manualmente il riferimento? –

6

Le altre opzioni non hanno funzionato per me. Cosa ha funzionato stava andando in \ packages \ EntityFramework.6.1.3 \ lib \ e cancellando la directory net40 e poi facendo una ricostruzione di tutto.

Problemi correlati