我继承了一个非常大的VS2012网站项目(而不是Web应用程序),我试图自动化它的部署。在项目中有吨的循环引用,以便得到它预编译使用aspnet_compiler.exe我必须打开固定的名称。问题是,它导致构建在我的四核,16gb ram,ssd开发人员机器大约需要20分钟。以前的开发人员不必处理这个,因为他只需将整个源复制到生产Web服务器。
所以在我处理循环引用问题我想至少自动部署项目使用msdeploy。我可以使用在visual studio中的发布配置文件,它的确是我想要的:
>构建引用的DLL并将它们添加到项目中。
> web.config转换。
>甚至没有尝试构建网站,而只是打包成一个zip文件为我。
我无法弄清楚我的生活是如何让MSBuild.exe做同样的事情!
MSBuild.exe WebProject.vs2012.sln /m /T:Build /p:Configuration=Release`;DeployOnBuild=true`;PublishProfile=TestDeploy
上面的命令仍然尝试执行aspnet_compiler这不是我想要的。发布配置文件说,它不应该被预编译…但在日志中,我看到它执行它。
所以:如何使用msbuild部署一个网站项目而不预先编译?
解决方法
对于网站项目,发布过程不会直接进入构建过程。对于网站项目,因为没有正式的构建过程,我们没有什么可以真正扩展。
注意:以下内容需要有VS 2012(或VS2010为此)和Azure SDK之上。这些特性不包括在VS2012的RTM下降中。
> App_Data / PublishProfiles下的发布配置文件(.pubxml文件)
>网站根目录下的website.publishproj
website.publishproj的目的是方便命令行发布。它是.csproj / .vbproj的一个填充,你通常在使用Web应用程序项目时会得到。
如果要自动发布,可以使用如下命令。
msbuild.exe website.publishproj /p:DeployOnBuild=true /p:PublishProfile=<profile-name-no-extension> /p:VisualStudioVersion=11.0
您不必指定调用的目标。
关于VS中的消息,网站正在预编译,这是一个错误。它通过预编译运行,但发布使用配置文件中的设置。这个bug应该在Visual Studio Update 1修复。安装后,你不应该看到不必要的预编译步骤。请让我知道,如果你仍然看到。