Site Web ASP.NET ou Application Web ASP.NET?


Answers

Le site Web est ce que vous déployez sur un serveur Web ASP.NET tel que IIS. Juste un tas de fichiers et de dossiers. Il n'y a rien dans un site Web qui vous lie à Visual Studio (il n'y a pas de fichier de projet). La génération de code et la compilation de pages Web (telles que .aspx, .ascx, .master) sont effectuées dynamiquement au moment de l'exécution , et les modifications apportées à ces fichiers sont détectées par le framework et automatiquement recompilées. Vous pouvez placer le code que vous souhaitez partager entre les pages dans le dossier spécial App_Code ou vous pouvez le pré-compiler et placer l'assembly dans le dossier Bin.

Application Web est un projet Visual Studio spécial. La principale différence avec les sites Web est que lorsque vous générez le projet, tous les fichiers de code sont compilés dans un seul assembly, qui est placé dans le répertoire bin. Vous ne déployez pas de fichiers de code sur le serveur Web. Au lieu d'avoir un dossier spécial pour les fichiers de code partagés, vous pouvez les placer n'importe où, comme vous le feriez dans la bibliothèque de classes. Étant donné que les applications Web contiennent des fichiers qui ne sont pas destinés à être déployés, tels que les fichiers de projet et de code, il existe une commande Publier dans Visual Studio pour générer un site Web à un emplacement spécifié.

App_Code vs Bin

Le déploiement de fichiers de code partagé est généralement une mauvaise idée, mais cela ne signifie pas que vous devez choisir Application Web. Vous pouvez avoir un site Web qui référence un projet de bibliothèque de classes qui contient tout le code pour le site Web. Les applications Web sont simplement un moyen pratique de le faire.

CodeBehind

Cette rubrique est spécifique aux fichiers .aspx et .ascx. Cette rubrique est de plus en plus pertinente dans les nouveaux cadres d'application tels que ASP.NET MVC et les pages Web ASP.NET qui n'utilisent pas les fichiers codebehind.

En compilant tous les fichiers de code en un seul assemblage, y compris les fichiers codebehind des pages .aspx et des contrôles .ascx, dans les applications Web, vous devez recréer chaque petite modification et vous ne pouvez pas effectuer de modifications en direct. Cela peut être très pénible pendant le développement, car vous devez continuer à reconstruire pour voir les changements, tandis qu'avec les sites Web, les modifications sont détectées par le moteur d'exécution et les pages / contrôles sont automatiquement recompilés.

Le fait que le runtime gère les assemblages codebehind est moins de travail pour vous, car vous n'avez pas besoin de vous soucier de donner des noms uniques aux pages / contrôles, ou de les organiser dans des espaces de noms différents.

Je ne dis pas que le déploiement de fichiers de code est toujours une bonne idée (spécialement dans le cas de fichiers de code partagés), mais les fichiers codebehind ne doivent contenir que du code qui exécute des tâches spécifiques, des gestionnaires d'événements, etc. en couches afin que le code important finisse toujours dans le dossier Bin. Si tel est le cas, le déploiement de fichiers codebehind ne devrait pas être considéré comme dangereux.

Une autre limitation des applications Web est que vous ne pouvez utiliser que la langue du projet. Dans les sites Web, vous pouvez avoir quelques pages en C #, certaines en VB, etc. Pas besoin de support Visual Studio spécial. C'est la beauté de l'extensibilité du fournisseur de build.

En outre, dans les applications Web, la détection des erreurs ne se fait pas dans les pages / contrôles, car le compilateur compile uniquement vos classes codebehind et non le code de balisage (dans MVC, vous pouvez le corriger à l'aide de l'option MvcBuildViews).

Visual Studio

Étant donné que les applications Web sont des projets Visual Studio, certaines fonctionnalités ne sont pas disponibles sur les sites Web. Par exemple, vous pouvez utiliser des événements de construction pour effectuer une variété de tâches, par exemple réduire et / ou combiner des fichiers Javascript.

