如今已经是 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. linux与window的\r与\n

    应用程序 void niuniu(void) { char buf[16]; char *p[6]; int i; led_init(); uart_init(); while(1) { puts(& ...

  2. 值得推荐的10本PHP书籍(转)

    值得推荐的10本PHP书籍(转) 一.总结 一句话总结: 二.值得推荐的10本PHP书籍 本篇文章的目的是想较全面地推荐10本PHP书籍,暂不讨论Linux/NGINX/Mysql等其他丛书. 前言 ...

  3. oracle 11g安装过程中问题:移动bin\oralbac11.dll 到bin\oralbac11.dll.dbl出错

    解决方法: 直接找到oralbac11.dll.dbl这个文件,将其删除即可.   http://blog.sina.com.cn/s/blog_51beaf0e0101000v.html

  4. pahlcon:循环调度(Dispatch Loop)或跳转

    循环调度将会在分发器执行,直到没有action需要执行为止.在上面的例子中,只有一个action 被执行到.现在让我们来看下“forward”(转发)怎样才能在循环调度里提供一个更加复杂的操作流,从而 ...

  5. Python3 学习第十四弹: 模块学习六之re模块 + 正则表达式 (转)

    本文转自 AstralWind 的博客:Python正则表达式指南 特来收藏 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有 ...

  6. GPON介绍及华为OLT网关注册配置流程(转)

    原文地址:https://blog.csdn.net/zhouzxi/article/details/79244862 一.GPON介绍 1.GPON简介 随着技术的发展,光纤变得“便宜又好用”,因此 ...

  7. VirtualBox安装Redhat9.0

    1.准备软件 虚拟机:VirtualBox-4.3.8-92456-Win.exe RedHat:shrike-i386-disc1.iso     shrike-i386-disc2.iso     ...

  8. Spring的AOP介绍

    AOP:(Aspect-Orlented-Programming)面向切面编程,和面向对象是互相补充的.面向对象是横着编程,面向切面则是竖着编程. 1 2 3 4 @Before("exec ...

  9. .net 枚举(Enum)使用总结

    在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,性别只有男跟女等等.如果把这些量说明为整型.字符型或其它类型显然是不妥当的.为此,C#提供了一种称为“ ...

  10. python3之环境搭建以及基础语法

    早些时候,有一段时间吧,为了想免费下载网易云的收费音乐,也是翻了下python的教程的,语法方面没细致地去看,跟java.php.javascript这些都大同小异,也是面向对象的.那么,近期准备快速 ...