让msbuild远程部署干净的应用程序

时间:2011-07-07 05:59:47

标签: .net asp.net asp.net-mvc visual-studio-2010 msbuild

我们正在使用msbuild将ASP.NET MVC应用程序部署到几个不同的服务器。但是,msbuild似乎不会首先删除远程应用程序文件夹(它似乎只是更新文件)。我们的msbuild命令行如下所示:

“C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe”OurWebProject.csproj / P:BaseIntermediateOutputPath = c:\ temp \ tempfolder \ / P:Configuration = Release / P:DeployOnBuild = True / P:DeployTarget = MSDeployPublish /P:MsDeployServiceUrl=https://192.168.0.83:8172/MsDeploy.axd / P:AllowUntrustedCertificate = True / P:MSDeployPublishMethod = WMSvc / P:CreatePackageOnPublish = True / P:UserName = ARemoteWebDeployUser / P :密码= SomePassword

msbuild是否真的'智能'足以同步文件,每次都不需要干净的部署?如果没有,是否有一种简单的方法可以先删除文件?

我们正在使用web.config转换,因此每次都会重建/重新部署web.config(这是一件好事,因为我们希望应用程序池在每次部署时重新启动)。

2 个答案:

答案 0 :(得分:2)

我不确定msbuild命令是否有一些特定的选项,但也许你可以为你的项目添加一个目标?你可以创建:

<Target Name=CleanServerFolders>
  <Exec Command="psexec \\$(serverIP) -u $(serverUserName) -p $(serverUserPassword) del $(projectFolderOnServer)"
</Target>

如果你不知道PsExec,请看这里:http://technet.microsoft.com/en-us/sysinternals/bb897553。它是Microsoft的轻量级工具,可能是在服务器上运行命令的最佳选择。 然后修改你的msbuild命令来调用这个目标(但是你需要在这个命令中指定所有其他默认目标):

msbuild.exe /t:Build,CleanServerFolders,Deploy ...etc

最终,您可以将后期构建事件添加到项目文件中。

<Project>
  ...
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <Target Name="AfterBuild"><CallTarget Targets="CleanServerFolders"/></Target>
</Project>

当然,Microsoft.VisualBasic.targets是.vbproj项目的文件。如果你正在使用c#,那么试试Microsoft.CSharp.targets(更好地检查MSDN上的名字)

答案 1 :(得分:0)

您是否尝试过使用robocopy命令? msbuild扩展包有一个msbuild包装器吗? 见http://msbuildextensionpack.codeplex.com/

您可以将robocopy设置为仅更新不同的文件和各种其他复制选项。看一下 robocopy /?并查看加速部署的所有可用选项。