MS Deployパッケージのサブディレクトリを、アプリケーションプールユーザーが書き込み可能にしようとしています。Kevin LeethamによるsetAclプロバイダーに関する有益な投稿のおかげで、必要なもののほとんどをプロジェクトファイルに取り込むことができました。
<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>
その最後の行は良さそうです。書き込み可能にしたいサブディレクトリが追加されており、アクセス修飾子はすべて十分に転送されているようです。
ただし、このパッケージを展開すると、次のエラーが発生します。
エラー:「setAcl」プロバイダーを物理パスで使用する場合は、「setAclUser」設定の値を指定する必要があります。
物理パスにACLを設定しようとしているのではなく、Webアプリケーションのサブディレクトリに設定しようとしているため、これは紛らわしいエラーです。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」をWebアプリケーション名に置き換えているようですが、その絶対パスに「\ doc \ public」を追加すると、絶対パスとして認識されなくなります。 Webアプリケーションディレクトリ。この正確な問題は、ASP.NETフォーラムで解決策なしに別の被害者によって説明されています。
ターゲットホスト上の物理パスとアプリケーションプールユーザーを手動で識別せずに、Web配置を介してWebアプリケーションの特定のサブディレクトリにACLを設定する方法を知っている人はいますか?