Sito Web ASP.NET o Applicazione Web ASP.NET?


848

Quando avvio un nuovo progetto ASP.NET in Visual Studio, posso creare un'applicazione Web ASP.NET o posso 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 usando?


6
Un confronto completo e più recente (per 4.5) è disponibile qui su MSDN: Progetti di applicazioni Web contro progetti di siti Web in Visual Studio
Gustav,

Risposte:


556

Sito web:

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

Se non viene richiesto a Visual Studio di riutilizzare costantemente gli stessi nomi, verranno sempre creati nuovi nomi per i file DLL generati dalle pagine. Ciò può comportare diverse copie ravvicinate di file DLL contenenti lo stesso nome di classe, che genererà numerosi errori. Il progetto del sito Web è stato introdotto con Visual Studio 2005, ma si è rivelato non essere 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 differenze principali 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 al momento della compilazione. Per aggiornare il progetto, è necessario ricompilarlo e pubblicare il file DLL affinché si verifichino modifiche.

Un'altra caratteristica interessante del progetto Applicazione Web è che è molto più semplice escludere i file dalla vista del progetto. Nel progetto Sito Web, ogni file escluso viene rinominato con una parola chiave esclusa nel nome file. Nel Web Application Project, il progetto tiene traccia di quali file includere / escludere dalla vista del progetto senza rinominarli, rendendo le cose molto più ordinate.

Riferimento

L'articolo ASP.NET 2.0 - Sito Web vs progetto di applicazione Web fornisce anche ragioni sul perché usare l'uno e non l'altro. Ecco un estratto di esso:

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

I progetti di applicazioni Web e i progetti di siti Web (MSDN) spiegano le differenze tra il sito Web e i progetti di applicazioni Web. Inoltre, discute la configurazione da eseguire in Visual Studio.


5
È ancora possibile compilare l'intero sito in una dll con il sito Web basato su file.
dtc

31
Il modo in cui tendo a pensarci. Se stai programmando un'applicazione che utilizza HTML come interfaccia utente, utilizza l'applicazione Web. Se hai un sito web che sembra aver bisogno di un po 'di Asp.net su alcune delle sue pagine, utilizza Sito Web Project.
Ian Ringrose,

35
In realtà, i progetti di applicazioni Web erano esattamente il tipo di progetto ASP.NET originale. Non sono "simili" ai progetti che abbiamo avuto in Visual Studio 2003. Non sono stati creati come componente aggiuntivo. Visual Studio 2005 SP1 ha semplicemente ripristinato ciò che Visual Studio 2005 RTM ha erroneamente rimosso.
John Saunders,

1
È possibile utilizzare l'output di WebApplication in un progetto WebDeployment. Non è possibile utilizzare l'output del sito Web in un progetto WebDeployment. Se si desidera creare un progetto di distribuzione, attenersi a WebApplication. Ma per lo sviluppo, WebSite è più conveniente. Tuttavia, la conversione non è sempre priva di problemi, quindi inizia subito con WebApplication.
Stefan Steiger,

8
@xarzu: i "progetti" del sito Web non hanno file .csproj o .vbproj. In realtà non sono progetti: sono solo cartelle piene di file.
John Saunders,

171

Il sito Web è ciò che si distribuisce su un server Web ASP.NET come IIS. Solo un mucchio di file e cartelle. Non c'è nulla in un sito Web che ti colleghi 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 in modo dinamico in fase di esecuzione 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 cartella App_Code speciale oppure è possibile precompilarlo e inserire l'assembly nella cartella Bin.

L'applicazione Web è uno speciale progetto di Visual Studio. La differenza principale con i siti Web è che quando si crea il progetto tutti i file di codice vengono compilati in un singolo assembly, che viene inserito nella directory bin. Non si distribuiscono 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 sono pensati per essere distribuiti, 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 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 è sempre più rilevante nei nuovi framework di applicazioni come ASP.NET MVC e ASP.NET pagine Web che non utilizzano codebehind file.

Avendo tutti i file di codice compilati in un singolo assembly, inclusi codebehind file di pagine .aspx e controlli .ascx, in Applicazioni Web è necessario ricostruire per 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 i siti Web le modifiche vengono rilevate dal runtime e le pagine / i controlli vengono ricompilati automaticamente.

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

Non sto dicendo che la distribuzione di file di codice sia sempre una buona idea (specialmente non nel caso di file di codice condivisi), ma i file codebehind dovrebbero contenere solo codice che esegua attività specifiche dell'interfaccia utente, gestori di eventi wire-up, ecc. L'applicazione dovrebbe essere stratificato in modo che il codice importante finisca sempre nella cartella Bin. In tal caso, la distribuzione di 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 un supporto speciale per Visual Studio. Questa è la bellezza dell'estensibilità del provider di build.

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

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 varietà di attività, ad esempio minimizzare e / o combinare file Javascript.

Un'altra caratteristica interessante 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ù rapida della creazione di un sito Web, specialmente per siti di grandi dimensioni. Ciò è dovuto principalmente al fatto che le applicazioni Web non compilano il codice di markup. In MVC se si imposta MvcBuildViews su true, 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 crea il sito completo, che può essere lento e inefficiente, specialmente se non si sta modificando il sito. Mi ritrovo ad attivare e disattivare MvcBuildViews (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 o meno. Se scegli di non farlo, la creazione della soluzione è molto veloce e puoi sempre fare clic sul nodo Sito Web e selezionare Crea, se hai apportato modifiche.

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

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

NuGet Package Restore non funziona sui siti Web, è necessario installare manualmente i pacchetti elencati su packages.configIl ripristino del pacchetto ora funziona con i siti Web che iniziano NuGet 2.7


43
Poiché i programmatori scrivono l'applicazione, l'applicazione viene quindi creata. Il team di test verifica l'applicazione sul sistema di test. Quindi il cliente installa le applicazioni. Che ULTIMO pensi di volere è chiunque apporti cambiamenti dal vivo!
Ian Ringrose,

12
Per me avere la scelta è la migliore, sui siti Web puoi sempre ereditare da una classe di base precompilata se vuoi. Esistono molti linguaggi / framework (ad esempio PHP) in cui le persone sono abituate all'idea di distribuire il codice sorgente. Ciò non significa che quelle non siano applicazioni "serie".
Max Toro,

6
"In realtà, non gestisci quelle DLL, [...] non devi nemmeno sapere che esistono. Non è un problema." - Fino a quando il framework non viene confuso, non pulisce correttamente le vecchie versioni e inizia a generare eccezioni di compilazione con nomi in conflitto in tutto il sito ... È possibile aggiungere il rilevamento degli errori del markup mediante l'uso di un progetto WebDeployment. Inoltre, non sono sicuro sul tuo ultimo punto "con i siti web puoi usare IIS come server", puoi farlo anche con un'applicazione Web - e ho progetti come questo in cui il progetto fa parte di un'applicazione Web più grande.
Zhaph - Ben Duguid,

3
La distribuzione di un sito Web non deve sempre essere su un server live. Le iterazioni di sviluppo, in un mondo perfetto, dovrebbero essere testate su uno specchio dell'ambiente live. Con l'incapacità delle app Web di apportare rapide modifiche al codice in un sito in esecuzione su un server IIS di sviluppo (ovvero non in esecuzione utilizzando l'istanza VS locale), è molto difficile testare soluzioni rapide di piccole dimensioni. Ciò accade sempre nei sistemi in cui non è possibile replicare le stesse condizioni sul computer locale.
NikoRoberts,

4
"Questo può essere un vero dolore durante lo sviluppo, dal momento che devi continuare a ricostruire per vedere i cambiamenti" ... tieni presente che dovrebbe essere un progetto MASSIVO o un computer DAVVERO VECCHIO per essere un dolore da fare una ricostruzione in questi giorni.
Darren

75

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

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

I siti Web possono essere elaborati utilizzando qualsiasi strumento HTML senza la necessità di avere Developer Studio, poiché i file di progetto non devono essere aggiornati, ecc. Le applicazioni Web sono le migliori quando il team utilizza principalmente Developer Studio 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).

