如何使用命令行msbuild部署VS2012网站项目而不进行预编译?

Pau*_*mke 35 asp.net msbuild vs-web-site-project msdeploy visual-studio-2012

我继承了一个非常大的VS2012网站项目(不是Web应用程序),我正在尝试自动化它的部署.项目中有大量的循环引用,所以要使用aspnet_compiler.exe进行预编译我必须打开fixednames.问题是它导致我的四核,16gb ram,ssd开发者机器上的构建需要大约20分钟.之前的开发人员不必处理这个问题,因为他只是将整个源代码复制到生产Web服务器上.

所以在我解决循环引用问题之前,我想至少使用msdeploy自动部署项目.我可以使用visual studio中的发布配置文件,它完全符合我的要求:

  1. 构建引用的DLL并将它们添加到项目中.
  2. web.config是否会转换.
  3. 甚至没有尝试构建网站,只是为我打包成一个zip文件.

我无法弄清楚我的生活是如何让MSBuild.exe做同样的事情!

MSBuild.exe WebProject.vs2012.sln /m /T:Build 
    /p:Configuration=Release`;DeployOnBuild=true`;PublishProfile=TestDeploy
Run Code Online (Sandbox Code Playgroud)

上面的命令仍然尝试执行aspnet_compiler,这不是我想要的.发布配置文件说不应该预编译...但在日志中我看到它正在执行它.

那么:如何在不预编译的情况下使用msbuild部署网站项目?

Say*_*imi 54

对于网站项目,发布过程不会进入构建过程.对于网站项目,由于没有正式的构建过程,我们没有什么可以真正扩展.

注意:以下内容需要具有VS 2012(或VS2010)以及Azure SDK.这些功能未包含在VS2012的RTM中.

在VS中创建发布配置文件后,将创建以下内容:

  1. App_Data/PublishProfiles下的发布配置文件(.pubxml文件)
  2. A website.publishproj在网站的根目录中

这样做的目的website.publishproj是方便命令行发布.它是.csproj/.vbproj您在使用Web App Project时通常会获得的填充.

如果您想自动发布,可以使用如下命令.

msbuild.exe website.publishproj /p:DeployOnBuild=true 
   /p:PublishProfile=<profile-name-no-extension> /p:VisualStudioVersion=11.0
Run Code Online (Sandbox Code Playgroud)

您不必指定调用的目标.

关于VS中的消息,该网站正在预编译,这是一个错误.它运行预编译,但发布使用配置文件中的设置.应该已在Visual Studio Update 1中修复该错误.安装完成后,您不应该看到不必要的预编译步骤.如果您仍然看到,请告诉我.

  • 我看了一遍.没有为我的项目创建website.publishproj.我有VS2012的Update2,其中包括Azure SDK.我有一个命令行问题,从TeamCity构建服务器发布我的项目. (6认同)
  • 这仅适用于在计算机上安装visual studio的情况 (2认同)