Attualmente sto sperimentando con aree caricate dinamicamente con ASP.NET MVC 3 RC. L'ho visto scritto in molti posti che non è quello a cui sono destinate le aree, e (almeno pre-MVC 2) non è possibile, per esempio ad esempio here.ASP.NET MVC 3 RC AreaRegistration.RegisterAllAreas() e assiemi caricati dinamicamente
Ma ancora! Dovrebbe essere possibile farlo funzionare, giusto? Ho creato una soluzione, aggiunto un progetto MVC 3, aggiunto un'area e alcuni contenuti. Tutto funziona bene. Ora ho creato un nuovo progetto di libreria di classi (nella stessa soluzione), aggiunto un riferimento ad esso dal progetto MVC, e ho iniziato a spostare le parti relative all'area nella libreria. Modificata la directory di output del progetto di libreria nella cartella area del progetto MVC e verificato che le viste e il loro web.config siano copiati nella cartella di output.
Dopo aver letto così tanto su come non si potevano avere aree esterne, è stato un po 'strano che questo funzionasse. Nessun problema affatto! Il problema inizia quando rimuovo il riferimento tra i progetti e carico la libreria nel codice. (Prima di chiamare AreaRegistration.RegisterAllAreas()
.) Ora non funziona. Affatto.
Ho cercato un po 'nella sorgente per MVC 3, e il problema sembra essere con BuildManager.GetReferencedAssemblies()
che viene utilizzato per ottenere gli assembly per cercare le implementazioni di AreaRegistration
.
Ora, non ne sono sicuro al 100%, ma sembra che questo metodo guardi solo gli assembly presenti/referenziati in fase di compilazione, qualcuno può confermare se è effettivamente così?
Ho eseguito il debug attraverso questo, e quella chiamata-metodo effettivamente non trova l'assembly che ho caricato appena prima della chiamata. Potrebbe essere a causa di qualcos'altro che ho perso forse .. Qualche idea?
risposta perfetta, grazie mil! Sì, lo so che al momento è praticamente lo stesso di avere un solo progetto, ma volevo separarli lentamente e vedere dove colpivo i problemi mentre andavo, invece di tutti i problemi contemporaneamente :) I'm considerando la possibilità di compilare le viste come risorse nell'assemblaggio e realizzare le mie implementazioni di percorso/file virtuali, a meno che non sia un problema di prestazioni troppo elevato .. Come ho detto, sto solo giocando in questo momento per vedere cosa è possibile e cosa no ! Grazie ancora! – Robin
Potrebbe essere utile controllare tutte le viste nel proprio assieme area come risorse incorporate e osservare l'implementazione di un provider di percorsi virtuali. Questo è quello che ho fatto per realizzare gli assembly drag'n drop che ho potuto inserire nella directory bin del sito principale. –
@Joshua Hayes - mi puoi inviare la vostra soluzione zone pluggable? –