Как я могу запретить 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 переписывать этот путь?
Ответы
Ответ 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>