Создание виртуальных каталогов в IIS express

124

Есть ли способ создать виртуальный каталог в IIS Express? Я знаю, что Cassini не может этого сделать, и было бы неплохо сделать это без использования полной версии IIS.

У меня это так далеко, что я могу просматривать свое приложение локально в IIS Express следующим образом:

HTTP: // локальный: 1132 /

Я хотел бы создать виртуальный каталог с именем «OffSiteStuff» и указать его в какое-то место на моем диске C, например «c: \ offsitestuff», а затем просмотреть элементы в этой папке, например:

HTTP: // локальный: 1132 / OffSiteStuff / UserUploadedImage.jpg

Я знаю, что могу сделать это с помощью папки на моем сайте и по-прежнему использовать IIS Express или, если на то пошло, старый добрый Cassini, но эта папка будет хранить изображения, загруженные пользователями, и я действительно не хочу, чтобы эти изображения смешивались с файлы приложений.

Другое, «масштабное» решение - развертывать сайт на полномасштабном экземпляре Server 2008 IIS 7.5 каждый раз, когда я хочу отладить функции, использующие стороннее содержимое, но это тоже немного обременительно.

Есть ли способ сделать это в <System.WebServer />элементе веб-конфигурации?

Джон Хоге
источник
5
Для Visual Studio 2015 работал mikedice417.wordpress.com/2015/09/13/… . applicationHost.configФайл находится в корневом каталоге проекта: ${PROJECT}\.vs\config\applicationHost.config.
Мэтт
Вот ответ, который может вам помочь: https://stackoverflow.com/a/46260607/2472664
Джованни Фарто М.

Ответы:

129

Экспресс-конфигурация IIS управляется applicationhost.config.
Вы можете найти это в

Папка Users \ <имя пользователя> \ Documents \ IISExpress \ config.

Внутри вы можете найти раздел сайтов, который содержит раздел для каждого настроенного сайта IIS Express.

Добавьте (или измените) такой раздел сайта:

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

Практически вам нужно добавить новый тег приложения на свой сайт для каждого виртуального каталога. Вы получаете большую гибкость, потому что вы можете установить другую конфигурацию для виртуального каталога (например, другую версию .Net Framework)

EDIT Благодаря Февзи Апайдин , чтобы указать на более элегантное решение.

Вы можете добиться того же результата, добавив один или несколько тегов virtualDirectory к тегу 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>

Ссылка:

Лучший.
источник
После добавления каждого тега приложения для каждого виртуального каталога я не смог запустить приложение «offsitestuff». Пример: iisexpress / site: WebSiteWithVirtualDirectory - запустить первое приложение по пути «C: \ temp \ website1». Как запустить второе приложение, содержащее путь «d: \ temp \ SubFolderApp»
Велу,
В разделе привязок вы видите URL-адрес и порт, используемые для доступа к корню вашего сайта. Итак: localhost: 1132 - это URL-адрес веб-приложения, установленного в c: \ temp \ website1, localhost: 1132 / OffSiteStuff - это URL-адрес веб-приложения, установленного в d: \ temp \ SubFolderApp.
Be.St.
Кто-нибудь знает, можно ли / как настроить параметры отдельно для каждого проекта (чтобы я мог проверить конфигурацию)? Спасибо
Ян Грейнджер
1
@Лучший. Я бы хотел, чтобы номер порта для сайта IIS был одинаковым для всех разработчиков, поэтому я бы хотел проверить (часть) конфигурацию. Но я не могу сделать это из текущего местоположения. Интересно, могу ли я указать на другой файл в стиле UserAppSettings и т. Д.
Ян Грейнджер
26
Примечание. Хотя эти инструкции по-прежнему применимы к Visual Studio 2015, расположение файла applicationhost.configбыло изменено. Более разумно, чем в предыдущих версиях, теперь он находится в .vs\configподпапке вашего решения.
Ричард Мосс
91

Апрель @ Be.St. верный, но неполный. Я просто копирую его объяснение с исправлением неправильной части.

Экспресс-конфигурация IIS управляется applicationhost.config.
Вы можете найти это в

Папка Users \ <имя пользователя> \ Documents \ IISExpress \ config.

Внутри вы можете найти раздел сайтов, который содержит раздел для каждого настроенного сайта IIS Express.

Добавьте (или измените) такой раздел сайта:

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

Вместо добавления нового блока приложения вы должны просто добавить новый элемент virtualDirectory к родительскому элементу приложения.

Изменить - Visual Studio 2015

Если вы ищете файл applicationHost.config и используете VS2015, вы найдете его в:

[Solution_directory] /. Против / конфигурации / applicationHost.config

Февзи Апайдын
источник
4
Есть ли способ применить это в проекте Visual Studio? В среде с несколькими разработчиками, если кто-то другой проверит код на своей машине, тогда его локальный IIS Express не будет настроен с виртуальным каталогом и вызовет ошибки времени выполнения, не так ли?
ahillier88 03
4
В Visual Studio 2015 файл конфигурации IIS хранится в каталоге решения в папке с именем .vs / config, так что вы можете проверить его в системе управления версиями, если хотите.
Randy Gamage
Так много неответов, наводняющих результаты Google на этот вопрос в отношении VS 2012. Это работает !!!!
Тим Огилви
Можно ли добавить отдельное приложение в виртуальный каталог в IIS Express, чтобы у меня было два приложения в одном домене?
Денис Алексеев
6

В VS2013 я сделал это следующим образом:

1. Щелкните правой кнопкой мыши проект веб-приложения и выберите Свойства.

2. Просмотрите вкладку «Интернет» на странице свойств.

3. В разделе «Серверы», где «IIS Express» является выбором по умолчанию в раскрывающемся списке, в «URL-адресе проекта» измените URL-адрес, используя номер порта, на тот, который вам подходит. Например, я удалил номер порта и добавил "/ MVCDemo4" после localhost.

4. Нажмите кнопку «Создать виртуальный каталог».

5.Запустите свой проект, и будет использоваться новый URL-адрес.

user2765861
источник
1
Это не позволяет вам настроить физический путь.
Victorio Berra
2

Если вы используете Visual Studio 2013 (может потребоваться версия Pro или выше), я смог добавить виртуальный каталог на веб-сайт IIS Express (файловый), щелкнув правой кнопкой мыши веб-сайт в обозревателе решений и нажав Добавить> Новый виртуальный каталог. Это добавило запись в файл applicationhost.config, как и в случае ручных методов, описанных здесь.

Брайан Б.
источник
0

У меня было что-то еще, сами файлы, которые были недоступны в среде SBS.

Удалите файлы в папке config (если вы не можете их открыть!) И замените их копией папки на вашем собственном локальном компьютере.

Исправил для меня :)

NicoJuicy
источник
Файлы в Users \ <username> \ Documents \ IISExpress \ config защищены для каждого пользователя. Возможно, вы пытались отредактировать его с другим пользователем. Поэтому для его редактирования вам нужно запустить Блокнот (или ваш редактор) в режиме администрирования. Таким образом, вы можете изменить его. Или удалите и скопируйте, как вы :-)
Be.St.
0

Пришлось сделать запись в файле [проект] .vs \ config \ applicationhost.config.

До этого он работал из развертывания, но не из кода.

TheJoe
источник
0

В ответ на дальнейший вопрос -

«есть ли способ применить это в проекте Visual Studio? В среде с несколькими разработчиками, если кто-то другой проверит код на своем компьютере, то его локальный IIS Express не будет настроен с виртуальным каталогом и вызовет ошибки времени выполнения. не так ли? "

Я нигде не нашел последовательного ответа на этот вопрос, но потом понял, что вы можете сделать это с помощью события пост-сборки, используя задачу XmlPoke в файле проекта для веб-сайта -

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

Вы можете использовать этот метод, чтобы повторно указать что-либо в файле до запуска IISExpress. Это позволит вам изначально принудительно поместить файл applicationHost.config в GIT (при условии, что он игнорируется gitignore), а затем повторно указать все пути во время сборки. GIT игнорирует любые изменения в файле, поэтому теперь ими легко поделиться.

В ответ на следующий вопрос о добавлении других приложений на один сайт:

Вы можете создать сайт в файле hosts вашего приложения, точно так же, как сайт на вашем сервере. Например:

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

Затем используйте описанную выше технику, чтобы изменить расположение папок во время сборки.

AngryDaz
источник
Можно ли добавить отдельное приложение в виртуальный каталог в IIS Express, чтобы у меня было два приложения в одном домене?
Денис Алексеев