Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

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”

image

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):

imageAinsi, 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.

image

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 ?

Posted: mercredi 30 septembre 2009 14:27 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

seb.49 a dit :

Bonjour

Je lis : "Dans certains cas, il est interessant de partager des fichiers entre plusieurs sites web : ... des UserControls (.ascx), ..."

Dans ce cas il faut mieux faire un Custom Ccontrol. Non ?

# septembre 30, 2009 14:55

emmanuel.roulle a dit :

Pour ma part, j'avais mis en place un système assez complexe qui permettait de charger un ascx placé en ressource dans une dll référencée...

# septembre 30, 2009 15:39

VANNESTE Xavier a dit :

Merci de m'avoir rappeler cette astuce :) par contre je me demande si cela fonctionne avec un controle de code source car cela fait partie d'une problématique que j'ai. Je testerais et te le dirais :)

# septembre 30, 2009 15:47

cyril a dit :

@seb.49 : oui, en théorie les Custom Control permettent ceci. Mais en pratique si ton UserControl contient plusieurs centaines de lignes, ca devient super galère de le faire via un CustomControl.

@Xavier : tu parles des junctions ? y'a moyen que ca fonctionne avec TFS, faudra juste refaire le lien après la premiere récuperation du fichier. Coté TFS, je pense qu'il verra 2 fichiers différents !

Pour le "Add As Link", je suis sur que ca fonctionne tant que le fichier ajouté fait partie du workspace (OK, j'ai pas testé).

# septembre 30, 2009 16:21

lutecefalco a dit :

Et tu retrouves bien ton fichier lié lors de la compile?

Parce que par défaut, les fichiers liés ne sont pas copiés lors du build. Il faut modifier les targets présentes dans Microsoft.WebApplication.targets pour ça

# octobre 1, 2009 15:40

lutecefalco a dit :

edit: c'est le .csproj qu'il faut modifier en ajoutant une target customisée ^^

# octobre 1, 2009 15:46

cyril a dit :

@lutecefalco : Je viens de retester. Non, il n'y a aucune modification à faire. Du moment que le build Action est "Compile" (par défaut pour un fichier .cs), le fichier lié sera bien compilé. D'ailleurs, si le fichier n'était pas compilé je vois pas l'interet de cette feature.

# octobre 4, 2009 01:58

lutecefalco a dit :

Je viens de tester à nouveau chez moi.

En buildant ma web app, je retrouve pas mes fichiers liés. En faisant un Publish, je les ai.

Je testerai au boulot voir ce que ça donne avec TFS

# octobre 5, 2009 22:18

Nathaniel a dit :

Dans l'exemple que vous montrez cela semble fonctionner pour les user controls. J'ai testé, et il est effectivement possible de linker un user control. Par contre à l'exécution (debug) ça ne fonctionne clairement pas. En effet, le control n'est pas copié localement et une telle ligne de code ne fonctionnera pas:

<%@ Register Src="~/UserControls/WebLibrary.About.ascx" TagPrefix="Controls" TagName="About" %>

Le fichier ne sera pas trouvé.

ce lien semble confirmer que ce n'est pas possible: http://connect.microsoft.com/VisualStudio/feedback/details/622284/add-as-link-not-working-when-debugging

Ma question est donc, comment avez-vous fait? :-)

# juin 8, 2012 17:29

cyril a dit :

Ce post est assez vieux, je ne me souviens plus exactement pourquoi j'en avais eu besoin.

De mémoire, j'avais un projet principal ou je développais / débuggais mes différents fichiers (ascx, aspx, & co) puis, j'avais plusieurs projets satelites qui utilisaient ces fichiers : je ne debuggais pas ces fichiers depuis les projets satellites.

Une solution pour pouvoir debugger serait de modifier le csproj pour que le .ascx soit physiquement copié dans le bon dossier lors du build : depuis Visual Studio, on édite le fichier mutualisé, lors du build, on copie le .ascx, ce qui reste assez transparent.

Une autre solution plus propre qui est désormais possible serait d'utiliser un package nuget. Certe le rafraichissement serait pas automatique mais il suffirait de lancer la commande de mise à jour depuis la console nuget ou de forcer la mise à jour du package à chaque build en modifiant le csproj.

# juin 8, 2012 18:07
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01

- SharePoint Online: Script PowerShell pour supprimer une colonne dans tous les sites d’une collection par Blog Technique de Romelard Fabrice le 11-27-2018, 18:01