Sito Web ASP.NET o applicazione Web ASP.NET?


Quando avvio un nuovo progetto ASP.NET in Visual Studio, è possibile creare un'applicazione Web ASP.NET o creare un sito Web ASP.NET.

Qual è la differenza tra l'applicazione Web ASP.NET e il sito Web ASP.NET? Perché dovrei sceglierne uno rispetto all'altro?

La risposta è diversa in base alla versione di Visual Studio che sto utilizzando?



Answers



Sito web:

Il progetto del sito Web è compilato al volo. Si finisce con molti più file DLL, il che può essere un problema. Dà anche dei problemi quando si hanno pagine o controlli in una directory che hanno bisogno di fare riferimento a pagine e controlli in un'altra directory poiché l'altra directory non può ancora essere compilata nel codice. Un altro problema può essere nella pubblicazione.

Se a Visual Studio non viene detto di riutilizzare costantemente gli stessi nomi, verranno sempre nuovi nomi per i file DLL generati dalle pagine. Ciò può portare ad avere numerose copie chiuse di file DLL contenenti lo stesso nome di classe, che genererà un sacco di errori. Il progetto Sito Web è stato introdotto con Visual Studio 2005, ma è risultato non essere estremamente popolare.

Applicazione web:

Il progetto di applicazione Web è stato creato come componente aggiuntivo e ora esiste come parte di SP 1 per Visual Studio 2005. Le principali differenze sono che il progetto di applicazione Web è stato progettato per funzionare in modo simile ai progetti Web forniti con Visual Studio 2003. Sarà compilare l'applicazione in un singolo file DLL in fase di compilazione. Per aggiornare il progetto, è necessario ricompilare il file DLL e pubblicare le modifiche affinché si verifichino.

Un'altra caratteristica interessante del progetto Web Application è che è molto più semplice escludere i file dalla vista del progetto. Nel progetto Sito Web, ogni file che si esclude viene rinominato con una parola chiave exclude nel nome file. Nel progetto Web Application, il progetto tiene semplicemente traccia dei file da includere / escludere dalla vista del progetto senza rinominarli, rendendo le cose molto più ordinate.

Riferimento

L'articolo ASP.NET 2.0 - Il sito Web e il progetto di applicazione Web fornisce anche motivi per i motivi per utilizzare uno e non l'altro. Ecco un estratto di esso:

  • È necessario migrare le applicazioni di Visual Studio .NET 2003 di grandi dimensioni a VS 2005? utilizzare il progetto di applicazione Web.
  • Vuoi aprire e modificare qualsiasi directory come un progetto Web senza creare un file di progetto? usa il progetto del sito web.
  • È necessario aggiungere passaggi pre-build e post-build durante la compilazione? utilizzare il progetto di applicazione Web.
  • È necessario creare un'applicazione Web utilizzando più progetti Web? utilizzare il progetto di applicazione Web.
  • Vuoi generare un assembly per ogni pagina? usa il progetto del sito web.
  • Preferisci la compilazione dinamica e il lavoro sulle pagine senza creare l'intero sito su ogni visualizzazione di pagina? usa il progetto del sito web.
  • Preferisci il modello di codice a pagina singola al modello code-behind? usa il progetto del sito web.

I progetti di applicazioni Web e i progetti di siti Web (MSDN) illustrano le differenze tra i progetti di siti Web e applicazioni web. Inoltre, discute la configurazione da effettuare in Visual Studio.




Il sito Web è ciò che viene distribuito su un server Web ASP.NET come IIS. Solo un mucchio di file e cartelle. Non c'è nulla in un sito Web che ti lega a Visual Studio (non esiste un file di progetto). La generazione del codice e la compilazione di pagine Web (come .aspx, .ascx, .master) vengono eseguite dinamicamente in fase di runtime e le modifiche a questi file vengono rilevate dal framework e ricompilate automaticamente. È possibile inserire il codice che si desidera condividere tra le pagine nella speciale cartella App_Code, oppure è possibile precompilarlo e inserire l'assieme nella cartella Bin.