Une autre fonctionnalité intéressante introduite dans Visual Studio 2010 est la transformation Web.config . Ceci n'est pas non plus disponible sur les sites Web. Travaille maintenant avec les sites Web dans VS 2013.

Construire une application Web est plus rapide que la construction d'un site Web, spécialement pour les grands sites. Ceci est principalement dû au fait que les applications Web ne compilent pas le code de balisage. Dans MVC si vous définissez MvcBuildViews à true, il compile le code de balisage et vous obtenez la détection d'erreur, ce qui est très utile. L'inconvénient est que chaque fois que vous construisez la solution, il construit le site complet, ce qui peut être lent et inefficace, surtout si vous ne modifiez pas le site. Je me retrouve à activer et désactiver MvcBuildViews (ce qui nécessite un déchargement de projet). D'un autre côté, avec les sites Web, vous pouvez choisir si vous voulez construire le site dans le cadre de la solution ou non. Si vous choisissez de ne pas le faire, la création de la solution est très rapide et vous pouvez toujours cliquer sur le nœud Site Web et sélectionner Générer, si vous avez apporté des modifications.

Dans un projet Application Web MVC, vous disposez de commandes et de boîtes de dialogue supplémentaires pour les tâches courantes, telles que "Ajouter une vue", "Aller à la vue", "Ajouter un contrôleur", etc. Ces sites ne sont pas disponibles sur un site Web MVC.

Si vous utilisez IIS Express comme serveur de développement, vous pouvez ajouter des répertoires virtuels dans les sites Web. Cette option n'est pas disponible dans les applications Web.

NuGet Package Restore ne fonctionne pas sur les sites Web, vous devez installer manuellement les paquets listés sur packages.config La restauration de package fonctionne maintenant avec les sites Web à partir de NuGet 2.7

Question

Lorsque je démarre un nouveau projet ASP.NET dans Visual Studio, je peux créer une application Web ASP.NET ou je peux créer un site Web ASP.NET.

Quelle est la différence entre une application Web ASP.NET et un site Web ASP.NET? Pourquoi devrais-je choisir un sur l'autre?

La réponse est-elle différente selon la version de Visual Studio que j'utilise?




Cela dépend de ce que vous développez.

Un site Web axé sur le contenu aura son contenu change fréquemment et un site Web est meilleur pour cela.

Une application a tendance à stocker ses données dans une base de données et ses pages et codes changent rarement. Dans ce cas, il est préférable d'avoir une application Web où le déploiement des assemblages est beaucoup plus contrôlé et qui supporte mieux les tests unitaires.




Modèle de projet d'application Web

  • Fournit la même sémantique de projet Web que les projets Web Visual Studio .NET. A un fichier de projet (structure basée sur des fichiers de projet). Construire le modèle - tout le code du projet est compilé en un seul assemblage. Prend en charge IIS et le serveur de développement ASP.NET intégré. Prend en charge toutes les fonctionnalités de Visual Studio 2005 (refactoring, génériques, etc.) et d'ASP.NET (pages maîtres, membres et login, navigation sur le site, thèmes, etc.). L'utilisation des extensions serveur FrontPage (FPSE) n'est plus une exigence.

Modèle de projet de site Web

  • Aucun fichier de projet (Basé sur le système de fichiers).
  • Nouveau modèle de compilation.
  • Compilation dynamique et travail sur des pages sans construire le site entier sur chaque page vue.
  • Prend en charge IIS et le serveur de développement ASP.NET intégré.
  • Chaque page a son propre assemblage.
  • Modèle de code Defferent.



Définitivement application web, fichier DLL unique et facile à entretenir. Mais un site web est plus flexible; vous pouvez éditer le fichier aspx en déplacement.




