2010-09-22 11 views
11

Ho un problema molto strano. Ogni volta che provo ad usare la finestra di dialogo "Aggiungi vista" in ASP.NET MVC2 e poi provo a "Creare una vista fortemente tipizzata" selezionando "Visualizza classe dati" dal menu a tendina delle classi disponibili nessuna delle classi ("modelli ") nel mio progetto MVC stanno mostrando.Il tentativo di aggiungere una vista fortemente tipizzata non trova alcuna classe nel progetto MVC

La parte molto strana sono tutti gli assembly a cui fa riferimento il mio progetto MVC, anche altri progetti nella soluzione, le loro classi vengono visualizzate. Ho provato a pulire, ricostruire, pulire la cartella obj ma ogni volta, per qualche motivo, nessuna delle classi nel mio attuale assembly MVC viene visualizzata. Stava funzionando bene prima, ma ora non lo è più e non riesco a pensare a nulla di ciò che è cambiato.

Qualcuno ha riscontrato questo problema in precedenza? Grazie per l'aiuto!

Immagine di esempio:

http://imgur.com/47itE.png

+0

Avendo lo stesso identico problema con questo menu a discesa, normalmente è risolto semplicemente ricostruendo il file, ma non funziona ora. Raccogliendo tutte le classi dalle mie dll di riferimento è che non ha raccolto le classi presenti nel mio progetto web mvc, sei riuscito a trovare qualche tipo di correzione? – spaceman

risposta

2

capito questo, ecco la soluzione:

Il progetto MVC è stato riferimento a un gruppo di assemblee di contratto di servizio che in cui fa riferimento a un "CommonServiceContractAssembly.dll". Il progetto MVC faceva anche riferimento a "CommonServiceContractAssembly.dll". Il progetto MVC e gli assembly del contratto di servizio sono stati tutti compilati facendo riferimento a versioni leggermente diverse di "CommonServiceContractAssembly.dll"

Quando Visual Studio 2010 rifletteva su tutti gli assembly di riferimento su "Crea una vista fortemente tipizzata" di I believe it wasn ' t sicuro su come gestire la versione leggermente diversa di "CommonServiceContractAssembly.dll" a cui si fa riferimento in modo da non visualizzare le possibilità riflesse del "modello fortemente tipizzato" per qualsiasi assembly dipendente da "CommonServiceContractAssembly.dll".

La correzione è effettivamente forzare il dominio dell'app di Visual Studio 2010 a utilizzare la versione corretta di "CommonServiceContractAssembly.dll" all'avvio di Visual Studio 2010. Ciò è stato realizzato con un Evento Inserisci costruire come la seguente:

REM Questo è necessario per la produzione di T4 dai modelli per funzionare correttamente copia "$ (TargetDir)" CommonServiceContractAssembly.dll" '$ (DevEnvDir) PublicAssemblies \'/Y

Così ho copiare "CommonServiceContractAssembly.dll" a cui fa riferimento "ovunque" in cui Visual Studio caricarlo. Dopo che ho fatto questo tutto ha funzionato correttamente.

Un'altra opzione sarebbe quella di assicurarsi sempre che tutti gli assembly che condividono una dipendenza comune viene sempre compilata con la stessa versione di quella dipendenza.

+0

Sto avendo lo stesso identico problema che stai descrivendo qui. ho controllato i riferimenti e ho aggiornato tutto per utilizzare la stessa versione per tutte le dipendenze, ma il problema persiste. come hai trovato la tua soluzione? – spaceman

+0

Hmm, mi dispiace sentire che la soluzione non funziona per te. Dai un'occhiata al riflettore e verifica anche quello sopra, non lo sai mai. Come ho gestito la mia soluzione pensavo a come Visual Studio deve caricare i miei assembly per riflettere su di essi per determinare "ViewModel Candidates". Sulla base dell'esperienza precedente, so che .NET (e VS dal momento che funziona su .NET) può diventare "sconvolto" se tutte le versioni di riferimento non coincidono. Scommetto che VS2010 lancia un'eccezione da qualche parte internamente che viene gestita e decide di abbandonare il tentativo di risolvere l'assembly interessato. Tienici aggiornato! –

+0

Questa risposta mi ha indirizzato verso la giusta direzione. Il mio progetto faceva riferimento ad esempio 'Assembly X 1.0.1' mentre uno degli altri riferimenti stava usando' Assembly X 1.0.0'. L'aggiornamento del riferimento in quella libreria di classi alla versione più recente ha fatto il trucco. – Marthijn

-1

Alcuni tipi dal progetto vengono filtrati da quella finestra (per esempio tutti i tipi che terminano in 'Controller', o tutti i tipi nello spazio dei nomi System o Microsoft). È possibile che il tuo progetto non abbia alcun tipo che possa passare attraverso i filtri della finestra di dialogo.

+0

Grazie per la risposta! Questo non è il problema. Ho detto "Person.cs" nella cartella dei modelli del mio progetto MVC. Per qualche motivo Person.cs non viene visualizzato affatto nel menu a discesa, anche se prima (o classi di natura simile)! Abbastanza strano lo so. Non sarebbe un grosso problema, ma la mia azienda utilizzerà presto le funzionalità T4 di questo strumento per creare i nostri modelli, quindi devo capire che cosa sta succedendo affinché possiamo essere efficienti. –

1

Assicurarsi di contrassegnarli come "Pubblico" e compilarlo una volta prima di aprire la finestra di dialogo AddView.

+1

Anche questo è un buon punto, fallo prima di ogni altra cosa! –

+0

Voto negativo, fornire spiegazioni .... –

14

Its Perché non hai creato la tua applicazione, prima costruisci la tua applicazione e poi fai una visualizzazione che mostrerà.

+2

Questa è sicuramente la prima cosa da provare poiché VS utilizza la riflessione sul codice compilato per scoprire i possibili tipi ViewModel. Nella mia domanda ho accennato al fatto che ho provato a pulire e ricostruire e ho comunque riscontrato il problema. –

-1

Prima di aggiungere vista, basta creare la soluzione e quindi aggiungere la visualizzazione funzionerà. se non funziona allora puoi ancora preoccuparmi con me ti darò un'altra soluzione

+0

La domanda dice che l'ho fatto, ma questa potrebbe essere una soluzione probabile per gli altri che erroneamente non hanno –

Problemi correlati