公司最近尝试使用亚马逊的EC2服务,需要我在EC2上进行测试环境的搭建,基本上就是利用CCNET进行系统构建,首先利用Git的ssh协议从BitBucket获取源代码(恶心的其他国家,还我BitBucket!!!),然后利用MSBuild进行编译并且以文件系统方式发布到一个特定文件夹中。
本来以为是个很简单的事情,可是真正执行MSBuild的时候,总是报错,缺少targets什么的。原来,免得了安装Visual Studio 2012 Express,免不了安装Visual Studio 2012 Shell:
1. Microsoft Visual Studio 2012 Shell (Isolated) Redistributable Package
2. Microsoft Visual Studio 2012 Shell (Integrated) Redistributable Package
先装1,再装2。
然后就可以运行以下MSBuild命令来编译和部署Web应用程序了:
MSBuild mysolution.sln /p:configuration=release /p:DeployOnBuild=true /p:PublishProfile=myPublishProfile.pubxml
其中,PublishProfile参数源自:
即在ASP.NET MVC项目文件上点右键,然后选择Publish,然后选择需要的选项,最后生成Publish Profiles。
不出意外的话,MSBuild会编译成功。但是,编译的结果并没有根据Publish Profile的设置发布到指定目录…… 这是什么情况??
(此处省略开着代理科学上网用Google搜索的心酸、迷惘、无助与困惑数百字,以及对其他国家派对的愤怒数千字)
原来,虽然安装了Visual Studio Shell之后解决了targets问题,但是并没有解决全部的targets问题,还有一组targets需要存在。那就是如下面截图所示的Web文件夹里的东西。
把Web文件夹复制到服务器上相同的位置里,再次运行MSBuild,编译后的Web应用程序就会部署到指定位置了。
最后,再加一个备注,如果编译的是一个项目文件(e.g. .csproj)而非解决方案文件,那么MSBuild需要再增加一个参数 /p:VisualStudioVersion=11.0. 如果编译的是Visual Studio 2012创建的解决方案文件的话,就不用加这个参数了。