Les applications Web nécessitent plus de mémoire, probablement parce que vous n'avez pas d'autre choix que de compiler en un seul assemblage. Je viens de convertir un grand site existant en une application web et j'ai des problèmes avec le manque de mémoire, à la fois lors de la compilation avec le

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

erreur et à l'exécution avec cette erreur:

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

Ma recommandation pour la conversion de sites plus importants sur du matériel hérité à mémoire limitée est de vous autoriser à revenir au modèle de site Web. Même après un succès initial, des problèmes peuvent surgir plus tard.




L'une des principales différences est que les sites Web se compilent dynamiquement et créent des assemblages à la volée. Les applications Web se compilent en un grand assemblage.

La distinction entre les deux a été supprimée dans Visual Studio 2008.




Sites Web - Aucun fichier de solution ne sera créé. Si nous voulons créer des sites Web pas besoin de studio visuel.

Application Web - Un fichier de solution sera créé. Si nous voulons créer une application web devrait avoir besoin du studio visuel. Il créera un seul fichier .dll dans le dossier bin.




Dans les projets d'application Web, Visual Studio a besoin de fichiers .designer supplémentaires pour les pages et les contrôles utilisateur. Les projets de site Web ne nécessitent pas cette surcharge. Le balisage lui-même est interprété comme le design.




Les applications sont généralement compilées avant le déploiement où le site utilise le répertoire app_code. Lorsque quelque chose change dans le dossier du code de l'application, le serveur recompile le code. Cela signifie que vous pouvez ajouter / modifier du code avec un site Web à la volée.

L'avantage d'une application est qu'il n'y a pas de recompilation et que les temps de démarrage initiaux seront donc plus rapides.




Un "site web" a son code dans un répertoire spécial App_Code et il est compilé en plusieurs DLL (assemblys) à l'exécution. Une "application web" est précompilée en une seule DLL.




À moins que vous n'ayez un besoin spécifique pour un projet compilé dynamiquement, n'utilisez pas un projet de site Web .

Pourquoi? Parce que le projet de site Web vous conduira vers le haut du mur en essayant de changer ou de comprendre votre projet. Les fonctionnalités de recherche de typage statique (par exemple, find uses, refactor) dans Visual Studio prennent toutes une éternité sur tout projet de taille raisonnable. Pour plus d'informations, consultez la question de dépassement de pile lente «Rechercher toutes les références» dans Visual Studio .

Je ne vois vraiment pas pourquoi ils ont abandonné des applications Web dans Visual Studio 2005 pour le type de projet de site Web de carbuncle induisant la douleur, la santé mentale et la productivité.




Cela peut sembler un peu évident, mais je pense que c'est quelque chose qui est mal compris parce que Visual Studio 2005 est seulement livré avec le site Web à l'origine. Si votre projet porte sur un site Web assez limité et qui ne comporte pas beaucoup de séparation logique ou physique, le site Web est parfait. Cependant, s'il s'agit vraiment d'une application Web avec différents modules où de nombreux utilisateurs ajoutent et mettent à jour des données, il vaut mieux utiliser l'application Web.

Le plus grand pro du modèle de site Web est que tout ce qui se trouve dans la section app_code est compilé dynamiquement. Vous pouvez effectuer des mises à jour de fichiers C # sans redéploiement complet. Cependant, cela vient à un grand sacrifice. Beaucoup de choses se passent sous des couvertures difficiles à contrôler. Les espaces de noms sont difficiles à contrôler et l'utilisation spécifique de la DLL sort de la fenêtre par défaut pour tout ce qui se trouve sous app_code car tout est compilé dynamiquement.

Le modèle d'application Web n'a pas de compilation dynamique, mais vous prenez le contrôle des choses que j'ai mentionnées.

Si vous faites du développement en n-tier, je recommande fortement le modèle d'application web. Si vous faites un site Web limité ou une mise en œuvre rapide et sale, le modèle de site Web peut avoir des avantages.

Une analyse plus détaillée peut être trouvée dans: