2012-03-12 9 views
22

Ho creato una nuova applicazione Internet C# asp.net mvc 4.0 (beta) e sto avendo un comportamento un po 'strano nella finestra di dialogo Aggiungi vista in Visual Studio 2010 (sp1) . Quando decido di creare una vista fortemente tipizzata, all'interno della finestra di dialogo Aggiungi vista, il menu a discesa della classe Modello non mostra la mia classe ViewModel.Aggiungi vista Classe a discesa classe non mostrando la mia classe

Per la cronologia, sì ho compilato l'applicazione prima di attivare la finestra di dialogo Aggiungi vista.

Credo di aver individuato il problema ma non so come risolverlo. Qui di seguito sono i Repro-passi se qualcuno si preoccupa di riprodurre il comportamento:

  1. In Visual Studio 2010 (SP1), creare un nuovo C# asp.net MVC 4.0 (beta) Internet Application.
  2. All'interno della cartella Modelli, creare una nuova classe semplice chiamati “GazouViewModel.cs”
  3. compilare l'applicazione, aprire il HomeController, fare clic con l'ActionResult Index() e selezionare Aggiungi vista ...
  4. Nel Aggiungi finestra di dialogo, seleziona la casella di controllo “visione fortemente tipizzato” e nella classe del modello: discesa, si noterà il vostro “GazouViewModel”

  1. In Esplora soluzioni, fare clic con il tasto destro del mouse sul progetto e selezionare "Gestisci pacchetti NuGet"
  2. Cercare, trovare e installare il pacchetto "Bootstrapper.Autofac".
  3. Ricostruisci l'applicazione e verifica se il tuo "GazouViewModel" è ancora visualizzato nella finestra di dialogo a discesa Aggiungi vista.
  4. Il "GazouViewModel" dovrebbe ancora essere visualizzato nel menu a discesa.

  1. In Esplora soluzioni, fare clic destro il progetto e selezionare “Gestione Pacchetti Nuget”
  2. cercare, trovare e installare il pacchetto “Autofac ASP.NET MVC4 (Beta) integrazione” .
  3. Ricostruisci l'applicazione e verifica se il tuo "GazouViewModel" è ancora visualizzato nella finestra di dialogo a discesa Aggiungi vista.
  4. Il "GazouViewModel" dovrebbe ancora essere visualizzato nel menu a discesa.

  1. In Esplora soluzioni, fare clic con il pulsante progetto e aggiungere una nuova classe (Class1.cs) in qualsiasi punto non importa.
  2. Fare in modo che Class1 attui IAutofacRegistration e implementare l'interfaccia .
  3. Ricostruisci l'applicazione e verifica se il tuo "GazouViewModel" è ancora visualizzato nella finestra di dialogo a discesa Aggiungi vista.
  4. Il "GazouViewModel" non viene più visualizzato all'interno del menu a discesa Modello .

sembra che non appena creo una classe che implementa l'interfaccia IAutofacRegistration e costruire l'applicazione, non sono più in grado di visualizzare i miei ViewModels in quella discesa.

Qualcuno può confermare se stanno ottenendo gli stessi risultati come me? E, ancora più importante, come si può risolvere questo?

IMPORTANTE: Ho provato esattamente gli stessi passaggi con un'applicazione mvc 3.0 e lo stesso identico comportamento si verifica ... quindi questo non è rilevante per la versione BETA.

Sinceramente Vince

+0

Se qualcun altro può fare una replica, indagherò. Suonami quando ricevi la conferma. – RickAndMSFT

+0

Posso riprodurre. VS2010 SP1. MVC4 Beta. Pulisci installazione. Se commento l'implementazione di IAutofacRegistration, improvvisamente inizia a funzionare. Molto strano. –

+0

Lo stesso qui, sto riscontrando lo stesso problema durante la riproduzione di questi passaggi. Penso che questa sia una trama contro l'uso del potentissimo modulo Autofac combinato con Bootstrapper (o probabilmente no, chissà ^^) –

risposta

1

UPDATE: Al momento della stesura di questo manuale, non riesco più a riprodurre l'errore. Forse i pacchetti NuGet che utilizzo sono stati aggiornati a una versione più recente e, a questo proposito, ho risolto l'errore.

Contrassegnerò questo post come chiuso.

Grazie per l'input di tutti su questo!

Vince

9

Ho risolto questo problema beeing pazza in come 2 ore e poi l'eliminazione del Assembly.cs dalla Proprietà cartella nella soluzione. Dopo aver effettuato una ricostruzione della soluzione, il menu a discesa "Aggiungi-vista" potrebbe individuare tutti i miei ViewModels, abbastanza strano.

