Как можно запретить веб-публикации Visual Studio удалять разрешения на запись с целевого веб-сайта?

У меня есть веб-приложение (на самом деле Orchard CMS), которое я настраиваю, и я хочу перенести directl со своего сервера сборки на моего хостинг-провайдера, используя веб-публикацию или MSDeploy.

Проблема в том, что когда я публикую сайт (из Visual Studio, еще не пробовал его с сервера сборки), он удаляет разрешение на запись с целевого веб-сайта, что приводит к мгновенному падению Orchard, поскольку он больше не может получить доступ к своей базе данных. (так далее).

Мы можем спорить о целесообразности этого, но суть в том, что Orchard требуется доступ для записи, а веб-публикация настаивает на том, чтобы удалить этот доступ, который нарушает работу сайта. Нехорошо. Я должен войти в панель управления поставщика услуг и сбрасывать разрешения при каждой публикации, что делает процесс менее автоматическим.

Итак, как я могу заставить Web Publishing оставить ACL в покое? Я не могу найти какие-либо настройки для этого в решении нигде.

Спасибо, Тим

2 ответа

Решение

Вы можете добавить отключить функцию настройки ACL, добавив это в файл.pubxml:

    <IncludeSetACLProviderOnDestination>False</IncludeSetACLProviderOnDestination>

См. http://msdn.microsoft.com/en-us/library/ff398069.aspx

В некоторых случаях вы можете обнаружить, что после публикации проекта с помощью веб-развертывания ASPNet IUSR не может выполнить запись в корневой каталог или любые файлы в нем (кроме App_Data).

По умолчанию Web Deploy устанавливает ACL для ASPNet IUSR только для чтения. Чтобы это не вызывало проблем при публикации приложения, вам нужно найти файл проекта и внести некоторые изменения. Файл проекта заканчивается расширением.vbproj для приложений, написанных на Visual Basic, или.csproj для приложений, написанных на C#. В файле проекта найдите:

<propertygroup condition=" '$(Configuration)|$(Platform)' ==
'Release|AnyCPU' "></propertygroup>

и измените его на:

<propertygroup condition=" '$(Configuration)|$(Platform)' ==
'Release|AnyCPU' ">
<includesetaclproviderondestination>False</includesetaclproviderondestination>
</propertygroup>

Это гарантирует, что ACL не будет изменен в Web Deploy.

Если вы уже развернуты у стороннего хостинг-провайдера, вам может потребоваться связаться с ним, чтобы сбросить разрешения перед выполнением другого развертывания.

Другие вопросы по тегам