128 votes

Création de répertoires virtuels dans IIS express

Existe-t-il un moyen de créer un répertoire virtuel dans IIS express ? Je sais que Cassini ne peut pas le faire et ce serait bien de pouvoir le faire sans utiliser une version complète de IIS.

J'ai réussi à faire en sorte que je puisse naviguer vers mon application localement dans IIS express comme ceci :

http://localhost:1132/

Ce que je voudrais faire, c'est créer un répertoire virtuel appelé "OffSiteStuff" et le faire pointer vers un emplacement quelconque sur mon disque C, comme "c : \offsitestuff "puis parcourez les éléments de ce dossier comme suit :

http://localhost:1132/OffSiteStuff/UserUploadedImage.jpg

Je sais que je pourrais faire cela avec un dossier dans mon site et continuer à utiliser IIS Express, ou même le bon vieux Cassini, mais ce dossier stockera les images téléchargées par les utilisateurs et je ne veux vraiment pas que ces images soient mélangées avec les fichiers de l'application.

L'autre solution, plus ambitieuse, consiste à déployer le site sur une instance complète de Server 2008 IIS 7.5 chaque fois que je veux déboguer les fonctions qui utilisent du contenu hors site, mais c'est aussi un peu lourd.

Existe-t-il un moyen de faire cela dans l'application <System.WebServer /> Élément de configuration Web ?

6 votes

Pour Visual Studio 2015, mikedice417.wordpress.com/2015/09/13/… travaillé. Le site applicationHost.config se trouve sous la racine du projet : ${PROJECT}\.vs\config\applicationHost.config .

0 votes

Il existe ici une réponse qui pourrait vous aider : https://stackoverflow.com/a/46260607/2472664

132voto

Be.St. Points 1699

La configuration de IIS express est gérée par applicationhost.config.
Vous pouvez le trouver dans

Utilisateurs\N<nom d'utilisateur> \Documents\IISExpress\config dossier.

À l'intérieur, vous trouverez la section des sites qui contient une section pour chaque site configuré par IIS Express.

Ajoutez (ou modifiez) une section du site comme ceci :

<site name="WebSiteWithVirtualDirectory" id="20">
   <application path="/" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="c:\temp\website1" />
   </application>
   <application path="/OffSiteStuff" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="d:\temp\SubFolderApp" />
   </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:1132:localhost" />
   </bindings>
</site>

En pratique, vous devez ajouter une nouvelle balise d'application dans votre site pour chaque répertoire virtuel. Vous bénéficiez d'une grande flexibilité car vous pouvez définir une configuration différente pour le répertoire virtuel (par exemple une version différente de .Net Framework).

EDIT Merci à Fevzi Apaydın de nous indiquer une solution plus élégante.

Vous pouvez obtenir le même résultat en ajoutant une ou plusieurs balises virtualDirectory à la balise Application :

<site name="WebSiteWithVirtualDirectory" id="20">
   <application path="/" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="c:\temp\website1" />
     <virtualDirectory path="/OffSiteStuff" physicalPath="d:\temp\SubFolderApp" />
   </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:1132:localhost" />
   </bindings>
</site>

Référence :

0 votes

Après avoir ajouté chaque étiquette d'application pour chaque répertoire virtuel, je n'ai pas pu exécuter l'application "offsitestuff". Ex : iisexpress /site:WebSiteWithVirtualDirectory - exécute la première application du chemin " C:\temp\website1 ". Comment puis-je exécuter ma deuxième application qui contient le chemin "d : \temp\SubFolderApp "

0 votes

Dans la section bindings, vous voyez l'url et le port utilisés pour accéder à la racine de votre site. Donc : localhost:1132 est l'url de l'application web installée dans c : \temp\website1 localhost:1132/OffSiteStuff est l'url de l'application web installée dans d : \temp\SubFolderApp.

0 votes

Quelqu'un sait-il si/comment je peux configurer les paramètres séparément pour chaque projet (afin de pouvoir vérifier dans la configuration) ? Merci

91voto

Fevzi Apaydın Points 421

L'approche de @Be.St. est vraie, mais incomplète. Je ne fais que copier son explication en corrigeant la partie incorrecte.

La configuration de IIS express est gérée par applicationhost.config.
Vous pouvez le trouver dans

Utilisateurs\N<nom d'utilisateur> \Documents\IISExpress\config dossier.

À l'intérieur, vous trouverez la section des sites qui contient une section pour chaque site configuré par IIS Express.

Ajoutez (ou modifiez) une section du site comme ceci :

<site name="WebSiteWithVirtualDirectory" id="20">
   <application path="/" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="c:\temp\website1" />
     <virtualDirectory path="/OffSiteStuff" physicalPath="d:\temp\SubFolderApp" />
   </application>
   <bindings>
      <binding protocol="http" bindingInformation="*:1132:localhost" />
   </bindings>
</site>

Au lieu d'ajouter un nouveau bloc d'application, vous devriez simplement ajouter un nouvel élément virtualDirectory à l'élément parent de l'application.

Modifier - Visual Studio 2015

Si vous cherchez le fichier applicationHost.config et que vous utilisez VS2015, vous le trouverez dans le fichier :

[répertoire_solution]/.vs/config/applicationHost.config

4 votes

Existe-t-il un moyen de l'appliquer dans le projet Visual Studio ? Dans un environnement multi-développeurs, si quelqu'un d'autre vérifie le code sur sa machine, alors son IIS Express local ne sera pas configuré avec le répertoire virtuel et provoquera des erreurs d'exécution, n'est-ce pas ?

4 votes

Dans Visual Studio 2015, le fichier de configuration IIS est stocké dans le répertoire de la solution, dans un dossier appelé .vs/config, de sorte que vous pouvez le vérifier dans le contrôle des sources si vous le souhaitez.

0 votes

Tant de non-réponses inondent les résultats de google pour cette question en relation avec VS 2012. Cela fonctionne !!!!

7voto

user2765861 Points 23

Dans VS2013, j'ai procédé de la manière suivante :

1.cliquez avec le bouton droit de la souris sur le projet d'application web et cliquez sur Propriétés.

2.voir l'onglet "Web" de la page Propriétés

Sous Serveurs, "IIS Express" étant le choix par défaut de la liste déroulante, dans "Project Url", changez l'url en utilisant le numéro de port à votre convenance. Par exemple, j'ai supprimé le numéro de port et ajouté "/MVCDemo4" après le localhost.

4. cliquez sur le bouton "Créer un répertoire virtuel".

Exécutez votre projet et la nouvelle url sera utilisée.

1 votes

Cela ne vous permet pas de configurer le chemin physique.

0 votes

OK, avec un peu d'expérimentation : si vous changez votre webroot pour avoir un URI d'application et cliquez sur Créer un répertoire virtuel, il crée un applicationhost.config sous le chemin du projet .vs\{nom du projet}. \config. Vous pouvez modifier ce fichier .config et changer la propriété physicalPath du répertoire virtuel. Je ne sais pas si cela est déjà vérifié dans SCM, je vais devoir le découvrir.

3voto

Bryan B Points 134

Si vous utilisez Visual Studio 2013 (qui peut nécessiter une édition Pro ou supérieure), j'ai pu ajouter un répertoire virtuel à un site Web IIS Express (basé sur des fichiers) en cliquant avec le bouton droit de la souris sur le site Web dans l'explorateur de solutions et en cliquant sur Ajouter > Nouveau répertoire virtuel. Cela a ajouté une entrée au fichier applicationhost.config comme avec les méthodes manuelles décrites ici.

2voto

Lex Li Points 18214

Une nouvelle option est Jexus Manager pour IIS Express,

https://blog.lextudio.com/2014/10/jexus-manager-for-iis-express/

C'est juste l'outil de gestion que vous savez utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X