如今已经是 VS2017 横行的时代,而据我所知,大部分人还停留在使用 VS2015 VS2013 或更低的版本,主要是因为他们参与的项目基本使用这几个VS的版本开发的。眼红VS2017却不敢升级,主要还是害怕升级后出现的坑。哈哈,没关系,今天我就跟你们分享一下VS的原理。

首先,认识一下几个关键词:Framework 版本,MSBuild,Visual Studio

  • Visual Studio:每个人都需要用到,是目前来说宇宙第一的代码编辑器。目前最新的版本是 VS2017。其实从图标上,我们就可以大致了解到,从 VS2012 开始到现在,内核应该都是差不多的了,也就是说,你可以直接使用这几个版本的 VS 来打开解决方案,当然代码会不会报错你还得知道下面这个东西。
  • MSBuild:简单来说,这就是用来编译你的项目的,也就是所谓的编译器。如果没有 VS,我们就需要使用命令行来指定需要编译的项目,但我们使用的 VS 帮我们做了这件事;而 VS 的每一个版本,都有不同版本的 MSBuild,也就是说,MSBuild 的版本越高,支持的C#语法的版本越高。
  • Framework 版本:这个大家还是比较熟悉的,其实也就是* .NET 的运行环境*,每一个程序集都有一个最低运行环境,高版本兼容低版本这个道理我就不说了。

简单的概括一下,一套程序的 dll 能不能跑起来,由 Framework 版本决定。和 VS MSBuild 一点关系都没有。举个例子,你现在开发的是 MVC5,但你服务器只装了 Framework 4.0,而 MVC5 最低支持的 Framework 版本是 4.5,那自然就运行不起来啦。

因此:
* 能不能有更强的智能感知IDE 是 VS 的事情;
* 能不能编译,包括C#相应版本的语法,是 MSBuild 干的事情;
* 能不能在指定最小的环境运行,是 Framework 版本的事情;

如果我拿到一个旧项目,比如说是 VS2013 开发的,但你电脑里没有 VS2013,这个时候你需要做什么?
  1. 安装比该项目使用的VS更高或一样版本的 VS,有了则忽略。这么做的目的其实就是需要安装相应的MSBuild 的版本。当然,如果你很牛逼,只下一个 MSBuild 然后完全用命令行来编译也是可以的,你用记事本写代码都行;
  2. 使用VS打开这个项目以后,检查该项目的 Framework 版本;当然,你觉得版本低了,自己安一个高版本的,然后切换就行了,不过你得确保你服务器的 Framework 版本也得跟着升级,不然部署完了运行不起来,那可就抓瞎了哈。
  3. 当 Framework 版本升级好了,你就可以直接升级相应的程序集了,比如从 MVC4 -> MVC5,只不过需要手动配置某些细节,请看另一篇相关文章。
  4. 都差不多了,就编译试试看吧。如果有发现报错的地方是某些不认识的语法,那说明这个项目的 MSBuild 版本比你现在的 VS 所带的 MSBuild 版本高,那就果断升级吧,反正用最高版本的 VS 不会有问题就对可。

    总结

    当你知道这些原理以后,你根本就不需要害怕。当我看着那些人使用着旧版本的 VS 造成了工作效率低下而加班,再看看自己使用最新版本的 VS,无论是 IDE 还是编译速度都是上上等的,天天按时下班还能把活做完的高效率,试想一下自己是多么的牛逼,哈哈!!

转自:细说VS MSBuild 和 Framework 的区别

