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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用命令行msbuild部署VS2012网站项目而不进行预编译?相关的知识,希望对你有一定的参考价值。

我继承了一个非常大的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

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

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

答案

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

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

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

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

website.publishproj的目的是促进命令行发布。它是.csproj/.vbproj的填充,您在使用Web App项目时通常会得到它。

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

msbuild.exe website.publishproj /p:DeployOnBuild=true 
   /p:PublishProfile=<profile-name-no-extension> /p:VisualStudioVersion=11.0

您不必指定调用的目标。

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

另一答案

虽然Sayed Ibrahim Hashimi的回答对我有所帮助,但我发现这是VS2012的必要条件:

安装Azure SDK后,我创建了一个文件发布配置文件,它在我项目的PublishProfiles文件夹中创建了一个Properties文件夹。在这个新文件夹中,创建了两个名为my_sample_PublishProfile_Foo.pubxmlmy_sample_PublishProfile_Foo.pubxml.user的xml文件。

使用.pubxml,我可以像这样使用msbuild发布:

c:WindowsMicrosoft.NETFrameworkv4.0.30319msbuild.exe "C:...UI.csproj" /p:DeployOnBuild=true /p:PublishProfile="C:...PublishProfilesmy_sample_PublishProfile_Foo.pubxml"  /p:VisualStudioVersion=11.0

请记住使用管理员权限运行包含此脚本的批处理文件。

以上是关于如何使用命令行msbuild部署VS2012网站项目而不进行预编译?的主要内容,如果未能解决你的问题,请参考以下文章

msbuild 命令行尚不支持 WebPublishMethod(FileSystem)

从命令行复制 VS2008“发布网站”

如何使用 MSBuild 构建具有 VS2010 配置的 VS2015 解决方案?

使用 MSBuild 从 Visual Studio 2013 命令行发布 Clickonce 找不到 SignTool.exe

是否可以在未安装 VS 的情况下从 MSBuild 命令行运行 FxCop 代码分析?

在 VS2010 中或通过 MsBuild 命令行编译解决方案时生成的代码不同