Створення віртуальних каталогів у експресі IIS


124

Чи є спосіб створити віртуальний каталог в IIS express? Я знаю, що Кассіні цього не може зробити, і було б непогано зробити це без використання повної версії IIS.

У мене це так далеко, що я можу переглядати свою програму локально в IIS express так:

http: // localhost: 1132 /

Що я хотів би зробити, це створити віртуальний каталог під назвою "OffSiteStuff" і вказати його на якесь місце на моєму диску C, наприклад, "c: \ offsitestuff", а потім переглядати елементи в цій папці, наприклад:

http: // localhost: 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.
Ви можете знайти його

Користувачі \ <ім'я користувача> \ Документи \ 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 Завдяки Fevzi Apaydın вказав на більш елегантне рішення.

Ви можете досягти того ж результату, додавши один або кілька тегів virtualDirectory в тег програми:

<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". Як я можу запустити моє 2 - е додатки , яке містить шлях «d: \ Temp \ SubFolderApp»
Велить

У розділі прив’язок ви бачите URL-адресу та порт, використовуваний для доступу до кореня вашого веб-сайту. Отже: localhost: 1132 - це URL-адреса веб-додатку, встановленого в c: \ temp \ website1 localhost: 1132 / OffSiteStuff - це URL-адреса веб-програми, встановленої в d: \ temp \ SubFolderApp.
Бе.Ст.

Хтось знає, чи / як я можу налаштувати налаштування окремо для кожного проекту (щоб я міг перевірити конфігурацію)? Спасибі
Ян Грінгер

1
@ Be.St. Я хотів би, щоб такі речі, як номер порту для веб-сайту IIS, були однаковими для всіх розробників - тому я хотів би перевірити (деякі) налаштування. Але я не можу цього зробити з поточного місцезнаходження. Цікаво, чи можу я вказати його на інший файл у стилі UserAppSettings тощо
Ian Grainger

26
Примітка. Хоча ці інструкції все ще застосовуються до Visual Studio 2015, місце розташування applicationhost.configзмінилося. Більш розумно, ніж попередні версії, він зараз знаходиться в .vs\configпідпапку папки вашого рішення.
Річард Мосс

91

@ Заступництво Be.St. Є правдивим, але неповним. Я просто копіюю його пояснення, виправляючи неправильну частину.

Конфігурація експресу IIS керується програмою applicationhost.config.
Ви можете знайти його

Користувачі \ <ім'я користувача> \ Документи \ 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] /. vs / config / applicationHost.config


4
Чи є можливість застосувати це в рамках проекту Visual Studio? Якщо в середовищі для багатьох розробників хтось ще перевірить код на своїй машині, то їх локальний IIS Express не налаштовується на віртуальний каталог і не спричинить помилки під час виконання, чи не так?
ahillier88

4
У Visual Studio 2015 файл конфігурації IIS зберігається у каталозі рішення, у папці, що називається .vs / config, тому ви можете перевірити його у керуванні джерелом, якщо хочете.
Ренді Гамаж

Стільки невідповідей затоплюють результати Google для цього питання стосовно VS 2012. Це працює !!!!
Тім Огілві

Чи можна додати окрему програму у віртуальний каталог у IIS express, щоб у мене було два додатки під одним доменом?
Денис Алексієєв

6

У VS2013 я зробив це в наступних кроках:

1. Клацніть правою кнопкою миші проект веб-програми та натисніть Властивості

2.Перегляньте вкладку "Веб" на сторінці "Властивості"

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

4. Натисніть кнопку "Створити віртуальний каталог".

5.Запустіть проект і буде використана нова URL-адреса


1
Це не дозволяє налаштувати фізичний шлях.
Вікторіо Берра

2

Якщо ви використовуєте Visual Studio 2013 (може вимагати видання Pro або новішої версії), мені вдалося додати віртуальний каталог на веб-сайт IIS Express (файловий), клацнувши правою кнопкою миші на веб-сайті в Провіднику рішень і натиснувши Додати> Новий віртуальний каталог. Це додало запис до файлу applicationhost.config, як і описані тут ручні методи.



0

У мене було щось інше, самі файли там, де недоступні в середовищі SBS.

Видаліть файли з конфігураційної папки (якщо ви не можете їх відкрити!) Та замініть їх копією папки на власному локальному ПК.

Виправлено це для мене :)


Файли користувачів \ <ім'я користувача> \ Документи \ IISExpress \ config захищені користувачем. Можливо, ви спробували відредагувати його з іншим користувачем. Тому для його редагування потрібно запустити Блокнот (або ваш редактор) в режимі адміністрування. Таким чином ви зможете його змінити. Або видаліть і скопіюйте так, як ви це зробили :-)
Be.St.

0

Мені довелося зробити запис у файлі [project] .vs \ config \ applicationhost.config.

До цього він працював від розгортання, але не з коду.


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 проігнорує будь-які зміни у файлі, тому тепер їх легко поділити навколо.

У відповідь на більш детальне запитання щодо додавання інших програм на одному веб-сайті:

Ви можете створити сайт у файлі хостів програми, як і на вашому сервері. Наприклад:

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

Потім скористайтеся описаною вище технікою, щоб змінити місця папки під час збирання.


Чи можна додати окрему програму у віртуальний каталог у IIS express, щоб у мене було два додатки під одним доменом?
Денис Алексієєв
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.