使用 dotnet 发布时,Web 部署自动备份为空



我正在使用 Web 部署将我的 .net core 3.1 Web 应用程序发布到我的服务器,到目前为止运行良好。 现在,我想在任何新部署之前设置自动备份。我遵循了这本手册。

我还<EnableMSDeployBackup>True</EnableMSDeployBackup>添加到我的.pubxml文件中。 当我使用dotnet publish ...启动部署时 控制台输出告知将创建备份。未报告任何错误。实际上在定义的备份位置有一个包zip文件,但内容文件夹不包含任何内容,在zip的根目录中只有一个archive.xmlsystemInfo.xml文件。

当我直接在服务器上使用msdeploy.exe -verb:sync -source:backupManager -dest:backupManager=siteName执行备份时,备份被正确创建。为了进行测试,我使用相同的用户进行远程发布,他是服务器上的管理员,并且在源和目标文件夹中具有完全权限。

从Visual Studio 2019中发布时,行为是相同的。

我已经在这里和这里发现了一些类似的问题,但没有一个推荐的解决方案有效。

我的.pubxml看起来像这样(主要是从VS创建的(:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<EnvironmentName>Production</EnvironmentName>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<EnableMSDeployBackup>True</EnableMSDeployBackup>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish>https://my-server/myapp</SiteUrlToLaunchAfterPublish>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<TargetFramework>net461</TargetFramework>
<RuntimeIdentifier>win7-x86</RuntimeIdentifier>
<ProjectGuid>3ae552b0-7f3a-42b9-b224-d5c734004215</ProjectGuid>
<MSDeployServiceURL>https://my-server/</MSDeployServiceURL>
<DeployIisAppPath>MyApp</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>True</EnableMSDeployBackup>
<UserName>ourDomainmyUser</UserName>
<_SavePWD>True</_SavePWD>
<PublishDatabaseSettings>
<Objects xmlns="" />
</PublishDatabaseSettings>
<ExcludeFilesFromDeployment>appsettings.Development.json</ExcludeFilesFromDeployment>
</PropertyGroup>
</Project>

任何想法将不胜感激!

对我来说,解决方案是授予对网站上方一个文件夹的帐户"本地服务"的读取访问权限

与我的设置匹配的示例:

  • /IIS_Websites/ProjectName/WebRoot
  • 授予对项目名称文件夹的"本地服务"读取权限
  • 将 Web 根设置为继承父权限

有一个双重问题。

首先,即使部署用户、管理员组、IIS_IUSRS、应用程序池用户等用户都拥有权限,但这还不够。

我在事件查看器 - 安全选项卡中发现发布用户的审核成功...但它说这是"本地服务"冒充发布用户。所以我尝试授予本地服务读取访问权限,它奏效了。

其次,我发现每次发布时,它都会重置WebRoot文件夹的权限,并将权限还原为继承的权限。因此,在WebRoot上设置本地服务访问权限不起作用,因为它每次都会被擦除。

最新更新