如何阻止Visual Studio的Web发布从目标网站中删除写许可权?

问题描述 投票:11回答:2

我有一个要定制的Web应用程序(实际上是Orchard CMS),我想使用Web Publishing或MSDeploy将Directl从构建服务器推送到托管服务提供商。

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

我们可以对此进行辩论,但最重要的是,Orchard需要写访问权限,而Web发布坚持要删除该访问权限,这会破坏站点。不好。我必须登录服务提供商的控制面板,并在每次发布时重置权限,这会使该过程变得不那么自动。

因此,如何使Web Publishing放弃ACL?我在解决方案的任何地方都找不到此设置。

谢谢,--Tim

orchardcms acl msdeploy web-publishing
2个回答
16
投票

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

    <IncludeSetACLProviderOnDestination>False</IncludeSetACLProviderOnDestination>

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

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


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>

这将确保Web部署不会修改ACL。

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

© www.soinside.com 2019 - 2024. All rights reserved.