我有一个要定制的Web应用程序(实际上是Orchard CMS),我想使用Web Publishing或MSDeploy将Directl从构建服务器推送到托管服务提供商。
问题是,当我发布站点(从Visual Studio,尚未从构建服务器尝试过)时,它删除了目标站点的写许可,这使Orchard立即崩溃,因为它无法再访问其数据库(等)。
我们可以对此进行辩论,但最重要的是,Orchard需要写访问权限,而Web发布坚持要删除该访问权限,这会破坏站点。不好。我必须登录服务提供商的控制面板,并在每次发布时重置权限,这会使该过程变得不那么自动。
因此,如何使Web Publishing放弃ACL?我在解决方案的任何地方都找不到此设置。
谢谢,--Tim
您可以通过将其添加到.pubxml文件来添加关闭ACL设置功能:
<IncludeSetACLProviderOnDestination>False</IncludeSetACLProviderOnDestination>
请参见http://msdn.microsoft.com/en-us/library/ff398069.aspx
本文还提到您可以通过本地.wpp.targets文件为所有发布配置更改此设置。如果您使用多个发布配置,请确保考虑该选项
在某些情况下,您可能会发现使用Web Deploy发布项目之后,ASPNet IUSR无法写入根目录或其中的任何文件(App_Data除外)。
默认情况下,Web Deploy将ASPNet IUSR的ACL设置为只读。为避免在发布应用程序时引起问题,您将需要找到项目文件并进行一些更改。对于以Visual Basic编写的应用程序,项目文件的扩展名为.vbproj;对于以C#编写的应用程序,扩展名为.csproj。在项目文件中找到:
<propertygroup condition=" '$(Configuration)|$(Platform)' ==
'Release|AnyCPU' "></propertygroup>
并将其更改为:
<propertygroup condition=" '$(Configuration)|$(Platform)' ==
'Release|AnyCPU' ">
<includesetaclproviderondestination>False</includesetaclproviderondestination>
</propertygroup>
这将确保Web部署不会修改ACL。
如果您已经部署到第三方托管服务提供商,则可能需要与他们联系以重置权限,然后再进行其他部署。