.net - 获取 msbuild 以远程部署干净的应用程序

标签 .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:Password=某个密码

msbuild 真的“智能”到足以同步文件,从而无需每次都进行干净的部署吗?如果没有,是否有一种简单的方法可以先删除文件?

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

最佳答案

我不确定 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 上的名称)

关于.net - 获取 msbuild 以远程部署干净的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6606439/

相关文章:

c# - 像 Facebook 这样的即时通知

c# - 使用 RegEx 拆分链接

c# - 获取 lambda 表达式的 MethodInfo

c# - 如何在 Microsoft Graph 中使用 DI

asp.net - 在 asp.net Repeater 中添加多个新行

c# - 使用数据库而不是内存存储身份服务器 4

c# - ASP.NET MVC 多个开始形式?

javascript - 通过jquery清除浏览器保存的密码

c# - Microsoft.AspNetCore.Identity.UserManager :Warning: User validation failed: InvalidUserName;InvalidEmail

.net - 免注册COM可以应用于DLL吗?