Suppongo che la versione dell'assieme definita in Assembly.cs sia stata in qualche modo confusa con la versione effettiva utilizzata nel progetto. Comunque, ora funziona per il mio caso.

+0

Non ho provato la soluzione semplicemente perché non riesco più a riprodurre l'errore molto probabilmente a causa del fatto che i pacchetti NuGet sono stati aggiornati ... ma grazie per aver condiviso i risultati. – Vlince

+4

Solo la ricostruzione ha funzionato perfettamente per me, non è necessario eliminare Assembly.cs! –

+0

Questo ha funzionato per me grazie – user1434177

2

ho notato questo problema così (usando MVC 4 Beta su Visual Studio 2010). Riavviare Visual Studio ha risolto il problema per me.

0

Utilizzando VS 2010 e MVC 3.0, a un certo punto il menu a discesa Aggiungi classe di vista non mostrava alcuna classe per me. Il suggerimento di Ivan di riavviare VS sembrava funzionare per me.

Ho provato a eliminare AssemblyInfo.cs, a fare una pulizia e una ricostruzione, ma quelli non hanno risolto il problema. Quando ho riavviato VS, le classi modello sono tornate nel menu a discesa.

14

Se viene visualizzato il messaggio di errore: "In esecuzione di trasformazione: il file di input sembra utilizzare una versione dello schema non supportata da questo modello. Ciò potrebbe causare errori di compilazione. Utilizzare" Aggiungi nuovo elemento generato "per aggiungere un modello aggiornato ".

Si utilizza EF 5.x. Devi aggiungere metadati per EF 5.x al tuo modello T4. Nel file di intestazione chiamare DefineMetadata()

<#@ template language="C#" debug="false" hostspecific="true"#> 
<#@ import namespace="System.Text.RegularExpressions" #> 
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#><# 

DefineMetadata(); 

alla parte inferiore del vostro modello di creare metodo

private void DefineMetadata() 
{ 
    TemplateMetadata[MetadataConstants.TT_TEMPLATE_NAME] = "CSharpDbContext.Types"; 
    TemplateMetadata[MetadataConstants.TT_TEMPLATE_VERSION] = "5.0"; 
    TemplateMetadata[MetadataConstants.TT_MINIMUM_ENTITY_FRAMEWORK_VERSION] = "5.0"; 
} 
+2

Come mai l'hai capito? +1! : D –

+0

D'accordo con Jeroen. Questo ha funzionato per me! –

0

Mi rendo conto che è un po 'fuori moda. Ho avuto una situazione simile in cui le mie classi non venivano caricate nella procedura guidata Visualizza modello. Sto usando VS 2012 con MVC3. Tutti gli altri membri del team erano a posto, ma per fortuna vecchietti avevano problemi.Dopo molte ricerche e molte prove l'unica cosa che è stata sistemata in modo coerente è eseguire VS in safemode (dal prompt dei comandi: "C: \ Programmi (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ devenv.exe" /modalità sicura). Una delle mie estensioni deve causare il problema e, in modalità provvisoria, non viene caricata.

+0

Questa è una prova, ma ha disabilitato lo scaffold Entity Framework che stavo usando per enumerare i modelli in primo luogo. Vivere e imparare. Apprezzo comunque il consiglio. Continuo a dimenticare che VS ha persino una modalità sicura. – jsuddsjr

1

Basta pulire e creare la soluzione. Ha funzionato per me.

3

Ciò che ha funzionato per me è stato semplicemente creare la soluzione dopo aver creato il mio modello. Poi sono stato in grado di trovare il mio modello nell'elenco a discesa.

+0

per me l'ho appena fatto ma non ha funzionato ho chiuso il vwde e l'ho riaperto e ha funzionato –

1

Solo un'altra soluzione da aggiungere alla pila poiché nessuno degli altri ha funzionato per me. Questo è un altro esempio di Visual Studio che è terribile nella gestione di lunghi percorsi di file e spazi dei nomi.

Nel mio caso lo spazio dei nomi era troppo lungo per essere visualizzato nel menu a discesa "Classe del modello". Accorciare lo spazio dei nomi (un dolore ridicolo in se stesso) ha reso il drop down di nuovo lavoro!

+0

Un'altra possibile soluzione, che funziona anche quando il modello è in una dipendenza invece del progetto stesso: crea una sottoclasse, (nel tuo caso , in uno spazio dei nomi più corto); una volta creata la vista, è possibile modificare facilmente la dichiarazione '@ model' in modo che punti alla classe genitore ed eliminare la sottoclasse --- oppure no. – jpaugh

Problemi correlati