Подтвердить что ты не робот

Как я могу запретить Visual Studio изменять phyical путь сайта IIS Express в applicationhost.config?

У меня есть проект веб-приложения Visual Studio, который по определенным причинам копирует файлы из нескольких проектов в отдельный выходной каталог. Я хочу использовать этот выходной каталог в качестве корня связанного сайта IIS Express. В файле applicationhost.config IIS Express я могу установить физический путь связанного сайта в правильный каталог. Я сделаю так:

<site name="MySiteName" id="42">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="c:\my\desired\path" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:63470:localhost" />
    </bindings>
</site>

Однако, когда я снова открываю проект, Visual Studio перезаписывает указанный физический путь, возвращая его в собственный каталог проекта. Хуже того, Visual Studio не дает мне никаких указаний на то, что он это сделал. Вот как выглядит элемент <virtualDirectory> после работы Visual Studio:

        <virtualDirectory path="/" physicalPath="c:\path\to\project" />

Как я могу запретить Visual Studio переписывать этот путь?

4b9b3361

Ответ 1

Visual Studio 2013 и 2015 не изменяет физический путь для параметра "Переопределить URL-адрес приложения":

enter image description here

Файл %userprofile%\documents\iisexpress\config\applicationhost.config по умолчанию выглядит следующим образом:

<site name="MyWebSite" id="1477659296">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Projects\MyWebSite" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:62238:localhost" />
        <binding protocol="http" bindingInformation="*:62238:*" />
    </bindings>
</site>

Просто скопируйте свой блок по умолчанию выше, вставьте его прямо ниже и внесите некоторые изменения. Измените name, id, physicalPath и переопределите URL с дополнительным субдоменом. В моем случае debug:

<site name="MyWebSiteOverwritten" id="99999999">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Projects\DifferentPath" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:62238:debug.localhost" />
    </bindings>
</site>

Теперь, когда я запускаю VS и запускаю IIS Express, Visual studio не изменяет физическийPath в apphost.config переписанного URL. Это работает для меня.

Совет для Visual Studio 2015: Visual Studio 2015 использует файл YourProject/.vs/config/applicationhost.config и переопределяет его при каждом открытии среды. Откройте файл *.proj и установите следующую запись:

<UseGlobalApplicationHostFile>true</UseGlobalApplicationHostFile>

В этой конфигурации IIS Express использует ваш файл хоста глобального приложения, расположенный по адресу: %userprofile%\documents\iisexpress\config\applicationhost.config.

Ответ 2

Мне не удалось помешать VS переопределить физическое поле для MySiteName, но в качестве обходного пути я добавил еще один раздел приложения с другим путем (скажем, "NewPath" ) и не обновлял VS, чтобы использовать этот путь в csproj web свойства. В этом случае при отладке он автоматически откроет браузер на старом url (http://localhost:63470/), если вы перейдете к новой конечной точке (http://localhost:63470/NewPath), все будет нормально работать, и VS не вернет это.

Итак, новая конфигурация выглядит следующим образом:

<site name="MySiteName" id="42">
     <application path="/" applicationPool="Clr4IntegratedAppPool">
         <virtualDirectory path="/" physicalPath="c:\path\to\project" />
     </application>
     <application path="/NewPath" applicationPool="Clr4IntegratedAppPool">
         <virtualDirectory path="/" physicalPath="c:\my\desired\path" />
     </application>
     <bindings>
         <binding protocol="http" bindingInformation="*:63470:localhost" />
     </bindings>
</site>