2012-06-26 15 views
10

La domanda è come risolvere i conflitti tra le versioni di assiemi nel mio progetto che sono stati aggiornati a MVC4 ed EF5?Trovati conflitti tra diverse versioni dello stesso assembly dipendente.MVC3 -> MVC4/EF4 -> EF5

Il problema si manifesta nel fatto che i miei controller e modelli possono includere System.Data.Objects, ma ora le mie viste.

Sto usando MVC 4, il mio progetto è stato aggiornato da MVC 3.

Entity Framework è la versione 5.

Ho un controller che è in grado di utilizzare ObjectContext da System.Data.Objects.

I miei utilizzi: utilizzando System.Data.Objects; utilizzando System.Data.Entity;

Quando provo ad includere l'utilizzo nelle System.Data.Objects forma vista, ottengo:

CS0234: non esiste il tipo o il namespace name 'oggetti' nello spazio dei nomi 'System.Data' (le manca un riferimento all'assembly)

sto il targeting .net 4.5

mie Crea viene visualizzato questo messaggio:? C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1561,5): avviso MSB3247: conflitti trovati tra diverse versioni dello stesso assembly dipendente.

+1

Non sono del tutto sicuro di quale sia il tuo problema, ma suppongo che la mia prima domanda sia: è comunque possibile evitare di interagire con objectcontext dalla vista?Questa è generalmente una cattiva idea e viola le regole del tuo modo di vedere "stupide" nel modello mvc. Dovresti evitare qualsiasi cosa diversa dalla visualizzazione di una logica specifica nelle tue visualizzazioni. In una nota a margine, puoi pubblicare la tua vista (o parte di essa) in modo da ottenere una migliore comprensione del tuo problema? – theMothaShip

+0

Questo è ciò che sto cercando di fare nella vista: @ ObjectContext.GetObjectType (item.TimelineEntry.Document.GetType()). Name.ToString(); –

+0

Quindi, ciò che probabilmente sta accadendo è che qualche altro assembly a cui si fa riferimento nel proprio progetto fa riferimento a una versione diversa della struttura dell'entità, quindi perché si sta visualizzando il messaggio nella visualizzazione della build. La tua applicazione è solo un file di progetto o ci sono più progetti nella stessa soluzione che tutti possono o non possono fare riferimento al framework di entità? – theMothaShip

risposta

3

Se si guarda il messaggio di build, si indica la versione 4.0 del framework .net a cui si fa riferimento ... Esiste un'impostazione nel file di progetto o web/app.config che specifica una versione in conflitto del framework .net ?

Hai familiarità con fuslog? è possibile configurarlo per registrare tutti i binding di assembly eseguiti da .net durante l'esecuzione dell'applicazione. Dovresti quindi essere in grado di vedere informazioni dettagliate su ciò che è vincolato quando. Se ancora non riesci a capirlo, puoi sempre eseguire un reindirizzamento obbligatorio su tale .dll nel web.config.

http://msdn.microsoft.com/en-us/library/eftw1fys.aspx - redirect vincolanti

http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.71).aspx - fusione log viewer

Impostare fusione logger e dare un'occhiata a ciò che l'uscita è. Se non si ottiene una risposta, provare il reindirizzamento dell'associazione (che potrebbe fornire almeno una soluzione temporanea).

+0

Non sono sicuro di come scoprire cosa sta facendo riferimento a cosa. Le proprietà del progetto fanno riferimento .Net 4.5. Come posso rintracciarlo? C'è solo una DLL System.Data.Entity nei riferimenti. –

+0

Sembra che la vista stia accedendo alla versione Entity Framework 5 di system.data.entity e che il controller stia accedendo alla versione 4, che ha system.data.objects. Come faccio 1) assicurarsi che l'intero progetto stia utilizzando i nuovi assembly. 2) Vai al contesto dell'oggetto sulla versione 5 EF? –

+0

Strano - il modello non ha problemi ad accedere a objectcontext. –

28

È possibile creare la soluzione in modalità diagnostica per ottenere informazioni più dettagliate sull'errore.

Aprire la finestra di dialogo Opzioni VS (Strumenti> Opzioni), navigare fino al nodo "Progetti e soluzioni" e selezionare "Crea ed esegui". Modificare la verbosità dell'output di generazione del progetto MS Build in Diagnostica.

Dai un'occhiata allo here.

+0

La modalità diagnostica ti dice esattamente quali dll stanno tirando anche nelle altre versioni. Molto utile. – Laurence

+4

Solo una nota, una volta ottenuto l'output della build fai una ricerca per la parola "conflitto" nella finestra di output e troverai il problema. –

0

Nella directory in cui stavo pubblicando, c'era una cartella denominata aspnet_client. L'ho spostato (invece di cancellarlo), ripubblicato, e ha funzionato. Non sono sicuro del motivo per cui quella cartella abbia deciso di darmi dei problemi improvvisamente.

Problemi correlati