Я пытаюсь сделать подкаталог в пакете MS Deploy доступным для записи пользователю пула приложений. Благодаря полезному сообщению о поставщике setAcl от Kevin Leetham Я смог получить большую часть того, что мне нужно, в файл проекта:
<MsDeploySourceManifest Include="setAcl"
Condition="$(IncludeSetAclProviderOnDestination)">
<Path>$(_MSDeployDirPath_FullPath)\doc\public</Path>
<setAclAccess>Read,Write,Modify</setAclAccess>
<setAclResourceType>Directory</setAclResourceType>
<AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
</MsDeploySourceManifest>
Обратите внимание, что я добавил "\doc\public" в корневой каталог развертывания. В результирующем манифесте, созданном VS2010, я вижу следующий элемент setAcl:
<sitemanifest>
<contentPath path="C:\Source\...\obj\Debug\Package\PackageTmp" />
<setAcl path="C:\Source\...\obj\Debug\Package\PackageTmp"
setAclResourceType="Directory" />
<setAcl path="C:\Source\...\obj\Debug\Package\PackageTmp"
setAclUser="anonymousAuthenticationUser"
setAclResourceType="Directory" />
<setAcl path="C:\Source\...\obj\Debug\Package\PackageTmp\doc\public"
setAclResourceType="Directory"
setAclAccess="Read,Write,Modify" />
</sitemanifest>
Последняя строка выглядит хорошо: к ней добавлен подкаталог, который я хочу сделать доступным для записи, и все модификаторы доступа, похоже, перенесены достаточно хорошо.
Однако, когда я развертываю этот пакет, я получаю сообщение об ошибке:
Ошибка: значение параметра setAclUser должно быть указано, когда поставщик setAcl используется с физическим путем.
Это запутанная ошибка, потому что я пытаюсь установить ACL не на физический путь, а на подкаталог веб-приложения. Глядя на вывод MS Deploy, легко увидеть проблему:
Info: Adding setAcl (REST Services\1.0.334).
Info: Adding setAcl (REST Services\1.0.334).
Info: Adding setAcl (C:\...\obj\Release\Package\PackageTmp\doc\public).
MS Deploy, по-видимому, заменяет имя веб-приложения на мой абсолютный путь "C:...\obj\Release\Package\PackageTmp", но когда я добавляю "\doc\public" к этому абсолютному пути, он больше не распознает его как каталог веб-приложений. Эта точная проблема описана другой жертвой на Форумы ASP.NET без разрешения.
Кто-нибудь знает, как установить ACL для определенного подкаталога веб-приложения через веб-развертывание без ручной идентификации физического пути и пользователя пула приложений на целевом хосте?