即使使用 -enableRule:AppOffline,从命令行进行 Webdeploy 也不会使应用程序脱机

问题描述 投票:0回答:3

当我尝试从命令行运行此命令来部署 ASP.NET Core 网站时:

"C:\\Program Files\\IIS\\Microsoft Web Deploy V3\\msdeploy.exe" -allowUntrusted -verb:sync -sourc
e:contentPath="%USERPROFILE%\ProjectFolder\bin\release\netcoreapp1.1\publish" -dest:contentPath="sitename",ComputerNa
me="https://siteurl.com:8172/msdeploy.axd?site=sitename",UserName='myusername',Password='mypassword',AuthType='Basic' -enableRule:AppOffline -retryAttempts:20

出现此错误:

Error Code: ERROR_FILE_IN_USE

当我在网络服务器上停止网站时,部署成功:

我期待

-enableRule:AppOffline
应该强制网站离线。但它仍然保持对网站 dll 的锁定。

我们如何强制 webdeploy 覆盖文件?

iis asp.net-core web-deployment webdeploy
3个回答
7
投票

您可以在网站上看到 App_Offline.htm 是否正在创建吗?如果是,请尝试重命名为 app_offline.htm(全部小写)。这会关闭该网站吗? AspNetCoreModule 中存在 App_Offline.htm 文件区分大小写的错误,请参阅此处


0
投票

哇。这个问题对我来说是一个难题。 我无法在实际部署命令中获得

-enableRule:AppOffline
。我也无法让它在我的 pubxml 文件中工作:

<PropertyGroup>
    <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
</PropertyGroup>

(我使用的是 IIS v10)

这篇微软博客文章表明两者都可以,但对我来说没有骰子!

无论如何,这两个参考资料对我帮助很大:

  1. https://github.com/aspnet/AspNetCoreModule/issues/50#issuecomment-268820798
  2. https://learn.microsoft.com/en-us/iis/publish/deploying-application-packages/take-an-application-offline-before-publishing

真正的技巧是在第二个参考中,该图块上写着“发布之前”。因此,您需要在主要部署之前单独运行

msdeploy.exe

这是我使用的PowerShell代码:

# Deploy app_offline.htm
$IisApp = Get-IisAppName
$AppOfflineFilePath = "`"C:\path with spaces\app_offline.htm`""

Log-Begin "Deploy app_offline.htm"
& $MsDeployPath -verb:sync -source:contentPath=$AppOfflineFilePath -dest:contentPath=$IisApp/app_offline.htm,ComputerName=$ServerName,UserName=$UserName,Password=$Password,IncludeAcls="False"
Log-End "Deploy app_offline.htm" $LastExitCode

Write-Host "Sleeping for 4 seconds to give the app_offline.htm a chance to take effect."
Write-Host "If you get a locked DLL error, just try the deployment again!"
Start-Sleep -Seconds 4

# Within the ZIP file is a MS Web Deploy Package ZIP, a cmd (to run the deploy), and some other files.
$DeployCommandFilePath = Get-ChildItem $pwd *.deploy.cmd -Recurse | Where-Object {$_.FullName.length -lt 260} | Select-Object -First 1 | Resolve-Path -Relative

Log-Begin "deploy.cmd"
& $DeployCommandFilePath /Y /M:$ServerName /U:$UserName /P:$Password
Log-End "deploy.cmd" $LastExitCode

请注意,我添加了短暂的睡眠,以使 app_offline.htm 文件有机会生效。这不是立即的。

我将 IIS 设置为在部署时自动删除 app_offline.htm 文件,所以我不需要这个,但如果您需要的话,这里是代码:

# Delete app_offline.htm
Log-Begin "Delete app_offline.htm"
& $MsDeployPath -verb:delete -dest:contentPath=$IisApp/app_offline.htm,ComputerName=$ServerName,UserName=$UserName,Password=$Password,IncludeAcls="False"
Log-End "Delete app_offline.htm" $LastExitCode

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