C# 如何获得VisualStudio发布中使用的相同发布命令
我正在使用MSDeploy.exe发布我的Web应用程序:C# 如何获得VisualStudio发布中使用的相同发布命令,c#,visual-studio,msbuild,msdeploy,C#,Visual Studio,Msbuild,Msdeploy,我正在使用MSDeploy.exe发布我的Web应用程序: msdeploy.exe -verb:sync -source:package=mypackage.zip -dest:auto,computerName=MyServer -allowUntrusted 这将使我的包与目标服务器同步,并在此过程中删除所有不需要的文件。 有时资源(例如:MyResource.dll)被IIS工作进程锁定,它不允许执行删除操作,因此部署失败,出现错误: 对路径“C:\MyResource.dll”的访
msdeploy.exe
-verb:sync
-source:package=mypackage.zip
-dest:auto,computerName=MyServer
-allowUntrusted
这将使我的包与目标服务器同步,并在此过程中删除所有不需要的文件。
有时资源(例如:MyResource.dll)被IIS工作进程锁定,它不允许执行删除操作,因此部署失败,出现错误:
对路径“C:\MyResource.dll”的访问被拒绝
但是,如果我从VisualStudio中使用发布功能,我的网站将毫无问题地发布到服务器上。锁定的文件仍保留在文件夹中,错误将被忽略
我想VS可能会使用这个开关:
-enableRule:DoNotDeleteRule
但我不是很确定
我的问题是:-
The handle is invalid.
Couldn't access MyServer.
(我的头撞在墙上)2)在部署期间使用appoffline规则停止应用程序:
msdeploy.exe -verb:sync -source:package=mypackage.zip -dest:auto,computername=<publishUrl> -enableRule:AppOffline
msdeploy.exe-verb:sync-source:package=mypackage.zip-dest:auto,computername=-enableRule:AppOffline
这将把app_offline.htm放入您的web应用程序根目录中,以进行同步操作(强制IIS卸载应用程序,并仅向所有请求提供此静态文件,直到文件被删除为止-下面是一个很好的解释)
有关详细信息,请参阅和。
如果需要,您可以使用更灵活的方法(例如,在运行包同步之前,使用单独的webdeploy命令复制app_offline.htm)
1) 您是否已尝试将msbuild verbosity设置为diagnostic?以回答我自己的问题: 1)我们可以通过输出窗口或日志文件获取VS使用的发布命令吗? 是的,我们可以将命令输出到输出窗口。
只需将名为
.wpp.targets
的文件添加到项目目录的根目录中即可。并编辑如下内容:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<UseMsdeployExe>true</UseMsdeployExe>
</PropertyGroup>
</Project>
真的
现在您可以使用VisualStudio发布,并且可以在输出窗口中看到MSDeploy命令
查看易卜拉欣·哈希米博客了解更多信息
2)有没有办法停止远程服务器上的应用程序池? 我使用MSDeploy命令的-preSync-postSync启动/停止/回收远程应用程序池
MSDeploy.exe
-source:package="mypackage.zip"
-dest:auto,ComputerName=MyServer,IncludeAcls=False
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-allowUntrusted
-preSync:runCommand="C:\Windows\System32\inetsrv\appcmd stop apppool <AppPoolName>"
-postSync:runCommand="C:\Windows\System32\inetsrv\appcmd start apppool <AppPoolName>"
MSDeploy.exe
-来源:package=“mypackage.zip”
-dest:auto,ComputerName=MyServer,IncludeAcls=False
-动词:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-allowUntrusted
-preSync:runCommand=“C:\Windows\System32\inetsrv\appcmd stop apppool”
-postSync:runCommand=“C:\Windows\System32\inetsrv\appcmd start-apppool”
希望这有帮助=)我尝试了appoffline方法,它关闭了网站,但没有回收池。在执行手动回收apppool之前,资源仍处于锁定状态。我已按照您的步骤发布Blazor Web程序集应用程序,并且输出中没有“msbuild.exe”。