我正在尝试让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>
那最后一行看起来不错:它附加了我想要可写的子目录,并且访问修饰符似乎都已经转移得足够好了。
然而,当我部署这个包时,我收到一个错误:
错误:在使用物理路径时,必须指定“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似乎将我的绝对路径“C:...\ obj \ Release \ Package \ PackageTmp”替换为Web应用程序名称,但是当我在该绝对路径后附加“\ doc \ public”时,它不再将其识别为Web应用程序目录。这个问题被另一个受害者描述得非常准确,在ASP.NET论坛上,但没有任何解决方法。
是否有人知道如何通过Web Deploy在不手动识别目标主机上的物理路径和应用程序池用户的情况下设置Web应用程序的特定子目录的ACL?
doc/public
可写,还有/home/temp
? - TimH