ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

温馨提示:本文杂而乱,最终不知所云。

Visual Studio 2015 RTM已经于2015年7月20号正式发布,我也在第一时间下载安装了起来。

虽然在5月份就开始使用RC版本,但是还是很期待正式版能带来一些新的功能和稳定性。

喜欢尝鲜的我免不了要折腾一下ASP.NET5,学习一下MVC6,当时的稳定版本是Beta5。

随便建一个MVC6项目感受了一下,很喜欢这种新的项目结构,唯一觉得不爽的就是发布的时候没有了FTP这一项,不知道以后会不会改进。

后来又试着把框架升级到当时还非稳定的Beta6,由于Beta5→Beta6有一些“重大改变”,所以需要修改几处代码,几经折腾总算胜利升级,过程中对DNVN,DNX,DNU等有了更直观的认识,也算没有瞎折腾。

好了,扯了半天还没扯到正题上来。

话说这后来几天忙着升级Windows10,待尘埃落定,看着新装好的WIN10+VS2015心情大好,准备再去研究一下ASP.NET5。

此时Beta6稳定版已如期发布,这是ASP.NET5的发布路线图:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

使用稳定版显然不是我的风格,于是就像之前升beta6一样如法炮制把DNX以及各依赖模块升级到最新的Beta7。

然而这次却出现了一些奇怪的问题:

1.首先是项目内容里的引用模块列表直接没有了……

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

2.在项目属性里,“调试”这一项里的内容全部空白了……(+﹏+)~

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

3.各种不对劲,重新打开解决方案,重启VS都没有用,尝试编译项目出现如下错误:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

请忽略里面的奇怪字符-_-。

具体错误就是:System.IO.FileNotFoundException : Microsoft.DNX.PackageManager啥的。

怎么会找不到文件呢,runtimes好好的躺着它该待的地方呢。

实在摸不着头脑,只好去GitHub上找找看有没有人提这个问题。果然看到这么一个Issues ,说的就是这个问题。

大概意思就是说DNX的一些程序集改名了,但是VS2015RTM没有做相应的修改,导致无法找到正确的路径什么什么的。

需要等Web Tools更新才能解决,然后给了一个临时的解决办法,就是添加一个系统环境变量:WEBPROJ_ENABLEBETA7RENAMES,值设置为0,就可以了。

我试了一下,果然奏效。

没过几天,Github上面又发一篇公告:Breaking DNX renames ,这次具体说了DNX的一些改名情况,如图:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

个人感觉新名字确实好看多了\(^o^)/ 。

同时公告也说了怎么适应这个更改,首先就是安装那个Web Tools的更新,他们给放在ASP.NET5的首页上了:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

就是这个 ASP.NET 5 preview(Beta6)。

这个需要说一下,点进去下载会看到挺多内容,大部分是语言包,按官方说明是要按需下载并按顺序安装:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

首先是DotNetVersionManager-x64.msi(或x68),其实就是DNVM,你机器上的版本可能比这个还新,所以这个不装也行。

然后装那个最大的,WebToolsExtensionsVS14.msi,209M的本体,装起来吭哧吭哧还挺慢的。

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题 ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

最后根据需要下载一个语言包装上就行了,可是我没感到有什么卵用。

装过之后的前后对比:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

可以看到ASP.NET and Web Tools的版本号已变,名字居然也变纯英文了,所以我很怀疑我刚才装的“语言包”有什么卵用。

* 如果之前设置了那个环境变量,需删之。

最后需要把DNX更新到最最新的版本,其实我经常会去myget.org看新的版本号(可能是病),你也可以去看看:aspnet vnext (小心传染)。

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

aspnet master 这个页面只提供稳定版不同,vnext提供的是各个程序集目前最新的开发版本,目前最新的开发版本是v1.0.0-beta7-12290。

同时这个页面上提供的NuGet feed Url:https://www.myget.org/F/aspnetvnext/ 是我们需要用到的。

打开VS2015,从工具→NuGet程序包管理器→程序包管理器控制台,打开Nuget控制台,如图:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

可以看到程序包源:nuget.org ,默认只有这一个源,点右边的齿轮可以设置更多源。

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

很简单,在这个设置页面,按上面绿色的加号,把刚才上面提到的那个Feed Url加进去,名字随便起。

这样才能确保DNU在还原程序包的时候,能够找到我们所需要的最新版本的各个程序集,否则只能找到beta6的稳定版。

回到Nuget控制台,这里可以使用dnvm命令去升级DNX,可惜在这个控制台里不怎么好用,很多提示信息不会出来,不知道为什么,而且也不如果彩色的Power Shell酷炫。

所以我们干脆去外面打开Power Shell干活,记得用管理员身份执行:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

你第一次在PS里执行DNVM,应该会遇到错误提示"xxxxxxxxx,因为在此系统中禁止执行脚本,xxxxxxxx"什么的,这个问题很好解决,

执行一下:set-ExecutionPolicy RemoteSigned ,选 a [all] ,就可以了,见:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

关于DNVM的用法,就那么几个指令,这里不再赘述了,咱们赶紧把DNX更新好结束吧,现在越写越跑偏了。

Dnvm upgrade 指令可以更新最新的“稳定版”,比如现在的beta6,我们想要最新的开发版,就需要执行 dnvm upgrade -unstable ,这样就开始下载最新的DNX beta7了。

同时我们也需要64位的DNX,则再加一个参数: dnvm upgrade -unstable -arch x64  ,这样下载的就是非稳定的最新版的64位DNX:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

稍等片刻就下好了,执行dnvm list可以看到现在机器里所有的DNX版本:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

回到VS我们的项目里面,修改几处:

1,项目属性里,选择正确的DNX版本:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

此处更改会直接体现到global.json配置文件中。

另外Properties\launchSettings.json也应该对应修改一下:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

最后记得把project.json里的依赖项版本改成最新的,我是直接用*号了,因为我总升级DNX。

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

至此,BETA7就可以正常使用在VS中了,看看这令人愉悦的(正在还原……)和最新的程序集们o(∩_∩)o 哈哈:

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

ASP.NET5,MVC 6,Beta 7与VS 2015 RTM的兼容问题

The End

上一篇:从ASP.NET 升级到ASP.NET5(RC1) - 翻译


下一篇:ASP.NET 5 入门 (2) – 自定义配置