使用MSBuild,我如何从命令行构建一个MVC4解决方案(在过程中应用Web.config变换),并输出到一个文件夹?

11
我认为问题标题已经说得很清楚了,但是为了清晰起见,我正在尝试:
  1. 使用命令行(MSBuild)构建VS2010 ASP.NET MVC4解决方案,指定解决方案配置(例如Release)
  2. 在此过程中应用该配置的任何Web.config转换
  3. 将结果输出到本地机器上的文件夹中(没有IIS、代理、压缩文件、FTP、软件包等,只有一个文件夹,其中包含运行该网站所需的所有文件)
我已经尝试了近一个星期来解决这个问题,通过微软文档(非常不实用)、其他 SO 上的答案和一般的谷歌搜索。我不知道是我太蠢(这完全有可能)还是 MSBuild/MSDeploy 真的像目前看起来那样神秘。有没有合理简单的方法可以实现这一点?拜托了!

微软文档大多数时候都是过度杀伤力的。我一直在阅读有关msbuild、msdeploy和iis的文档。到目前为止,我的经验就像一只追逐自己尾巴的狗。 - OK999
1个回答

44

如果您正在运行VS2010:请确保安装了Azure 1.7+ SDK(即使您不发布到Azure,它也会向VS2010添加VS2012发布功能)

VS2012+已经内置了这些功能

msbuild ProjectFile.csproj /p:Configuration=Release ^
                           /p:Platform=AnyCPU ^
                           /t:WebPublish ^
                           /p:WebPublishMethod=FileSystem ^
                           /p:DeleteExistingFiles=True ^
                           /p:publishUrl=c:\output

如果你正在构建解决方案文件:

msbuild Solution.sln /p:Configuration=Release ^ 
                     /p:DeployOnBuild=True ^
                     /p:DeployDefaultTarget=WebPublish ^
                     /p:WebPublishMethod=FileSystem ^
                     /p:DeleteExistingFiles=True ^
                     /p:publishUrl=c:\output

无论如何,你也可以设置 /p:PrecompileBeforePublish=true,输出的结果将是网站的预编译版本。
安装了Azure SDK之后,通常会创建一个发布配置文件,并简单地使用/p:PublishProfile=DeployToFolder,但如果你对新的发布工具不感兴趣,我已经给出了手动命令行。

4
太棒了,Richard!非常感谢!我已经为此苦苦挣扎了很长时间。我稍微编辑了一下你的答案,以包括“Configuration”选项,这是我的问题的一部分,但由于空间不足未包含在标题中。我已经在编辑后测试了两种方法,一切都完美运行。 - Mark Bell
2
顺便说一下,我确实已经安装了Azure SDK,但为了正确将其与VS2010集成,我首先必须使用Web平台安装程序安装“Windows Azure SDK for .NET(VS2010 SP1)1.8.1- February 2013”包。 - Mark Bell
很高兴能够帮忙,对于 SDK 的 2010 版本提出了很好的观点。 - Richard Szalay
嗨@RichardSzalay,我们的构建服务器上只有VS2013,没有其他东西。为了使上述MSBuild命令起作用,我们是否还需要安装其他东西,例如“Web部署项目”或“Web部署工具”?谢谢 :) - Richard
你不应该需要安装任何东西。但更重要的问题是:当你尝试时发生了什么? - Richard Szalay
我遇到了一个错误,大概是说“无效的开关:WebPublish”(我包含了/t:),所以我想也许需要安装一些MSBuild扩展。通过在VS2013中为我的项目添加发布配置文件,然后将这些选项添加到我的MSBuild任务中,我使它工作了(使用Bamboo调用MSBuild):/p:Configuration=UAT;VisualStudioVersion=12.0;DeployOnBuild=true;PublishProfile=PublishUAT。PublishUAT对应于我的Web项目中的PublishUAT.pubxml文件。与你的有点不同,但它似乎可以完成我需要的所有事情,包括配置转换。感谢你快速回复。 - Richard

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