【发布时间】:2011-10-15 06:35:57
【问题描述】:
我正在尝试使 MS Deploy 包中的子目录对应用程序池用户可写。多亏了 Kevin Leetham 的 helpful post about the setAcl provider,我才能够将我需要的大部分内容放入我的项目文件中:
<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,确切地说,而是 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 显然将 Web 应用程序名称替换为我的绝对路径“C:...\obj\Release\Package\PackageTmp”,但是当我将“\doc\public”附加到该绝对路径时,它不再识别它作为一个 Web 应用程序目录。另一个受害者 over on the ASP.NET forums 描述了这个确切的问题,但没有任何解决方案。
有谁知道如何通过 Web Deploy 在 Web 应用程序的特定子目录上设置 ACL,而无需手动识别目标主机上的物理路径和应用程序池用户?
【问题讨论】:
标签: visual-studio-2010 iis-7 msdeploy webdeploy