当我尝试从命令行运行此命令来部署 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 覆盖文件?
您可以在网站上看到 App_Offline.htm 是否正在创建吗?如果是,请尝试重命名为 app_offline.htm(全部小写)。这会关闭该网站吗? AspNetCoreModule 中存在 App_Offline.htm 文件区分大小写的错误,请参阅此处。
哇。这个问题对我来说是一个难题。 我无法在实际部署命令中获得
-enableRule:AppOffline
。我也无法让它在我的 pubxml 文件中工作:
<PropertyGroup>
<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
</PropertyGroup>
(我使用的是 IIS v10)
这篇微软博客文章表明两者都可以,但对我来说没有骰子!
无论如何,这两个参考资料对我帮助很大:
真正的技巧是在第二个参考中,该图块上写着“发布之前”。因此,您需要在主要部署之前单独运行
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
尝试增加 -retryInterval 和/或 -retryAttempts 参数: