2012-06-26 4 views
4

В моем решении у меня есть 2 проекта, назовите их Foo и Bar. При развертывании Foo является корневым сайтом (http://mycompany.com) и Bar является подкаталогом (http://mycompany.com/sub).Как вы управляете файлами web.config в разных проектах в рамках одного и того же решения, когда вам нужны общие правила?

Когда я работаю над ними локально в IIS Express на своей локальной машине, мне нужно реплицировать вещи в web.config обоих проектов, так как я работаю над ними отдельно. Например, у меня есть одно из правил HMTL5 шаблонный для «очистки кэша» в моих правилах перезаписи:

<rewrite> 
    <rules> 
     <rule name="Cachebusting"> 
      <match url="^(.+)\.\d+(\.(js|css|png|jpg|gif)$)" /> 
       <action type="Rewrite" url="{R:1}{R:2}" /> 
     </rule> 
    </rules> 
</rewrite> 

Если я просто оставить его в web.config для Foo, а затем, когда я работаю на Bar, это не и я получаю ошибки, так как переписывание не происходит. Поэтому я реплицировал разделы в web.config для обоих проектов.

Но когда я публикую решение Azure, я получаю конфликты из-за правил наследования, так как web.config для Foo находится в корне.

Каков наилучший способ управления этим? Я попытался выполнить поиск по этой теме, но не смог найти эту конкретную проблему.

Update:

Мои applicationhost.config для IIS Express как таковой:

 <site name="Bar" id="3"> 
      <application path="/" applicationPool="Clr4IntegratedAppPool"> 
       <virtualDirectory path="/" physicalPath="E:\Code\mycompany\Bar\Bar" /> 
      </application> 
      <bindings> 
       <binding protocol="http" bindingInformation="*:65052:localhost" /> 
      </bindings> 
     </site> 
     <site name="Foo" id="4"> 
      <application path="/" applicationPool="Clr4IntegratedAppPool"> 
       <virtualDirectory path="/" physicalPath="E:\Code\mycompany\foo" /> 
      </application> 
      <bindings> 
       <binding protocol="http" bindingInformation="*:50477:localhost" /> 
      </bindings> 
     </site> 

Я попытался его редактирования, чтобы оба приложения часть одного и того же сайта, с этими изменениями, но не повезло. Кажется побили все :)

 <site name="Foo" id="3"> 
      <application path="/" applicationPool="Clr4IntegratedAppPool"> 
       <virtualDirectory path="/" physicalPath="E:\Code\mycompany\foo" /> 
      </application> 
      <application path="/Sub" applicationPool="Clr4IntegratedAppPool"> 
       <virtualDirectory path="/" physicalPath="E:\Code\mycompany\Bar\Bar" /> 
      </application>    
      <bindings> 
       <binding protocol="http" bindingInformation="*:65052:localhost" /> 
      </bindings> 
     </site> 
+0

Могут ли обе сайты не иметь одного и того же связанного файла конфигурации? – Kane

+0

Они не могут использовать один и тот же файл web.config, так как у подсайта есть настройки в нем, которые не применяются к родительскому сайту (например, строки подключений). – TMC

ответ

0

Сделайте свой корневой сайт (http://mycompany.com) в качестве веб-сайта в IIS, и ваш подкаталог в качестве виртуального каталога в IIS.

IIS разделяет Правила, определенные в корневом веб-сайте (web.config) с виртуальным каталогом.

+0

Я использую IIS Express локально и развертываю в Azure на производстве. Как настроить IIS Express следующим образом? Является ли это установкой проекта/решения в VS? – TMC

+0

, какую версию IIS Express вы используете? –

+0

Я использую IIS Express 7.5 – TMC

0

Использовать web.debug.config и web.Release.config для управления разницей разработки и выпуска. Для получения дополнительной информации следуйте this SO POST или this MSDN blog

+0

Я попытался объединиться с этим, но это кажется более подходящим для работы с различными конфигурациями из-за разницы между dev и prod (например, строки подключения). В этом случае это больше связано с тем, что IIS не объединяет проекты в единый сайт. – TMC

Смежные вопросы