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

1voto

TheJoe Points 47

J'ai dû faire l'entrée dans le fichier [project].vs. \config\applicationhost.config fichier.

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

1voto

AngryDaz Points 21

En réponse à la question complémentaire -

"Y a-t-il un moyen de l'appliquer au sein du 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 serait pas configuré avec le répertoire virtuel et provoquerait des erreurs d'exécution, n'est-ce pas ?".

Je n'ai jamais trouvé de réponse cohérente à cette question nulle part, mais j'ai découvert qu'il était possible de le faire avec un événement post-construction en utilisant la tâche XmlPoke dans le fichier de projet du site Web.

<Target Name="AfterBuild">
    <!-- Get the local directory root (and strip off the website name) -->
    <PropertyGroup>
        <LocalTarget>$(ProjectDir.Replace('MyWebSite\', ''))</LocalTarget>
    </PropertyGroup>

    <!-- Now change the virtual directories as you need to -->
    <XmlPoke XmlInputPath="..\..\Source\Assemblies\MyWebSite\.vs\MyWebSite\config\applicationhost.config" 
        Value="$(LocalTarget)AnotherVirtual" 
        Query="/configuration/system.applicationHost/sites/site[@name='MyWebSite']/application[@path='/']/virtualDirectory[@path='/AnotherVirtual']/@physicalPath"/>
</Target>

Vous pouvez utiliser cette technique pour repointer n'importe quel élément du fichier avant le démarrage de IISExpress. Cela vous permettrait de forcer initialement un fichier applicationHost.config dans GIT (en supposant qu'il soit ignoré par gitignore), puis de repointer tous les chemins au moment de la construction. GIT ignorera toutes les modifications apportées au fichier, il est donc maintenant facile de les partager.

Pour répondre à une autre question concernant l'ajout d'autres applications sur un même site :

Vous pouvez créer le site dans le fichier hosts de votre application, tout comme celui de votre serveur. Par exemple :

  <site name="MyWebSite" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
      <virtualDirectory path="/" physicalPath="C:\GIT\MyWebSite\Main" />
      <virtualDirectory path="/SharedContent" physicalPath="C:\GIT\SharedContent" />
      <virtualDirectory path="/ServerResources" physicalPath="C:\GIT\ServerResources" />
    </application>
    <application path="/AppSubSite" applicationPool="Clr4IntegratedAppPool">
      <virtualDirectory path="/" physicalPath="C:\GIT\AppSubSite\" />
      <virtualDirectory path="/SharedContent" physicalPath="C:\GIT\SharedContent" />
      <virtualDirectory path="/ServerResources" physicalPath="C:\GIT\ServerResources" />
    </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:4076:localhost" />
    </bindings>
  </site>

Utilisez ensuite la technique ci-dessus pour modifier l'emplacement des dossiers au moment de la construction.

1voto

immirza Points 1926

Visual Studio Studio Professional 2017

  • Allez à la /Solution/.vs répertoire
  • Ouvrir le fichier applicationHost.config Développez <Sites> et rechercher le nœud enfant correct ( based on running port ) `
  • Añadir <virtualDirectory path="/MyVirtualDirectory" physicalPath="D:\MyVirtualDirectoryPhysicalPath" / >`

0voto

NicoJuicy Points 892

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.

C'est réparé pour moi :)

0 votes

Fichiers dans Users\<username> \Documents\IISExpress\config sont protégés par utilisateur. Vous avez peut-être essayé de le modifier avec un autre utilisateur. Pour le modifier, vous devez donc exécuter Notepad (ou votre éditeur) en mode administration. De cette façon, vous pourrez le modifier. Ou supprimer et copier comme vous l'avez fait :-)

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