细说VS MSBuild 和 Framework 的区别
如今已经是 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,这个时候你需要做什么?
- 安装比该项目使用的VS更高或一样版本的 VS,有了则忽略。这么做的目的其实就是需要安装相应的MSBuild 的版本。当然,如果你很牛逼,只下一个 MSBuild 然后完全用命令行来编译也是可以的,你用记事本写代码都行;
- 使用VS打开这个项目以后,检查该项目的 Framework 版本;当然,你觉得版本低了,自己安一个高版本的,然后切换就行了,不过你得确保你服务器的 Framework 版本也得跟着升级,不然部署完了运行不起来,那可就抓瞎了哈。
- 当 Framework 版本升级好了,你就可以直接升级相应的程序集了,比如从 MVC4 -> MVC5,只不过需要手动配置某些细节,请看另一篇相关文章。
都差不多了,就编译试试看吧。如果有发现报错的地方是某些不认识的语法,那说明这个项目的 MSBuild 版本比你现在的 VS 所带的 MSBuild 版本高,那就果断升级吧,反正用最高版本的 VS 不会有问题就对可。
总结
当你知道这些原理以后,你根本就不需要害怕。当我看着那些人使用着旧版本的 VS 造成了工作效率低下而加班,再看看自己使用最新版本的 VS,无论是 IDE 还是编译速度都是上上等的,天天按时下班还能把活做完的高效率,试想一下自己是多么的牛逼,哈哈!!
转自:细说VS MSBuild 和 Framework 的区别
细说VS MSBuild 和 Framework 的区别的更多相关文章
- .a与.framework的区别
库是共享程序代码的方式,一般分为静态库和动态库. 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. iOS中静态库形式: .a和.framework 动态库:链接时不复制,程序运行 ...
- 细说ORM之Entity FrameWork系列(被替换)
一. 谈情怀 从第一次接触开发到现在(2018年),接近五年时间了,最初阶段连接数据库,使用的是[SQL语句+ADO.NET],那时候,什么存储过程.什么事务 统统不理解,生硬的将SQL语句传入SQL ...
- 【ASP.NET Core MVC 入门须知】Net Core和Net Framework 的区别
1.简单介绍 从上面图中我们可以看到.net 主要分为三个部分 .net FrameWork,.net Core ,Xamarin XAMARIN 主要用来构建APP的主要用的是C#语言 .NE ...
- [转]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 ...
- c#、.net、asp.net、asp 、ado.net、.net framework的区别
c#:一种编程语言 .net:一种运行环境 asp.net:基于.netFramework框架下的一种开发技术(相对与asp而言,引入了服务器控件,前后台可分,编译型的编程框架) asp:也是.net ...
- 细说setTimeout/setImmediate/process.nextTick的区别
node.js中的非IO的异步API提供了四种方法,分别为setTimeOut(),setInterval(),setImmediate()以及process.nextTick(),四种方法实现原理相 ...
- .Net Framework Client Profile 和 .Net Framework的区别[转]
原文链接 VS2010默认是以.Net Framework Client Profile为生成环境的,如果需要更多的功能,应该调用.Net Framework.
- ADO.Net和Entity Framework的区别联系
它们有以下几点区别:1,ADO.Net是开发人员自己select.update等写sql语句,来实现对数据库的增删改查等操作:采用EF进行开发操作数据库的时候,只需要操作对象,这样做使开发更方便,此时 ...
- 架构(Architecture)和框架(Framework)杂谈
1. 架构和框架的设计层次不同 类似于硬件设计,软件设计也分为不同的层次.典型的软件设计层次如下图: 在这个图中我们可以看到,Framework处于Micro-archite ...
随机推荐
- javaScript实现点击按钮直接打印
很多网站都有此功能,当浏览到底部时都会有一个打印按钮,点击打印按钮就可以完成打印功能,功能非常不错,人性化,代码非常的简单. 一.只要调用window.print()函数就可以实现打印当前页面 < ...
- [Vue]使用axios实现ajax请求
1.定义myAjax export const myAjax=function createHttpClient(ajaxConfig) { let httpClient = null; if ...
- 理解JAVA MQ消息中间件
MQ的几种消息传递方式 发布订阅模式 发布订阅模式有点类似于我们日常生活中订阅报纸.每年到年尾的时候,邮局就会发一本报纸集合让我们来选择订阅哪一个.在这个表里头列了所有出版发行的报纸,那么对于我们每一 ...
- Python读取指定文件夹(包括当前目录、子目录、子文件)
http://blog.csdn.net/lsq2902101015/article/details/51305825
- centos 7网速监控脚本
#!/bin/bashif [ $# -ne 1 ];thendev="eth0"elsedev=$1fi while :doRX1=`/sbin/ifconfig $dev |a ...
- 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)
http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...
- android面试准备一之Activity相关
1.Activity生命周期 1.1 Activity的4种状态 running/paused/stopped/killed running:当前Activity正处于运行状态,指的是当前Ac ...
- iOS-不用微信SDK唤起微信支付
作者:TianBai 原文链接:http://www.jianshu.com/p/8930b4496023 要想知道微信SDK是如何调起微信客户端,那么咱们先看看微信SDK到底做了什么 前期准备 接入 ...
- 【hive】关于浮点数比较的问题
当在hive中写下浮点数(例如:0.2) hive会把浮点数(0.2)存储为double类型 但是系统中并不能精准表示0.2这个浮点数 正确的浮点数表示 float 0.2 —> 0.200 ...
- Maven入门-2.Maven一些核心概念介绍
1.Maven仓库2.Maven坐标3.Maven插件和目标4.Maven生命周期4.1 clean:清理项目4.2 default:构建项目(重要)4.3 site:建立项目站点 1.Maven仓库 ...