11

Il nostro prodotto è un'applicazione Web ASP.Net. Attualmente, utilizziamo progetti di siti Web in Visual Studio, ma abbiamo cercato di utilizzare i progetti di applicazioni Web per parecchio tempo. Attualmente sto facendo ricerche su di loro in modo che possiamo migliorare il nostro processo di implementazione.Struttura e distribuzione applicazioni Web

Abbiamo un sito Web di base condiviso e comune tra diversi client, e quindi lo estendiamo con funzionalità specifiche del client in progetti di siti Web client. I progetti client estendono la base e quindi fanno affidamento sui suoi contenuti. Per creare il prodotto completo, prima distribuiamo il sito Web di base, quindi lo sovrapponiamo al contenuto del progetto client.

Nell'osservare la conversione in progetti di applicazioni Web in Visual Studio, speravamo di poter creare il progetto di base, quindi creare progetti client e impostare riferimenti alla base. Questa struttura sembra funzionare correttamente, ma quando si tenta di distribuire l'applicazione dal progetto client utilizzando MSDeploy, viene pubblicata solo la dll dal sito Web di base. Questo va bene per alcune cose, il riferimento al codice compilato è utile, ma ci sono altri elementi come immagini, pagine js, htm, ecc. Che sono ancora sorgenti necessarie per il funzionamento dell'applicazione client. Abbiamo bisogno di più del codice compilato dal nostro sito web di base.

Che tutti Detto questo, mi viene in mente un paio di opzioni qui:

  1. Continuare a distribuire in 2 fasi. Prima il sito Web di base, quindi il sito Web del cliente per creare il prodotto completo.
  2. Modificare il processo di distribuzione per copiare i file di origine richiesti dal progetto di base
  3. Re-architect il nostro modello per supportare questa relazione base-cliente in un modo diverso. Non sono sicuro di come funzionerebbe e sarebbe l'opzione meno praticabile.
  4. ??

Esiste un'altra opzione che mi manca? Sto facendo qualcosa di sbagliato nel modo in cui sto configurando i miei progetti? C'è di più per fare una Web Application fare riferimento a un'altra applicazione Web oltre a condividere il codice compilato? Se questo è il caso, perché non dovresti semplicemente usare una libreria di classi condivise? O forse mi manca qualcosa con il processo di MS Deploy?

Sono aperto a suggerimenti qui perché sento che mi manca qualcosa. Non penso che il nostro modello per le nostre applicazioni web sia troppo unico.

Aggiornamento: il processo di doppia distribuzione funziona, ma si sente un po 'caotico. Qualche altro input?

+6

BTW, sì, il tuo modello è insolito. Ma scappare dai "progetti" del sito web in ogni caso. Sono unici e non in senso buono. –

+0

Ya abbiamo saputo per un po 'che i progetti di siti Web sono .. umm, "speciali" in vari modi. È difficile a volte risolvere qualcosa che non è rotto. Cosa rende la nostra struttura così unica? Un'altra opzione plausibile è che ogni progetto contenga la fonte completa dell'applicazione e configuri una sorta di branching di origine. L'abbiamo già fatto prima e diventa molto difficile mantenere i cambiamenti. – yourbuddypal

+1

Non ho mai pensato di utilizzare la ramificazione in questo scenario, ma, a ragione, la ramificazione in TFS 2010 è molto più semplice da utilizzare rispetto al passato. Vale la pena dare un'occhiata. Inoltre, ti consiglio di separare e isolare con attenzione le parti specifiche del client della tua applicazione dalle parti comuni. Crea punti di estensibilità e personalizzazione specifici all'interno dell'app. Ciò renderà più facile vedere come implementarlo al meglio. Ci sono anche trucchi divertenti che puoi giocare con MSDEPLOY. Vedi http: //www.amazon.it/Inside-Microsoft-Build-Engine-Foundation/dp/0735645248 –

risposta

0

Come viene "condiviso" il sito tra i clienti? Ogni cliente alla fine ottiene un sito diverso (indirizzo IP, ecc.) O accede allo stesso sito ma ottiene funzionalità diverse? Potresti voler aggiungere TUTTE le funzionalità in un singolo progetto e abilitare/disabilitare la funzionalità tramite le impostazioni.

0

Se ho capito correttamente la tua domanda, ti piacerebbe pubblicare anche elementi che non sono compilati (htm, JS, immagini, ecc.).

Quindi, ogni file nella scheda Esplora soluzioni ha le sue proprietà (a cui si accede mediante il tasto F4) che consentono di scegliere l'azione di compilazione (ad esempio compilare -> inserisce l'elemento nella DLL se applicabile, contenuto -> volontà copia il file "così com'è" nella directory di output).

Penso che il "contenuto" di azioni build, con l'opzione "copia nella directory di output" impostata su "copia se più recente", potrebbe essere la soluzione che stai cercando.

0

Vorrei analizzare attentamente ciò che state condividendo tra i progetti e come li condividete.

Se è un codice compilato, il modo corretto è estrarre tali classi nel proprio spazio dei nomi e assembly e condividere la DLL tra i progetti. Assicurati di seguire i principi OO e SOLID durante il refactoring.

Se è contenuto (js, htm, immagini, css) che condividi, qui hai alcune opzioni. È possibile creare una directory virtuale separata per il contenuto e fare riferimento al contenuto con un URL assoluto. Ciò aiuta perché in seguito, se si desidera separare un progetto nel proprio sito Web in IIS, non è necessario modificare gli URL dei contenuti. Puoi anche avere tutto il contenuto nel tuo cosiddetto sito Web di base e quindi fare riferimento al contenuto negli altri progetti utilizzando un percorso relativo relativo al sito web di base.

D'altra parte, se si tratta di controlli utente ASP.NET o di viste ASP.NET MVC che si desidera condividere, è preferibile creare un singolo elemento in ciascun progetto. Questo non significa necessariamente che ci sia un file fisico separato in quel percorso - puoi anche aggiungere elementi in un progetto .NET in Visual Studio che sono solo collegamenti di riferimento.

Per quanto riguarda il processo di distribuzione, non penso che ci sia qualcosa di sbagliato nei progetti di siti web di per sé. I progetti di siti Web hanno uno scopo diverso dai progetti di applicazioni Web, in quanto non è necessario compilare le classi ogni volta che si distribuisce il codice (a condizione che siano nelle cartelle dell'applicazione corrette). Suggerirei di attenersi al processo di distribuzione in 2 fasi con progetti di siti Web.

Vorrei anche rivedere i siti Web (directory virtuali) creati in IIS e considerare di annidarli se ha senso. Inoltre, una revisione dei pool di applicazioni (separati o condivisi) non danneggerebbe nessuno dei due.

Infine, questa è una vecchia domanda. Si prega di condividere se hai già implementato una strategia di successo.

1

Utilizzando l'assembly WebResource è possibile aggiungere CSS/JS/Qualche altro file come riferimento insieme al codice i.e, la DLL del progetto di base.

Se ho ragione è possibile aggiungere questa WebResource al progetto di base, quindi passare attraverso il link sottostante.

http://support.microsoft.com/kb/910442

come in questo modo, la maggior parte degli strumenti di terze parti saranno accedere ai propri file JS CSS e.

Prova questo. Spero che ti sarà d'aiuto.

Problemi correlati