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