Dossiers de code partagé dans des sites Web ASP.NET

Mise à jour : novembre 2007

Si votre application Web contient du code que vous souhaitez partager entre des pages, vous pouvez conserver le code dans l'un des deux dossiers spéciaux sous la racine de votre application Web : le dossier Bin et le dossier App_Code. Lorsque vous créez ces dossiers et y stockez des types de fichiers particuliers, ASP.NET gère les fichiers de manière spéciale.

Dossier Bin

Vous pouvez stocker des assemblys compilés dans le dossier Bin, et tout autre code présent n'importe où dans l'application Web (par exemple, le code de pages) les référence automatiquement. Le code compilé pour une classe personnalisée est un exemple classique. Vous pouvez copier l'assembly compilé dans le dossier Bin de votre application Web pour que la classe soit disponible à toutes les pages.

Les assemblys contenus dans le dossier Bin ne doivent pas être enregistrés. La présence d'un fichier .DLL dans le dossier Bin suffit pour que l'ASP.NET les reconnaisse. Si vous modifiez le fichier .dll et que vous écrivez sa nouvelle version dans le dossier Bin, ASP.NET détecte la mise à jour et utilise cette nouvelle version pour les nouvelles demandes de page formulées à partir de cet instant.

Sécurité du dossier Bin

Le stockage des assemblys compilés dans le dossier Bin peut poser un problème de sécurité. Si vous avez écrit vous-même le code et que vous l'avez compilé, vous connaissez donc son rôle. Cependant, vous devez traiter le code compilé dans le dossier Bin comme vous traiteriez un code exécutable. Utilisez-le avec précaution tant que vous ne l'avez pas testé et que vous n'avez pas compris son rôle.

Tenez compte des aspects de sécurité ci-après dans le stockage du code compilé dans le dossier Bin :

  • Les assemblys contenus dans le dossier Bin ont comme portée l'application actuelle. Par conséquent, ils ne peuvent pas accéder aux ressources ou appeler le code en dehors de l'application Web actuelle.

  • Au moment de l'exécution, les niveaux d'accès d'un assembly sont définis par le niveau de confiance spécifié sur l'ordinateur local. Pour plus d'informations, consultez Fichiers de stratégie et niveaux de confiance ASP.NET.

  • Si vous utilisez un concepteur tel que Visual Studio, le code du dossier Bin s'exécute dans un contexte différent par rapport au moment de l'exécution. Par exemple, le code peut s'exécuter avec une confiance totale.

Dossier App_Code

Vous pouvez stocker le code source dans le dossier App_Code pour qu'il soit compilé automatiquement au moment de l'exécution. L'assembly résultant est accessible à tout autre code de l'application Web. Par conséquent, le dossier App_Code fonctionne sensiblement comme le dossier Bin, sauf que vous pouvez y stocker le code source contrairement au code compilé. Le dossier App_Code et son état spécial dans une application Web ASP.NET permettent de créer des classes personnalisées et d'autres fichiers de code source uniquement et de les utiliser dans votre application Web sans qu'il soit nécessaire de les compiler indépendamment.

Le dossier App_Code peut contenir des fichiers de code source écrits en tant que fichiers de classe traditionnels, c'est-à-dire des fichiers dont l'extension est .vb, .cs etc. Toutefois, il peut également contenir des fichiers qui ne figurent pas explicitement dans un langage de programmation spécifique. Parmi les exemples, figurent les fichiers .wsdl (langage de description de service Web) et les fichiers de schéma XML (.xsd). ASP.NET peut compiler ces fichiers dans des assemblys.

Le dossier App_Code peut contenir autant de fichiers et de sous-dossiers que nécessaire. Vous pouvez organiser votre code source de la manière qui vous convient, et ASP.NET compile toujours tout le code dans un assembly unique qui est accessible à tout autre code présent n'importe où dans l'application Web.

Remarque :

Les contrôles utilisateur ne sont pas autorisés dans le dossier App_Code. Cela inclut à la fois les contrôles utilisateur à fichier unique et ceux qui utilisent le modèle code-behind. Le fait de placer un contrôle utilisateur dans le répertoire App_Code entraîne la compilation de son code hors de sa séquence requise et n'est par conséquent pas autorisé. Notez que les contrôles utilisateur n'ont pas besoin d'être dans le dossier App_Code ; ils sont déjà disponibles pour les pages n'importe où dans l'application.

Inférence du langage de programmation du dossier App_Code

Le dossier App_Code n'est pas marqué explicitement comme contenant des fichiers écrits dans un langage de programmation spécifique. En revanche, ASP.NET infère le compilateur à appeler pour le dossier App_Code en fonction des fichiers qu'il contient. Si le dossier App_Code contient des fichiers .vb, ASP.NET utilise le compilateur Visual Basic ; s'il contient des fichiers .cs, ASP.NET utilise le compilateur C#, etc.

Si le dossier App_Code contient uniquement des fichiers dont le langage de programmation est ambigu, par exemple un fichier .wsdl, ASP.NET utilise le compilateur par défaut pour les applications Web, comme il est établi dans l'élément compilation de l'application Web ou du fichier de configuration machine.

Langages de programmation multiples dans le dossier App_Code

Étant donné que le code source du dossier App_Code est compilé dans un assembly unique, tous les fichiers contenus dans le dossier App_Code doivent être écrits dans le même langage de programmation. Par exemple, le dossier App_Code ne peut pas contenir de code source en Visual Basic et C#.

Toutefois, vous pouvez configurer votre application Web pour traiter les sous-dossiers du dossier App_Code comme des unités compilables distinctes. Chaque dossier peut contenir le code source dans un autre langage de programmation. La configuration est spécifiée en créant un élément codeSubDirectories dans l'élément compilation du fichier Web.config et en ajoutant une référence au sous-dossier. L'exemple suivant explique comment configurer les sous-dossiers nommés VBCode et CSCode pour les compiler dans des assemblys distincts :

<compilation debug="false">
    <codeSubDirectories>
        <add directoryName="VBCode" />
        <add directoryName="CSCode" />
    </codeSubDirectories>
</compilation>

Les références aux sous-dossiers VBCode et CSCode n'ont pas à contenir d'informations sur le langage de programmation contenu dans le sous-dossier. Comme pour le dossier App_Code lui-même, ASP.NET infère le compilateur à utiliser en fonction des fichiers du sous-dossier.

Sécurité du dossier App_Code

Les problèmes de sécurité liés au code du dossier App_Code sont sensiblement identiques à ceux du code du dossier Bin : le code est compilé dans un assembly au moment de l'exécution. Un facteur atténuant est que vous pouvez lire le code source des fichiers du dossier App_Code. Toutefois, si vous ne comprenez pas pleinement le code, celui-ci peut poser un problème de sécurité. Par conséquent, traitez le code source du dossier App_Code comme vous traiteriez le code compilé de la même source.

Voir aussi

Concepts

Disposition des sites Web ASP.NET