13

我有一个正在自定义的 Web 应用程序(实际上是 Orchard CMS),我想使用 Web Publishing aka MSDeploy 将我的构建服务器直接推送到我的托管服务提供商。

问题是,当我发布站点(从 Visual Studio,尚未从构建服务器尝试过)时,它会删除目标网站的写权限,这使得 Orchard 立即崩溃,因为它无法再访问其数据库(ETC)。

我们可以争论这是否明智,但归根结底是 Orchard 需要写入权限,而网络发布坚持要删除该权限,这会破坏网站。不好。每次发布时,我都必须登录服务提供商的控制面板并重置权限,这使得该过程不那么自动化。

那么,如何让 Web Publishing 不理会 ACL?我在任何地方的解决方案中都找不到任何设置。

谢谢,--蒂姆

4

2 回答 2

19

您可以通过将其添加到 .pubxml 文件来添加关闭 ACL 设置功能:

    <IncludeSetACLProviderOnDestination>False</IncludeSetACLProviderOnDestination>

请参阅http://msdn.microsoft.com/en-us/library/ff398069.aspx

该文章还提到您可以通过本地 .wpp.targets 文件为所有发布配置更改此设置。如果您使用多个发布配置,请务必考虑该选项

于 2013-05-28T15:46:09.327 回答
2

在某些情况下,您可能会发现在使用 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>

这将确保 ACL 不会被 Web Deploy 修改。

如果您已经部署到第 3 方托管服务提供商,您可能需要联系他们以重置您的权限,然后再进行其他部署。

于 2013-05-29T13:01:08.810 回答