我继承了一个非常大的VS2012网站项目(不是Web应用程序),并试图使其部署自动化.项目中有大量的循环引用,因此要使其使用aspnet_compiler.exe进行预编译,我必须打开fixedname.问题是它导致在我的四核、16 GB内存、固态硬盘开发人员机器上进行构建需要大约20分钟.以前的开发人员不必处理这个问题,因为他只需将整个源代码复制到生产Web服务器即可.

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

  1. 生成引用的DLL并将其添加到项目中.
  2. 我喜欢网络.配置转换.
  3. 我甚至没有try 构建网站,而只是为我将其打包成zip文件.

我一生都搞不懂的是如何获得MSBuild.exe做同样的事!

MSBuild.exe WebProject.vs2012.sln /m /T:Build 
    /p:Configuration=Release`;DeployOnBuild=true`;PublishProfile=TestDeploy

上面的命令仍然试图执行aspnet_编译器,这不是我想要的.发布配置文件说它不应该被预编译...但在日志(log)中我看到它在执行它.

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

推荐答案

对于网站项目来说,发布过程并没有深入到构建过程中.对于网站项目,因为并没有正式的构建过程,所以我们并没有什么可以真正扩展的.

Note: the below contents requires to have VS 2012 (or VS2010 for that matter) and the 100 on top of that. The features were not included in the RTM drop of VS2012.

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

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

website.publishproj的目的是方便命令行发布.这是对.csproj/.vbproj的一种补充,在使用Web应用程序项目时通常会得到.csproj/.vbproj.

如果希望自动发布,可以使用如下命令.

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

您不必指定调用了哪些目标.

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

Asp.net相关问答推荐

检测 ASP.NET 中的内存泄漏

如何在 C# 中生成一个随机的 10 位数字?

ASP.NET Membership:如何将用户设置为已登录

ASP.NET 控件无法在 Visual Studio 2008 的代码隐藏中引用

由于缺少定义,在 .net Core 应用程序上构建失败

区分开发、登台和生产环境之间的 web.config

将复选框的值传递给 asp.net mvc4 中的控制器操作

__doPostBack 未定义

'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册.

MvcBuildViews true 与 ASP.NET MVC 2 中的实体框架

在每个控制器的 ASP.NET WebAPI 上强制使用 CamelCase

在使用网络服务器加载它们之前,如何编译 Asp.Net Aspx 页面?

ASP.Net:在共享/静态函数中使用 System.Web.UI.Control.ResolveUrl()

如何为角色以及特定用户使用自定义授权属性?

是否可以在 web.config 中添加响应 http 标头?

如何以编程方式将标签的前景色设置为其默认值?

如何在 ASP.NET Core Web API 中配置 JSON 格式的缩进

头标记中的内联代码 - ASP.NET

根据条件更改 GridView 行 colored颜色

在没有等待 #2 的情况下调用异步方法