ASP.net – partager des fichiers (pages, UserControl) entre plusieurs site web – ajouter un fichier lié (Add As Link)
Dans certains cas, il est interessant de partager des fichiers entre plusieurs sites web : des pages web (.aspx), des UserControls (.ascx), etc …
Si l’on utilise un projet de type WebApplication et non un site web, il est possible d’ajouter un fichier lié. Pour cela, dans le solution explorer, lorsque vous faites un “Add existing item”
Vous pouvez sélectionner des fichiers d’un autre emplacement. Afin d’éviter que Visual Studio copie le fichier, vous pouvez l’ajouter en tant que fichier lié (Add As Link):
Ainsi, votre solution contiendra bien une référence vers un fichier externe. Visual Studio nous affiche le fichier via l’icone “raccourci” dans l’explorateur de solution.

A l’utilisation cela ne fait aucune différence, il n’y aucun soucis pour éditer le fichier, compiler/publier le site web, ou réaliser des check-in (il faut que le fichier partagé fasse partie du workspace TFS).
Si vous utilisez un site web, on ne peut pas utiliser un fichier lié, en effet ceux ci nécessitent un fichier .csproj (ou .vbproj). En fonction des besoins, vous pouvez utilisez ces 3 astuces
- Si vous utilisez IIS, vous pouvez utiliser un répertoire virtuel
- Si vous n’avez pas besoin des fichiers pour le développement et que vous utilisez Team Build pour faire vos déploiements, vous pouvez utiliser une tache qui copiera les fichiers dans votre site web.
- (non testé) Le système de fichier NTFS permet de faire des liens symboliques, il est donc possible de simuler le comportement des fichiers liés directement au niveau NTFS. Je n’ai pas testé cette solution, si l’un d’entre vous test, je suis curieux d’avoir son feedback, notamment au niveau de l’interaction avec TFS.
==> How to create a symbolic link
==> junction utility (sysinternals)
Bien sur ces solutions ne sont pas aussi efficaces et simple que les fichiers liés.
Et vous ? Comment faites vous pour partager des fichiers entre 2 sites/applications web ?