Attenzione: ho scritto questa risposta molti anni fa e da allora non utilizzo Asp.net. Mi aspetto che le cose siano andate avanti.


40

A meno che tu non abbia un'esigenza specifica per un progetto compilato dinamicamente, non utilizzare un progetto di sito web .

Perché? Perché il progetto del sito web ti farà salire sul muro quando provi a cambiare o capire il tuo progetto. Le funzionalità di tipizzazione statica find (ad es. Trova usi, refactor) in Visual Studio impiegheranno per sempre qualsiasi progetto di dimensioni ragionevoli. Per ulteriori informazioni, vedere la domanda StackTranslate.it "Trova tutti i riferimenti" lenta in Visual Studio .

Non riesco davvero a capire perché hanno abbandonato le applicazioni Web in Visual Studio 2005 per il tipo di progetto di sito Web che induce dolore, svuotamento della sanità e produttività.


30

C'è un articolo in MSDN che descrive le differenze:

Confronto tra progetti di siti Web e progetti di applicazioni Web

A proposito: ci sono alcune domande simili su questo argomento, ad esempio:


Immagino che la risposta su dovrei usare codefile o codebehind nel markup sia andata con la risposta che è stata cancellata da SO ...
frenchone

Quindi per quelli che si chiedono: applicazione web = soluzione ben strutturata = codebehind nel markup VS sito web = mazzo di file = codefile nel markup
frenchone

22

Questo può sembrare un po 'ovvio, ma penso che sia qualcosa che è stato frainteso perché Visual Studio 2005 è stato spedito solo con il sito Web in origine. Se il tuo progetto si occupa di un sito Web che è piuttosto limitato e non ha molta separazione logica o fisica, il sito Web va bene. Tuttavia, se si tratta veramente di un'applicazione Web con moduli diversi in cui molti utenti aggiungono e aggiornano i dati, è meglio con l'applicazione Web.

Il più grande pro del modello di sito Web è che tutto nella app_codesezione viene compilato in modo dinamico. È possibile effettuare aggiornamenti di file C # senza una ridistribuzione completa. Tuttavia, questo comporta un grande sacrificio. Molte cose accadono sotto le coperte che sono difficili da controllare. Gli spazi dei nomi sono difficili da controllare e l'utilizzo specifico di DLL esce dalla finestra per impostazione predefinita per qualsiasi cosa in app_codequanto tutto viene compilato dinamicamente.

Il modello di applicazione Web non ha una compilazione dinamica, ma ottieni il controllo delle cose che ho citato.

Se stai eseguendo uno sviluppo di livello n, ti consiglio vivamente il modello di applicazione web. Se si sta eseguendo un sito Web limitato o un'implementazione rapida e sporca, il modello del sito Web potrebbe presentare dei vantaggi.

Analisi più dettagliate sono disponibili in:


3
> Il più grande pro del modello di sito Web è che qualsiasi cosa nella sezione app_code è compilata dinamicamente. Anche questo ha un grande svantaggio. Il mio sito web è ospitato con webhost4life che sono economici ma ricchi di funzionalità. Il rovescio della medaglia è che riciclano il processo di lavoro molto frequentemente (15 minuti?), Il che significa che l'utente successivo ha una prima pagina molto lenta mentre l'applicazione viene ricompilata.
Rob Nicholson,

19

Dall'esame 70-515 del kit di allenamento autonomo MCTS:

Con l'applicazione Web (progetto),

  1. È possibile creare un'applicazione MVC.
  2. Visual Studio memorizza l'elenco dei file in un file di progetto (.csproj o .vbproj), anziché 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, il che impedisce di testare una pagina se non verrà compilata un'altra pagina.
  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.

# 4 è sbagliato. "Modifica e continua" può essere abilitato, con alcune restrizioni. Forse questo era vero nel 2011. # 9 dovrebbe dire "non è possibile modificare singoli file di codice sorgente senza ricompilare". È possibile modificare .aspx, .js, .css, ecc. Senza ricompilare.
John Saunders,

# 4 ha un altro angolo. Se si apre un sito Web utilizzando File> Apri> Sito Web e si accede alla cartella del file system per il sito Web, anziché aprire il sito selezionando la soluzione dalla finestra iniziale, è possibile modificare i moduli di classe e codebehind (almeno in vb.net ) senza interrompere il debug. Non vedrai le modifiche fino alla ricostruzione, tuttavia, è spesso utile poter osservare il comportamento della pagina mentre modifichi il codice. Il rovescio della medaglia è che perdi tutto ciò che va nella soluzione: punti di interruzione, file aperti, segnalibri ecc. E a volte devi eliminare i file sln / sou.
viandante

16

Dipende da cosa stai sviluppando.

Un sito web orientato al contenuto cambierà frequentemente il suo contenuto 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 avere un'applicazione Web in cui la distribuzione degli assiemi è molto più controllata e offre un supporto migliore per i test delle unità.


16

Compilation Innanzitutto 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 ricaricare questo file sul server e tutto funzionerebbe bene. Nell'applicazione Web non puoi farlo perché tutto è pre-compilato e finisci con una sola dll. Quando cambi qualcosa in un file del tuo progetto devi ricompilare di nuovo tutto. Quindi, se si desidera avere la possibilità di modificare alcuni file sul sito Web del server, è la soluzione migliore per te. Inoltre, consente a molti sviluppatori di lavorare su un sito Web. D'altra parte, se non si desidera che il codice sia disponibile sul server, è preferibile scegliere Applicazione Web.

Project structure C'è anche una differenza nella struttura del progetto. Nell'applicazione Web hai un file di progetto proprio come lo avevi nell'applicazione normale. Nel sito Web non esiste un file di progetto tradizionale, è sufficiente un file di soluzione. Tutti i riferimenti e le impostazioni sono memorizzati nel file web.config. @Page directive Esiste 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 vederlo negli esempi seguenti:

Applicazione web:

<%@ 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" %> 

Spazi dei nomi - Nell'esempio sopra puoi vedere anche un'altra differenza: come vengono creati gli spazi dei nomi. Nello spazio dei nomi dell'applicazione Web è semplicemente un nome del progetto. Nel sito Web è presente lo spazio dei nomi predefinito ASP per le pagine compilate dinamicamente.

Modifica e continua - Nell'applicazione Modifica e continua dell'applicazione Web è disponibile (per attivarla devi accedere al menu Strumenti, fare clic su Opzioni, quindi su Modifica e continua in Debug). Questa funzione non funziona nel sito Web.ASP.NET MVCI se si desidera sviluppare applicazioni Web utilizzando

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

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 alcune persone possono modificarlo, è meglio usare il sito Web. Ma se stai facendo un progetto più piccolo puoi usare anche l'applicazione Web.


Su un grande progetto in cui più di una persona lo sta modificando, si utilizza il controllo del codice sorgente, quindi questo non è un motivo per utilizzare i "progetti" del sito Web.
John Saunders,

+1 per la distinzione in codebehind (webapp) vs codefile (sito Web) nella direttiva sulle pagine. Questa è una precisione che manca nella risposta selezionata.
frenchone,

11

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

  1. Avere più progetti sotto un unico ombrello e stabilire dipendenze tra progetti. Ad esempio per PC possiamo avere seguito all'interno dell'applicazione web-

    • Portali Web
    • Notification Controller (per l'invio di e-mail)
    • Livello aziendale
    • Livello di accesso ai dati
    • Manager delle eccezioni
    • Utilità del server
    • Servizi WCF (comuni a tutte le piattaforme)
    • Voce di elenco
  2. Per eseguire unit test su codice contenuto nei file di classe associati alle pagine ASP.NET

  3. Per fare riferimento alle classi, queste sono associate alle pagine e ai controlli utente delle classi autonome
  4. Per creare un singolo assembly per l'intero sito
  5. Controllo sul nome dell'assembly e sul numero di versione che viene generato per il sito
  6. Per evitare di inserire il codice sorgente su un server di produzione. (È possibile evitare di distribuire il codice sorgente sul server IIS. In alcuni scenari, ad esempio 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. Tuttavia, in tal caso si perdono alcuni dei vantaggi di facili aggiornamenti del sito.)
  7. Problema di prestazioni con il sito Web (la prima richiesta al sito Web potrebbe richiedere la compilazione del sito, il che può comportare un ritardo. E se il sito Web è in esecuzione su un server IIS con memoria insufficiente, incluso l'intero sito in un un singolo assembly potrebbe utilizzare più memoria di quella necessaria per più assembly.)

11

Una delle differenze principali è che i siti Web vengono compilati in modo dinamico e creano assembly al volo. Le applicazioni Web vengono compilate in un unico assieme di grandi dimensioni.

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


4
"La distinzione tra i 2 è stata eliminata in vs2008" - non sono sicuro di cosa significhi lì - sono ancora tipi di progetto distinti in VS2008, si comportano diversamente e sono creati attraverso diverse opzioni di menu - tuttavia almeno sono entrambi disponibili per impostazione predefinita in VS2008.
Zhaph - Ben Duguid,

9

Le applicazioni vengono generalmente compilate prima della distribuzione, quando 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 il codice con un sito Web al volo.

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


Questo è parzialmente vero, puoi precompilare le pagine del sito Web se vuoi
Amr H. Abd Elmajeed,

8

Ti consiglio di guardare il video Progetti di applicazioni Web e progetti di distribuzione Web sul sito Web ASP.NET che spiega la differenza nei dettagli, mi è stato di grande aiuto.

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



7

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


5

Sito Web e Progetto >> sito Web sono due diversi metodi per creare un'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 viene archiviato nella stessa directory della directory principale nell'ambiente di progetto.
  2. È necessario rimuovere i file di soluzione e di progetto prima della distribuzione nell'ambiente di progetto.
  3. La directory principale completa viene distribuita in un ambiente senza progetto.

non c'è molta differenza di base nell'uso di entrambi gli approcci. Ma se stai creando un sito Web che richiederà più tempo, scegli l'ambiente di progetto.


1
Il file della soluzione non deve trovarsi nella stessa cartella. Inoltre, il meccanismo di pubblicazione standard rimuove eventuali artefatti che non dovrebbero trovarsi nel sito di destinazione, ad esempio i file codebehind non vengono distribuiti.
John Saunders,

5

Modello di progetto di applicazione Web

  • Fornisce la stessa semantica dei progetti Web dei progetti Web di Visual Studio .NET. Ha un file di progetto (struttura basata su file di progetto). Crea modello: tutto il codice nel progetto viene compilato in un singolo assembly. Supporta sia IIS che il server di sviluppo ASP.NET integrato. Supporta tutte le funzionalità di Visual Studio 2005 (refactoring, generics, ecc.) E di ASP.NET (pagine master, appartenenza e accesso, navigazione del sito, temi, ecc.). L'uso 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 sia IIS che il server di sviluppo ASP.NET integrato.
  • Ogni pagina ha il proprio assembly.
  • Modello di codice dipendente.

5

Dipende sempre dalle esigenze del 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 a un file binario che viene eseguito all'interno del framework ASP.NET. E i siti Web come una pagina Web statica su cui è possibile rivedere e distribuire facilmente il codice sorgente.

Ma il vantaggio e gli svantaggi di queste due tecnologie ASP.NET derivano dal bene.


4

Siti Web: non verrà creato alcun file di soluzione. Se vogliamo creare siti Web non è necessario Visual Studio.

Applicazione Web: verrà creato un file di soluzione. Se vogliamo creare un'applicazione web dovrebbe aver bisogno di Visual Studio. Creerà un singolo .dllfile nella cartella bin.


2
-1 In realtà hai un file di soluzione se crei un progetto di sito Web tramite Visual Studio. Non hai un file di progetto.
Darren

+1 certo, puoi creare un file di soluzione ma questo file è per lo più vuoto quindi è solo un fastidio (VS chiede dove salvare il file all'uscita) e non qualcosa di utile
frenchone

3

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


3

Sito Web: genera automaticamente la cartella app_code e se la pubblichi sul server e successivamente se si apportano modifiche in un determinato file o pagina di quanto non sia necessario compilare tutti i file.

Applicazione Web Genera automaticamente il file di soluzioni quale sito Web non genera e se si modifica in un file di quanto è necessario compilare il progetto completo per riflettere le sue modifiche.


"Compilare il progetto completo" non significa compilare tutti i file nel progetto. I file di codice sorgente che non sono stati modificati non verranno ricompilati.
John Saunders,

3

In un'applicazione Web puoi creare i livelli della funzionalità del tuo progetto e creare interdipendenze tra di loro dividendoli in molti progetti, ma non puoi mai farlo su un sito Web.


3

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


Puoi anche modificare il file aspx in un progetto di applicazione web.
John Saunders,

3

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

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

errore e in fase di esecuzione con questo messaggio di errore come di seguito:

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

La mia raccomandazione per la conversione di siti di grandi dimensioni su hardware legacy con limiti di memoria è quella di scegliere l'opzione per ripristinare il modello del sito Web. Anche dopo un iniziale problema di successo potrebbe insinuarsi più tardi.


Non sembra essere un'eccezione durante la compilazione.
John Saunders,

1

Qui l'applicazione di supporto Web è un esempio di sito Web.

Qui l'applicazione di supporto Web è un esempio di sito Web. Sia il sito Web che l'applicazione Web possono essere dinamici / statici, a seconda dei requisiti, ecco un esempio per comprendere il funzionamento del sito Web e dell'applicazione Web.


Questo non si applica in asp.net. La distinzione tra siti Web e applicazioni Web (nella terminologia di asp.net) è più su come i file sono organizzati (come una soluzione ben organizzata o come un gruppo di file) e compilati ("JIT" vs statico). In entrambi i casi, il "programma" è principalmente lato server.
frenchone,

0

Per riassumere alcune delle risposte sopra:

Flessibilità , puoi apportare modifiche in tempo reale a una pagina web?

Sito Web : possibile. Pro: vantaggi a breve termine. Contro: rischio a lungo termine del caos del progetto.

App Web : Con: impossibile. Modifica una pagina, archivia le modifiche al controllo del codice sorgente, quindi crea e distribuisci l'intero sito. Pro: mantenere un progetto di qualità.

Problemi di sviluppo

Sito Web : semplice struttura del progetto senza un file .csproj. Due pagine aspx possono avere lo stesso nome di classe senza conflitti. Nome di directory del progetto casuale che porta a generare errori come il motivo per cui .net framework è in conflitto con il proprio file generato e perché .net framework è in conflitto con il proprio file generato . Pro: semplice (semplicistico). Contro: erratico.

App Web : struttura del progetto simile al progetto WebForms, con un file .csproj. I nomi delle classi delle pagine asp devono essere univoci. Pro: semplice (intelligente). Contro: nessuno, perché un'app Web è ancora semplice.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.