38

我继承了一个非常大的 VS2012 网站项目(不是 Web 应用程序),并且正在尝试自动化它的部署。项目中有大量循环引用,因此要使用 aspnet_compiler.exe 对其进行预编译,我必须打开固定名称。问题在于它会导致在我的四核、16gb 内存、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 部署网站项目?

4

2 回答 2

57

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

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

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

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

的目的website.publishproj是方便命令行发布。.csproj/.vbproj它是您在使用 Web 应用程序项目时通常会得到的填充物。

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

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

您不必指定调用的目标。

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

于 2013-02-11T21:12:02.377 回答
1

虽然 Sayed Ibrahim Hashimi 的回答确实对我有所帮助,但这是我发现 VS2012 所必需的:

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

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

c:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "C:\...\UI.csproj" /p:DeployOnBuild=true /p:PublishProfile="C:\...\PublishProfiles\my_sample_PublishProfile_Foo.pubxml"  /p:VisualStudioVersion=11.0

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

于 2014-07-09T14:31:35.827 回答