细说VS MSBuild 和 Framework 的区别的更多相关文章

  1. .a与.framework的区别

    库是共享程序代码的方式,一般分为静态库和动态库. 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. iOS中静态库形式: .a和.framework 动态库:链接时不复制,程序运行 ...

  2. 细说ORM之Entity FrameWork系列(被替换)

    一. 谈情怀 从第一次接触开发到现在(2018年),接近五年时间了,最初阶段连接数据库,使用的是[SQL语句+ADO.NET],那时候,什么存储过程.什么事务 统统不理解,生硬的将SQL语句传入SQL ...

  3. 【ASP.NET Core MVC 入门须知】Net Core和Net Framework 的区别

     1.简单介绍 从上面图中我们可以看到.net  主要分为三个部分 .net FrameWork,.net Core ,Xamarin XAMARIN  主要用来构建APP的主要用的是C#语言 .NE ...

  4. [转]MSBuild Target Framework and Target Platform

    本文转自;https://msdn.microsoft.com/en-us/library/hh264221.aspx A project can be built to run on a targe ...

  5. c#、.net、asp.net、asp 、ado.net、.net framework的区别

    c#:一种编程语言 .net:一种运行环境 asp.net:基于.netFramework框架下的一种开发技术(相对与asp而言,引入了服务器控件,前后台可分,编译型的编程框架) asp:也是.net ...

  6. 细说setTimeout/setImmediate/process.nextTick的区别

    node.js中的非IO的异步API提供了四种方法,分别为setTimeOut(),setInterval(),setImmediate()以及process.nextTick(),四种方法实现原理相 ...

  7. .Net Framework Client Profile 和 .Net Framework的区别[转]

    原文链接 VS2010默认是以.Net Framework Client Profile为生成环境的,如果需要更多的功能,应该调用.Net Framework.

  8. ADO.Net和Entity Framework的区别联系

    它们有以下几点区别:1,ADO.Net是开发人员自己select.update等写sql语句,来实现对数据库的增删改查等操作:采用EF进行开发操作数据库的时候,只需要操作对象,这样做使开发更方便,此时 ...

  9. 架构(Architecture)和框架(Framework)杂谈

    1. 架构和框架的设计层次不同       类似于硬件设计,软件设计也分为不同的层次.典型的软件设计层次如下图:        在这个图中我们可以看到,Framework处于Micro-archite ...

随机推荐

  1. SSH密钥登陆免密码方法

    原帖地址:http://ask.apelearn.com/question/798 用Putty实现A机器远程登陆B机器,具体实现请看链接:http://www.cnblogs.com/ImJerry ...

  2. CSS元素隐藏的11种方法

    { display: none; /* 不占据空间,无法点击 */ } { visibility: hidden; /* 占据空间,无法点击 */ } { position: absolute; cl ...

  3. 奇怪的表达式求值 (java实现)

    题目参考:http://blog.csdn.net/fuxuemingzhu/article/details/68484749 问题描述; 题目描述: 常规的表达式求值,我们都会根据计算的优先级来计算 ...

  4. 几款必备LINUX的命令行神器

    Dstat & sar iostat, vmstat, ifstat 三合一的工具,用来查看系统性能(我在<性能调优攻略>中提到过那三个xxstat工具). 官方网站:http:/ ...

  5. js排序算法05——快速排序

    终于到了传说中的快速排序算法了,快速排序的思想和归并排序一样,都是采用分治思想,不同之处在于归并每次将数组一分为二,最后将小的数组进行比较,合并为大数组.快排是每次找一个主元,也就是基准数,按照这个基 ...

  6. yyyy-MM-dd EEE hh:mm:ss(日期转换)

    <script> /** * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q) ...

  7. 【http】HTTP请求方法 之 OPTIONS

    OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项.通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务 ...

  8. ubuntu下编译neovim

    # 安装编译依赖 sudo apt-get install libtool libtool-bin autoconf automake cmake g++ pkg-config unzip -y # ...

  9. java中a++和++a的区别详解

    java中的++操作无论在前还是在后,都是在变量自身的值加1,接下来将具体描述两者的区别 int a =5; int b =a++; System.out.println(b); 1.通俗易懂的理解是 ...

  10. SQL映射文件

     SQL映射文件的几个顶级元素 mapper - namespace cache - 配置给定命名空间的缓存 cache-ref – 从其他命名空间引用缓存配置 resultMap –用来描述数据库结 ...