Kag*_*awa 4 c# msbuild msdeploy visual-studio
我正在使用MSDeploy.exe发布我的Web应用程序:
msdeploy.exe
-verb:sync
-source:package=mypackage.zip
-dest:auto,computerName=MyServer
-allowUntrusted
Run Code Online (Sandbox Code Playgroud)
这会将我的包同步到目标服务器,并在此过程中删除所有不需要的文件。有时资源(例如:MyResource.dll)被IIS工作进程锁定,并且不允许删除操作,因此部署失败并显示以下错误:
拒绝访问路径“ C:\ MyResource.dll”。
但是,如果我使用VisualStudio中的“发布”功能,则我的网站可以毫无问题地发布到服务器上。锁定的文件保留在该文件夹中,并且错误将被忽略。
我认为VS可能使用此开关:
-enableRule:DoNotDeleteRule
但是我对此不太确定。
我的问题:
我也尝试过PSEXEC:
psexec.exe -s \\ MyServer appcmd.exe停止apppool /apppool.name=MyAppPool
它在命令行中运行良好,但是当我将其放在脚本中进行构建自动化时,它返回错误:
The handle is invalid.
Couldn't access MyServer.
Run Code Online (Sandbox Code Playgroud)
(把我的头撞在墙上)
要回答我自己的问题:
1)我们可以通过输出窗口或日志文件得到VS使用的发布命令吗?
是的,我们可以将命令输出到输出窗口。
您需要做的只是简单地<YourProjectName>.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>
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用Visual Studio进行发布,并且可以在输出窗口中看到MSDeploy命令。
有关更多信息,请在此处结帐Sayed Ibrahim Hashimi博客。
2)有没有办法停止远程服务器上的应用程序池?
我设法使用MSDeploy命令的-preSync -postSync启动/停止/回收远程AppPool。
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>"
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助=)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |