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

5
我们正在使用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(这是一个好事,因为我们希望应用程序池在每次部署时重新启动)。
2个回答

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。这是来自微软的轻量级工具,可能是在服务器上运行命令的最佳选择。 然后修改您的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上检查名称)。

0
你尝试使用过 robocopy 命令吗? msbuild 扩展包中有一个 msbuild 封装器可以实现这个功能。 请参阅http://msbuildextensionpack.codeplex.com/ 你可以将 robocopy 设置为仅更新不同的文件和所有其他复制选项。查看 robocopy /? 并查看所有可用选项以加快部署速度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接