web-dev-qa-db-fra.com

Création de répertoires virtuels dans IIS Express

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

Je l'ai si bien que je peux accéder à mon application localement dans IIS Express comme ceci:

http: // localhost: 1132/

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

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

Je sais que je pourrais le faire avec un dossier de mon site tout en utilisant IIS Express ou, en l'occurrence, le vieil ancien Cassini, mais ce dossier stockera les images téléchargées par les utilisateurs et je ne souhaite vraiment pas que ces images mélangées avec des fichiers d'application.

L’autre solution, «allez-y», consiste à déployer le site sur une instance complète de Server 2008 IIS 7.5 chaque fois que je veux déboguer les fonctionnalités qui utilisent du contenu hors site, mais c’est un peu fastidieux également.

Est-il possible de faire cela dans l'élément <System.WebServer /> Web config?

115
John Hoge

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

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

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

Ajoutez (ou modifiez) une section de site comme celle-ci:

<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 sur 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 proposer 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:

126
Be.St.

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

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

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

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

Ajoutez (ou modifiez) une section de site comme celle-ci:

<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 devez simplement ajouter un nouvel élément virtualDirectory à l'élément parent de l'application.

Éditer - Visual Studio 2015

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

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

89
Fevzi Apaydın

Dans VS2013 je l'ai fait dans les étapes suivantes:

1.Cliquez avec le bouton droit sur le projet d'application Web et cliquez sur Propriétés.

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

3.Under Servers, avec "IIS Express" comme choix par défaut du menu déroulant, dans "URL du projet", modifiez l'URL à l'aide du numéro de port qui convient. Par exemple, j'ai supprimé le numéro de port et ajouté "/ MVCDemo4" après l'hôte local.

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

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

6
user2765861

Si vous utilisez Visual Studio 2013 (peut nécessiter une édition Pro ou ulté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.

2
Bryan B

Jexus Manager pour IIS Express est une nouvelle option.

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

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

1
Lex Li

Je devais faire l'entrée dans le fichier [projet] .vs\config\applicationhost.config.

Avant cela, cela fonctionnait à partir du déploiement mais pas du code.

0
TheJoe

J'avais autre chose, les fichiers eux-mêmes étaient inaccessibles dans un environnement SBS.

Supprimez les fichiers du dossier de configuration (si vous ne pouvez pas les ouvrir!) Et remplacez-les par une copie du dossier sur votre propre ordinateur local.

Corrigé pour moi :)

0
NicoJuicy