L'applicazione Web è un progetto speciale di Visual Studio. La principale differenza con i siti Web è che quando si genera il progetto tutti i file di codice vengono compilati in un unico assembly, che viene inserito nella directory bin. Non si distribuiscono i file di codice sul server Web. Invece di avere una cartella speciale per i file di codice condivisi, puoi metterli ovunque, proprio come faresti nella libreria di classi. Poiché le applicazioni Web contengono file che non si intende distribuire, come file di progetto e di codice, esiste un comando Pubblica in Visual Studio per l'output di un sito Web in una posizione specificata.

App_Code vs Bin

La distribuzione di file di codice condivisi è generalmente una cattiva idea, ma ciò non significa che devi scegliere l'applicazione Web. È possibile avere un sito Web che fa riferimento a un progetto di libreria di classi che contiene tutto il codice per il sito Web. Le applicazioni Web sono solo un modo conveniente per farlo.

CodeBehind

Questo argomento è specifico per i file .aspx e .ascx. Questo argomento è di rilevanza decrescente in nuove strutture applicative come ASP.NET MVC e pagine Web ASP.NET che non utilizzano i file codebehind.

Avendo tutti i file di codice compilati in un unico assembly, inclusi i file codebehind di pagine .aspx e controlli .ascx, in Web Applications è necessario ricostruire ogni piccola modifica e non è possibile apportare modifiche in tempo reale. Questo può essere un vero problema durante lo sviluppo, dal momento che è necessario continuare a ricostruire per vedere le modifiche, mentre con le modifiche dei siti Web vengono rilevate dal runtime e le pagine / i controlli vengono ricompilati automaticamente.

Avere il runtime di gestire gli assembly codebehind è meno utile per te, dal momento che non devi preoccuparti di dare pagine / controlli a nomi univoci, o di organizzarli in namespace diversi.

Non sto dicendo che la distribuzione di file di codice sia sempre una buona idea (specialmente nel caso di file di codice condivisi), ma i file di codice devono contenere solo codice che esegue attività specifiche dell'interfaccia utente, gestori di eventi wire-up, ecc. stratificato in modo che il codice importante finisca sempre nella cartella Bin. In tal caso, la distribuzione di file codebehind non dovrebbe essere considerata dannosa.

Un'altra limitazione delle applicazioni Web è che è possibile utilizzare solo la lingua del progetto. Nei siti Web è possibile avere alcune pagine in C #, alcune in VB, ecc. Non è necessario il supporto speciale di Visual Studio. Questa è la bellezza dell'estensibilità del provider di build.

