Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Idee per struttura modulare su sito precompilato
martedì 06 agosto 2013 - 20.14
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 4.0
|
Windows XP
|
Visual Studio Express
|
MySQL 5.1
|
Firefox
|
Javascript
|
CSS 2.1
|
CSS 3.0
|
XHTML 1.1
ravalon
Profilo
| Expert
689
messaggi | Data Invio:
mar 6 ago 2013 - 20:14
Buongiorno a tutta la community,
Da tempo sento la necessità di dotare un mio lavoro web fatto con ASP.NET di moduli aggiuntivi da includere al bisogno secondo le necessità degli utenti.
Con ASP.NET ho difficoltà a capire come ideare una struttura del genere mentre mi era chiara con ASP clasic... per cui chiedo a chi ha già percorso questo iter;
come posso fare per predisporre un sito web precompilato in modo che in futuro io possa aggiungere con una semplice copia di files (DLL a questo punto) dei moduli aggiuntivi al mio lavoro?
Per fare un esempio...se volessi creare un sito base ma con la possibilità di aggiungere, separatamente ed in futuro, un modulo che crea una galleria random di immagini estratte da un catalogo (tanto per fare un esempio banale), come potrei fare ?
Grazie a chi mi darà idee e magari pezzi di codice sui quali studiare.
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 7 ago 2013 - 09:52
guarda anchio sono dietro a questo tipo di problematica però forse bisogna capire cosa intendi con modulare.
Per prima cosa dal punto di vista della pubblicazione (tasto destro sul progetto "publish") ci sono delle differenze che in base a come vengono impostati alcuni valori ti permettono di rendere "aggiornabile" o non "aggiornabile" il sito pubblicato, però questo è solo un aspetto che riguarda il codice che sarà generato per la pubblicazione.
Se invece consideriamo la scomposizione di un progetto web in più parti dal punto di vista della struttura sorgente allora il mio approccio è quello di creare più progetti web all'interno di un unica soluzione che in alcuni caso si referenziano tra di loro.
Per riprendere il tuo esempio io ho creato, dentro la soluzione che racchiude tutti i progetti, un progetto "web application" che funge da gallery per immagini, quindi da qualsiasi altro progetto posso referenziare questo progetto "gallery" che verrà copiato come unica dll all'interno del progetto corrente.
Con questo approccio però ci sono alcune problematiche non di poco conto da affrontare, per prima cosa i file del progetto che devi condividere devono essere inclusi come embedded resource in modo che puoi accederci tramite la dll di riferimento e poi quando fai riferimento a questi file sia che sei all'esterno della dll sia che sei all'interno del progetto "gallery" devi usare un approccio differente, questo perchè non puoi fare riferimento tramite url tradizionale.
L'aspetto negativo su cui vorrei trovare una soluzione più efficace è per esempio quello di avere la possibilità di condividere una path tra progetti differenti, mi spiego meglio, quando fai riferimento dal tuo progetto ad un percorso lo puoi fare in modo assoluto o in modo relativo, se lo fai in modo relativo non puoi uscire dal contesto del progetto stesso, sarebbe invece utile poterlo in qualche modo fare condividendo che ne so una specie di path relativa tra progetti differenti.
Comunque se hai intenzione di seguire questo approccio sono a disposizione per farti vedere qualche esempio nel caso ti servisse.
Forse ci sono altri sistemi utilizzando plug-in esterni che facilitano questo compito, io non li ho ancora presi in considerazione, anzi se qualcuno che sta seguendo questo post può suggerire strade alternative...
Andrea Restucci - Web Developer
ravalon
Profilo
| Expert
689
messaggi | Data Invio:
mer 7 ago 2013 - 15:53
Grazie per la tua collaborazione Andrestu,
il mio progetto è un "web site" e non un "web project"...so che ci sono sostanziali differenze.. inoltre pre-compilo il progetto pubblicando cosi solamente le DLL dell'intero lavoro, anche per proteggere un po il tutto...
Per me quindi, creare più progetti dentro un solito solution non sarebbe praticabile (dovevo pensarci prima)...
Inoltre, pubblicando le DLL, devo pensare ad un motore che preveda già i vari componenti, attivabili o meno...
...mi spiego meglio...l'ho già fatto per la masterpage; il mio progetto capisce quale è il nome della masterpage da usare in base al tema impostato dall'utente....cosi posso usare template differenti per la masterpage dando al layout aspetti anche molto differenti che però prevedono sempre gli stessi oggetti...
....funziona alla grande ma ho dovuto comunque prevedere a priori la presenza di queste masterpage perchè se non fossero state compilate insieme a tutto il resto non avrebbero funzionato.
Hai un'idea di come si possa fare ?
Per la storia del tuo Path, non ho capito molto bene cosa vorresti fare...potresti farmi un esempio pratico ?
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 7 ago 2013 - 16:29
> Per me quindi, creare più progetti dentro un solito solution non sarebbe praticabile (dovevo pensarci prima)...
anche con una "web application" puoi precompilare il tutto, se usi VS2010 devi installare un aggiornamento per avere accesso alle relative opzioni di pubblicazione, con VS2012 forse è già incluso
> Inoltre, pubblicando le DLL, devo pensare ad un motore che preveda già i vari componenti, attivabili o meno...
> ...mi spiego meglio...l'ho già fatto per la masterpage; il mio progetto capisce quale è il nome della masterpage da usare in base al tema impostato > dall'utente....cosi posso usare template differenti per la masterpage dando al layout aspetti anche molto differenti che però prevedono sempre gli > stessi oggetti...
> ....funziona alla grande ma ho dovuto comunque prevedere a priori la presenza di queste masterpage perchè se non fossero state compilate
> insieme a tutto il resto non avrebbero funzionato.
quindi non ho capito qualè il problema, hai detto che funziona tutto...
secondo quanto ti ho indicato potresti suddividere le master-page in progetti web differenti quindi referenziare nel progetto base solo quelle di cui hai bisogno, anche se io la suddivisione di più progetti web la intenderei più a livello di logica di compiti svolti, comunque in qualsiasi modo fai la suddivisione è un sistema un pò "faticoso" da implementare nel senso che devi lavorare un pò in modo diverso sulla progettazione delle pagine che vuoi condividere.
Per esempio se vuoi creare una master-page in un progetto web a se (all'interno della stessa solution) e fare riferimento a questa master da un altro progetto web devi indicare tramite codice di andare a prendere la master-page all'interno della dll refernziata e non puoi puntare direttamente con url tradizionale
io parlo di solution ma in effetti dal momento che viene tutto inglobato in una dll si potrebbe lavorare anche senza essere sotto la stessa solution
il discorso path per il momento lasciamolo perdere
Andrea Restucci - Web Developer
ravalon
Profilo
| Expert
689
messaggi | Data Invio:
mer 7 ago 2013 - 16:36
No il mio lavoro sulle masterpage non è poi complicato...
Se l'utente, per esempio, ha impostato il tema "PIPPO", allora userà la cartella PIPPO come dentro THEMES e richiamerà una masterpage chiamata PIPPO.MASTER...
...funziona ma il problema è che tale masterpage deve essere già inculsa e compilata, non credo di poterla copiare successivamente...se non è cosi dimmelo e dimmi per favore i passi da compiere, considerando che io uso VS2010 Express..
In tal caso comunque è sempre un lavoro che io faccio avendoci pensato prima e poi si tratta solamente di puntare ad un file piuttosto che un altro, per cui è un lavoro di elaborazione di stringhe tutto sommato...
...diverso sarebbe se volessi copiare una DLL di un modulo aggiuntivo a posteriori....sarebbe possibile ? Se si, come fare ? un esempio ?
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 7 ago 2013 - 17:38
allora io intanto ti parlo per quel che riguarda VS2010 versione integrale (non express - non conosco le differenze) e progetti di tipo "applicazione web", se poi ci sono delle differenze da questo punto di vista non te lo so dire, comunque basta provare...
info sulle differenze tra web app e web site
http://msdn.microsoft.com/en-us/library/dd547590%28v=vs.100%29.aspx
quindi andando con ordine:
> ...funziona ma il problema è che tale masterpage deve essere già inculsa e compilata, non credo di poterla copiare successivamente...se non è
> cosi dimmelo e dimmi per favore i passi da compiere, considerando che io uso VS2010 Express...
allora normalmente (per quel che riguarda i progetti web-application) il codice relativo alla pagina (file .cs per quanto riguarda c#) e il codice generico che può essere un file con una classe a sè, viene pubblicato precompilato, invece per altre risorse come per esempio file di pagina (.aspx) vengono pubblicati senza precompilazione, questi file verranno compilati al momento della prima richiesta, quindi già di default dovresti riuscire ad apportare "al volo" qualsiasi modifica ai file .aspx.
Nel tuo caso però hai bisogno di pubblicare un intera pagina (file .cs + file .aspx) ex novo quindi dovresti cercare questa voce:
marge option => Do not merge. create a separate assembly for each page and control
http://msdn.microsoft.com/en-us/library/hh475319.aspx
se non la trovi (forse per i progetti web-site è già presente) devi installare l'aggiornamento di cui ti parlavo
http://msdn.microsoft.com/library/jj161045
scegliendo questa opzione forse puoi anche compilare altre pagine in differita e reinserirle nella pubblicazione di partenza, devi fare delle prove non ho mai provato.
> ...diverso sarebbe se volessi copiare una DLL di un modulo aggiuntivo a posteriori....sarebbe possibile ? Se si, come fare ? un esempio ?
in questo caso di seguito una breve spiegazione
1- impostare la master-page o la pagina che si vuole inglobare nella dll come "embedded resource" (tasto destro sul file -> proprietà -> build action)
in questo modo la pagina verrà inglobata nella dll quindi referenziando la dll si potrà accedere anche alla pagina
2- a questo punto sorge il problema su come puntare dal progetto a questa pagina contenuta nella dll e per questo io ho trovato del codice in rete "virtual path provider"
3- la complicazione sta nel fatto che se all'interno di questa pagina master (che sarà inglobata nella dll) fai riferimento ad altre risorse come css e immagini che vuoi inglobare tutte nella dll devi referenziarle non tramite url diretti ma tramite questo virtual path provider
ti allego un progettino di esempio, ora non ricordo forse derivante da un esempio preso da web, comunque te lo allego
Andrea Restucci - Web Developer
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 7 ago 2013 - 17:40
1901_Condivisione risorse tra Proge
eccolo
Andrea Restucci - Web Developer
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mer 7 ago 2013 - 17:55
e comunque ti avviso che è un pò più difficile lavorare con questa struttura in fase di test e debug, difficile perchè sto notando un pò di complicazioni non nella strutturazione del tutto ma nel processo di modifica e ricompilazione, nel senso che noto che VS mi blocca un pò queste dll e alle volte devo tirare giù manulamente il server per poter ricompilare.
Forse riesco a migliorare le cose utilizzando come server di debug IIS esterno e non quello interno di VS.
Proverò anche ad installare VS2012...
Andrea Restucci - Web Developer
ravalon
Profilo
| Expert
689
messaggi | Data Invio:
gio 8 ago 2013 - 15:15
Ok mi studio un po cio' che mi hai segnalato...
ad ogni modo la precompilazione la faccio con il seguente comando:
c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler -p "F:\LIDRA" -v / "c:\SitoCompilato"
In questa maniera mi rimangono solo i files DLL nella directory BIN e tutti gli altri files aspx presenti ma vuoti a fare solamente da marcatore di presenza pagina...
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
gio 8 ago 2013 - 15:54
a ok se usi la riga di comando allora dovresti avere accesso a tutte le opzioni di compilazione, ma hai provato a compilare ogni pagina in un assembly separato per poi poter aggiornare il sito solo con le nuove pagine?
Andrea Restucci - Web Developer
ravalon
Profilo
| Expert
689
messaggi | Data Invio:
gio 8 ago 2013 - 17:59
No non ho provato ma sul mio Visual Web Developer Express 2010 quell'opzione non c'è...vedo di aggiornarmi a VS2012...
...in quel modo pensi che potrei comunque usare la precompilazione da riga di comando e aggiornare singolarmente le pagine ? E come potrei farlo, con una semplice copia sul server ?
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
gio 8 ago 2013 - 19:10
non ne ho idea dovresti fare due prove, vedi qui se cè qualche opzione che potresti provare:
http://msdn.microsoft.com/en-us/library/ms229863%28v=vs.100%29.aspx
Andrea Restucci - Web Developer
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
mar 13 ago 2013 - 09:04
in caso dovresti utilizzare il VirtualPathProvider ti informo di una "problematica" cho ho scoperto utilizzandolo in questi giosrni, praticamente non funziona se provi ad utilizzarlo insieme ad IIS e un sito precompilato, ho cercato una possibile soluzione ma non sono riuscito a trovare niente...
Andrea Restucci - Web Developer
ravalon
Profilo
| Expert
689
messaggi | Data Invio:
mar 13 ago 2013 - 09:15
Ti ringrazio ma per il momento devo pensare ad un altro progetto...se ne riparla a Settembre-ottobre...
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !