• 在未安装Visual Studio 2012的服务器上使用MSBuild以文件系统方式发布ASP.NET MVC系统


    公司最近尝试使用亚马逊的EC2服务,需要我在EC2上进行测试环境的搭建,基本上就是利用CCNET进行系统构建,首先利用Git的ssh协议从BitBucket获取源代码(恶心的其他国家,还我BitBucket!!!),然后利用MSBuild进行编译并且以文件系统方式发布到一个特定文件夹中。

    本来以为是个很简单的事情,可是真正执行MSBuild的时候,总是报错,缺少targets什么的。原来,免得了安装Visual Studio 2012 Express,免不了安装Visual Studio 2012 Shell:

    1. Microsoft Visual Studio 2012 Shell (Isolated) Redistributable Package

    2. Microsoft Visual Studio 2012 Shell (Integrated) Redistributable Package

    先装1,再装2。

    然后就可以运行以下MSBuild命令来编译和部署Web应用程序了:

    MSBuild mysolution.sln /p:configuration=release /p:DeployOnBuild=true /p:PublishProfile=myPublishProfile.pubxml

    其中,PublishProfile参数源自:

    即在ASP.NET MVC项目文件上点右键,然后选择Publish,然后选择需要的选项,最后生成Publish Profiles。

    不出意外的话,MSBuild会编译成功。但是,编译的结果并没有根据Publish Profile的设置发布到指定目录…… 这是什么情况??

    (此处省略开着代理科学上网用Google搜索的心酸、迷惘、无助与困惑数百字,以及对其他国家派对的愤怒数千字)

    原来,虽然安装了Visual Studio Shell之后解决了targets问题,但是并没有解决全部的targets问题,还有一组targets需要存在。那就是如下面截图所示的Web文件夹里的东西。

    把Web文件夹复制到服务器上相同的位置里,再次运行MSBuild,编译后的Web应用程序就会部署到指定位置了。

    最后,再加一个备注,如果编译的是一个项目文件(e.g. .csproj)而非解决方案文件,那么MSBuild需要再增加一个参数 /p:VisualStudioVersion=11.0. 如果编译的是Visual Studio 2012创建的解决方案文件的话,就不用加这个参数了。


    理解的越多,需要记忆的就越少
  • 相关阅读:
    ASP.NET MVC之从控制器传递数据到视图
    ASP.NET MVC之从视图传递数据到控制器
    JQuery和ASP.NET之间的传值
    ASP.NET前台html页面AJAX提交数据后台ashx页面接收数据
    Variadic Templates 可变参数模板
    C++类型转换
    C++优化string,实现写时拷贝
    C++实现一个线程安全的单例模式
    C++ 实现简单的string
    C++实现简单的线程安全队列
  • 原文地址:https://www.cnblogs.com/Ricky81317/p/3116269.html
Copyright © 2020-2023  润新知