Inoltre, nelle applicazioni Web non si ottiene il rilevamento degli errori nelle pagine / controlli poiché il compilatore compila solo le classi codebehind e non il codice di markup (in MVC è possibile risolvere ciò utilizzando l'opzione MvcBuildViews), che viene compilato in fase di runtime.

Visual Studio

Poiché le applicazioni Web sono progetti di Visual Studio, alcune funzionalità non sono disponibili nei siti Web. Ad esempio, è possibile utilizzare gli eventi di compilazione per eseguire una serie di attività, ad es. Minify e / o combinare file Javascript.

Un'altra interessante funzionalità introdotta in Visual Studio 2010 è la trasformazione Web.config . Anche questo non è disponibile nei siti Web. Ora funziona con i siti Web in VS 2013.

La creazione di un'applicazione Web è più veloce della creazione di un sito Web, specialmente per siti di grandi dimensioni. Ciò è principalmente dovuto al fatto che le applicazioni Web non compilano il codice di markup. In MVC se si imposta MvcBuildViews su true, questo compila il codice di markup e si ottiene il rilevamento degli errori, che è molto utile. Il lato negativo è che ogni volta che si crea la soluzione si costruisce il sito completo, che può essere lento e inefficiente, specialmente se non si sta modificando il sito. Mi trovo a girare MvcBuildViews on e off (che richiede uno scaricamento del progetto). D'altra parte, con i siti Web è possibile scegliere se si desidera creare il sito come parte della soluzione oppure no. Se si sceglie di non farlo, la creazione della soluzione è molto rapida e si può sempre fare clic sul nodo Sito Web e selezionare Genera, se sono state apportate modifiche.

In un progetto di applicazione Web MVC sono disponibili comandi e finestre di dialogo aggiuntivi per attività comuni, come "Aggiungi vista", "Vai alla vista", "Aggiungi controller", ecc. Questi non sono disponibili in un sito Web MVC.

Se si utilizza IIS Express come server di sviluppo, nei siti Web è possibile aggiungere directory virtuali. Questa opzione non è disponibile nelle applicazioni Web.

NuGet Package Restore non funziona sui siti Web, devi installare manualmente i pacchetti elencati su packages.config Package Restore ora funziona con i siti Web che iniziano con NuGet 2.7




Sito Web = utilizzare quando il sito Web viene creato da grafici e i programmatori modificano solo una o due pagine

Applicazione Web = utilizzare quando l'applicazione viene creata dai programmatori e i progettisti grafici modificano solo una o due pagine / immagini.

I siti Web possono essere elaborati utilizzando qualsiasi strumento HTML senza dover avere uno studio di sviluppo, poiché i file di progetto non devono essere aggiornati, ecc. Le applicazioni Web sono le migliori quando il team utilizza principalmente lo sviluppatore e c'è un alto contenuto di codice.

(Alcuni errori di codifica si trovano nelle applicazioni Web in fase di compilazione che non si trovano nei siti Web fino al runtime).

Avvertenza: Ho scritto questa risposta molti anni fa e da allora non ho più utilizzato Asp.net. Mi aspetto che le cose siano ora passate.




A meno che tu non abbia una necessità specifica per un progetto compilato dinamicamente, non utilizzare un progetto di sito web .

Perché? Perché il progetto del sito web ti guiderà sul muro quando cerchi di cambiare o capire il tuo progetto. Le funzionalità di ricerca della digitazione statica (ad esempio trova utilizzi, refactoring) in Visual Studio occuperanno per sempre qualsiasi progetto di dimensioni ragionevoli. Per ulteriori informazioni, vedere la domanda Overflow dello stack Lenta "Trova tutti i riferimenti" in Visual Studio .

Non riesco davvero a capire perché abbiano abbandonato le applicazioni Web in Visual Studio 2005 per il tipo di progetto del sito Web di carboncaruncolo, che induce al dolore, drenaggio e produttività.







Questo potrebbe sembrare un po 'ovvio, ma penso che sia qualcosa che viene frainteso perché Visual Studio 2005 è stato spedito solo originariamente con il sito web. Se il tuo progetto riguarda un sito web che è abbastanza limitato e non ha molta separazione logica o fisica, il sito web va bene. Tuttavia, se è veramente un'applicazione web con moduli diversi in cui molti utenti aggiungono e aggiornano i dati, si sta meglio con l'applicazione web.

Il più grande pro del modello di sito web è che qualsiasi cosa nella sezione app_code sia compilata dinamicamente. È possibile effettuare aggiornamenti di file C # senza una ridistribuzione completa. Tuttavia questo arriva ad un grande sacrificio. Un sacco di cose accadono sotto le coperte che sono difficili da controllare. Gli spazi dei nomi sono difficili da controllare e l'utilizzo specifico della DLL esce di default dalla finestra per qualsiasi cosa sotto app_code poiché tutto è compilato dinamicamente.

Il modello di applicazione web non ha una compilazione dinamica, ma ottieni il controllo sulle cose che ho menzionato.

Se si sta effettuando uno sviluppo a più livelli, consiglio vivamente il modello di applicazione Web. Se stai facendo un sito web limitato o un'implementazione rapida e sporca, il modello del sito web potrebbe avere dei vantaggi.

Un'analisi più dettagliata può essere trovata in:




Dal libro di formazione autonomo MCTS 70-515 libro:

Con l'applicazione web (progetto),

  1. È possibile creare un'applicazione MVC.
  2. Visual Studio memorizza l'elenco di file in un file di progetto (.csproj o .vbproj), piuttosto che fare affidamento sulla struttura delle cartelle.
  3. Non è possibile combinare Visual Basic e C #.
  4. Non è possibile modificare il codice senza interrompere una sessione di debug.
  5. È possibile stabilire dipendenze tra più progetti Web.
  6. È necessario compilare l'applicazione prima della distribuzione, che impedisce di testare una pagina se un'altra pagina non viene compilata.
  7. Non è necessario memorizzare il codice sorgente sul server.
  8. È possibile controllare il nome e la versione dell'assembly.
  9. Non è possibile modificare singoli file dopo la distribuzione senza ricompilare.



Dipende da cosa stai sviluppando.

Un sito web orientato ai contenuti avrà il suo contenuto che cambia frequentemente e un sito Web è migliore per questo.

Un'applicazione tende ad avere i suoi dati memorizzati in un database e le sue pagine e il codice cambiano raramente. In questo caso è meglio disporre di un'applicazione Web in cui la distribuzione degli assembly è molto più controllata e offre un supporto migliore per i test delle unità.




Compilation In primo luogo c'è una differenza nella compilazione. Il sito Web non è precompilato sul server, è compilato su file. Potrebbe essere un vantaggio perché quando vuoi cambiare qualcosa nel tuo sito web puoi semplicemente scaricare un file specifico dal server, cambiarlo e caricare questo file sul server e tutto funzionerebbe correttamente. Nell'applicazione Web non è possibile farlo perché tutto è precompilato e si finisce con una sola dll. Quando cambi qualcosa in un file del tuo progetto, devi ricompilare di nuovo tutto. Quindi se ti piacerebbe avere la possibilità di cambiare alcuni file sul server, il sito Web è la soluzione migliore per te. Consente inoltre a molti sviluppatori di lavorare su un sito Web. Dall'altra parte, se non vuoi che il tuo codice sia disponibile sul server, dovresti scegliere l'applicazione web. Questa opzione è anche migliore per Unità Test a causa di un file DLL creato dopo aver pubblicato il tuo sito web.

Project structure C'è anche una differenza nella struttura del progetto. Nell'applicazione Web si ha un file di progetto proprio come lo si aveva nella normale applicazione. Nel sito Web non esiste un file di progetto tradizionale, tutto ciò che si ha è un file di soluzione. Tutti i riferimenti e le impostazioni sono memorizzati nel file web.config. @Page directive C'è un attributo diverso nella direttiva @Page per il file che contiene la classe associata a questa pagina. Nell'applicazione Web è standard "CodeBehind", nel sito Web si utilizza "CodeFile". Puoi vedere questo negli esempi qui sotto:

Web Application:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"  
Inherits="WebApplication._Default" %>  

Sito web:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

Namespace - Nell'esempio sopra puoi vedere anche un'altra differenza: come vengono creati i namespace. Nello spazio dei nomi delle applicazioni Web è semplicemente un nome del progetto. Nel sito Web c'è un ASP predefinito dello spazio dei nomi per le pagine compilate dinamicamente.

Modifica e continua - Nell'applicazione Web l'opzione Modifica e continua è disponibile (per attivarla è necessario accedere al menu Strumenti, fare clic su Opzioni, quindi su Modifica e Continua in Debug). Questa funzione non funziona in Web Site.ASP.NET MVCIf che si desidera sviluppare applicazioni Web utilizzando

ASP.NET MVC (Model View Controller) l'opzione migliore e predefinita è l'applicazione Web. Sebbene sia possibile utilizzare MVC nel sito Web, non è consigliato.

Riepilogo: la differenza più importante tra l'applicazione Web ASP.NET e il sito Web è la compilazione. Quindi se lavori su un progetto più grande in cui poche persone possono modificarlo è meglio usare il sito web. Ma se stai facendo un progetto più piccolo puoi usare anche l'applicazione web.




Una delle differenze principali è che i siti Web vengono compilati in modo dinamico e creano assembly in tempo reale. Le applicazioni Web vengono compilate in un unico grande assieme.

La distinzione tra i due è stata eliminata in Visual Studio 2008.




Sì, l'applicazione web è molto meglio dei siti Web, perché le applicazioni Web ci danno la libertà:

  1. Per avere più progetti sotto un unico ombrello e stabilire le dipendenze del progetto tra. Ad esempio per PCS possiamo avere seguito all'interno dell'applicazione web-

    • Portali Web
    • Controller di notifica (per l'invio di e-mail)
    • Livello aziendale
    • Livello di accesso ai dati
    • Gestore delle eccezioni
    • Utilità del server
    • Servizi WCF (comuni per tutte le piattaforme)
    • Elemento dell'elenco
  2. Per eseguire unit test sul codice che si trova nei file di classe associati alle pagine ASP.NET

  3. Per fare riferimento alle classi quelle sono associate a pagine e controlli utente da classi indipendenti
  4. Per creare un singolo assieme per l'intero sito
  5. Controlla il nome dell'assembly e il numero di versione che viene generato per il sito
  6. Per evitare di inserire il codice sorgente su un server di produzione. (È possibile evitare l'implementazione del codice sorgente sul server IIS. In alcuni scenari, come gli ambienti di hosting condiviso, si potrebbe essere preoccupati per l'accesso non autorizzato al codice sorgente sul server IIS. (Per un progetto di sito Web, è possibile evitare questo rischio pre-compilazione su un computer di sviluppo e distribuzione degli assembly generati anziché del codice sorgente, ma in tal caso si perdono alcuni dei vantaggi degli aggiornamenti del sito semplificati.)
  7. Problema di prestazioni con il sito Web (la prima richiesta al sito Web potrebbe richiedere la compilazione del sito, che può comportare un ritardo. E se il sito Web è in esecuzione su un server IIS con memoria insufficiente, incluso l'intero sito in il singolo assemblaggio potrebbe utilizzare più memoria di quella richiesta per più assiemi).



Le applicazioni vengono generalmente compilate prima della distribuzione, in quanto il sito Web utilizza la directory app_code. Quando qualcosa cambia nella cartella del codice dell'app, il server ricompilerà il codice. Ciò significa che è possibile aggiungere / modificare codice con un sito Web al volo.

Il vantaggio di un'app è che non vi è alcuna ricompilazione e quindi i tempi iniziali di avvio saranno più veloci.




Ti consiglio di guardare i progetti di applicazioni Web sul Web e i progetti di distribuzione sul sito Web ASP.NET che spiegano la differenza in modo molto dettagliato, mi è stato di grande aiuto.

A proposito, non confondere il titolo, gran parte del video spiega la differenza tra progetti di siti web e progetti di applicazioni web e perché Microsoft ha reintrodotto progetti di applicazioni Web in Visual Studio 2005 (come probabilmente già sai, originariamente spedito con solo progetti di siti Web, quindi sono stati aggiunti progetti di applicazioni Web in SP1). Un ottimo video che consiglio vivamente a chiunque voglia conoscere la differenza.




Un "sito web" ha il suo codice in una directory App_Code speciale ed è compilato in diverse DLL (assembly) in fase di esecuzione. Una "web application" è precompilata in una singola DLL.




Sito Web e progetto >> sito Web sono due diversi metodi di creazione dell'applicazione ASP.NET utilizzando Visual Studio. Uno è senza progetto e un altro è l'ambiente di progetto. Le differenze sono come

  1. Il file della soluzione è memorizzato nella stessa directory della directory principale nell'ambiente del progetto.
  2. È necessario rimuovere la soluzione e i file di progetto prima della distribuzione nell'ambiente del progetto.
  3. La directory radice completa viene distribuita in ambiente senza progetto.

non c'è molta differenza fondamentale nell'usare entrambi gli approcci. Ma se stai creando un sito web che richiederà più tempo, opta per l'ambiente del progetto.




Modello di progetto di applicazione Web

  • Fornisce la stessa semantica del progetto Web come progetti Web di Visual Studio .NET. Ha un file di progetto (struttura basata su file di progetto). Modello di costruzione: tutto il codice nel progetto viene compilato in un unico assieme. Supporta IIS e il server di sviluppo ASP.NET integrato. Supporta tutte le funzionalità di Visual Studio 2005 (refactoring, generics, ecc.) E di ASP.NET (pagine master, membership e login, navigazione del sito, temi, ecc.). L'utilizzo delle estensioni del server di FrontPage (FPSE) non è più un requisito.

Modello di progetto del sito Web

  • Nessun file di progetto (basato sul file system).
  • Nuovo modello di compilazione.
  • Compilazione dinamica e lavoro su pagine senza creare l'intero sito su ogni visualizzazione di pagina.
  • Supporta IIS e il server di sviluppo ASP.NET integrato.
  • Ogni pagina ha il proprio assembly.
  • Modello di codice Defferent.



Dipende sempre dalle esigenze del tuo cliente. ASP.NET include solo funzionalità flessibili di cui l'utente ha bisogno per la sicurezza e la facile manutenzione dell'applicazione.

È possibile pensare a un'applicazione Web come un file binario eseguito all'interno del framework ASP.NET. E i siti Web come una pagina Web statica che è possibile esaminare e distribuire facilmente il codice sorgente in.

Ma il vantaggio e gli svantaggi di queste due tecnologie ASP.NET sono ciò che è buono.




Nei progetti di applicazioni Web, Visual Studio necessita di ulteriori file .designer per pagine e controlli utente. I progetti di siti Web non richiedono questo sovraccarico. Il markup stesso è interpretato come il design.




WebSite: genera automaticamente la cartella app_code e se la pubblichi sul server e successivamente se fai qualche modifica in un particolare file o pagina che non devi compilare tutti i file.

Applicazione Web Genera automaticamente il file di soluzioni che il sito Web non genera e se si cambia in un file di quello che si ha per compilare un progetto completo per riflettere le sue modifiche.




Le applicazioni Web richiedono più memoria, presumibilmente perché non hai altra scelta che compilare un singolo assembly. Ho appena convertito un sito legacy di grandi dimensioni in un'applicazione web e ho problemi con l'esaurimento della memoria, sia in fase di compilazione con

Unexpected error writing metadata to file '' -- 
Not enough storage is available to complete this operation. 

errore e in fase di esecuzione con questo errore:

Exception information: 
    Exception type: HttpException 
    Exception message: Exception of type 'System.OutOfMemoryException' was thrown.
   at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()

Il mio consiglio per la conversione di siti più grandi su hardware legacy con vincoli di memoria è quello di consentire a te stesso la possibilità di tornare al modello del sito web. Anche dopo un iniziale successo, i problemi potrebbero insinuarsi più tardi.




In un'applicazione Web è possibile creare i livelli delle funzionalità del progetto e creare interdipendenze tra di loro dividendolo in molti progetti, ma non è mai possibile farlo su un sito Web.




Sicuramente un'applicazione web, un singolo file DLL e di facile manutenzione. Ma un sito web è più flessibile; puoi modificare il file aspx mentre sei in movimento.




Qui Web Supportive Application è un esempio di sito Web. Il sito Web e l'applicazione Web possono essere sia dinamici che statici in base ai requisiti, ecco un esempio per comprendere il funzionamento del sito Web e dell'applicazione Web.




Siti Web: non verrà creato alcun file di soluzione. Se vogliamo creare siti web non è necessario lo studio visivo.

Applicazione Web: verrà creato un file di soluzione. Se vogliamo creare un'applicazione web dovrebbe essere necessario lo studio visivo. Creerà un singolo file .dll nella cartella bin.