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

Bee*_*eep 5 .net asp.net msbuild asp.net-mvc visual-studio-2010

我们使用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:Password = SomePassword

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

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

Dam*_*ski 2

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

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

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

msbuild.exe /t:Build,CleanServerFolders,Deploy ...etc
Run Code Online (Sandbox Code Playgroud)

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

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

当然,Microsoft.VisualBasic.targets 是 .vbproj 项目的文件。如果您使用的是 c#,请尝试 Microsoft.CSharp.targets(最好在 MSDN 上检查该名称)