升级 Visual Studio 2015 CTP 5 的坑、坑、坑
前两天,微软发布了 Visual Studio 2015 CTP 5,全称为 Visual Studio 2015 Community Technology Preview 5,意为社区技术预览版,之前的版本为:Visual Studio 2015 Preview,多了一个 CTP,虽然都为预览版,但这次 CTP 的版本发布,显然离 VS2015 的正式版本发布已经不远了。
先贴一个重要链接:Visual Studio 2015 CTP 5 更新说明
上面的文章中详细说明了 VS2015 各个版本更新内容,除了 VS2015 IDE 的发布,微软还发布了 ASP.NET 5 Beta2,信息量很大。
吐槽开始
前天的时候,根据上面文章中的链接地址,然后我就迫不及待的下载了,但下载之后发现是这个玩意:vs14.ctp_pro_enu.iso(4.38G),我当时没怎么注意,下载之后看一下名字为 VS14,VS14 不是早就更名为 VS2015 了吗?后面还有一个 Pro(可以理解为专业版),当时有很强烈的预感,我下错了,果然,在安装的时候就报错了,说是已经安装了什么的,具体不记得详细信息了,然后我就回过头去找下载链接(已经过去了好几个小时),确定就是这个版本的下载链接,难道是微软的编辑把下载的链接地址搞错了?后来去 MSDN 搜 VS2015 CTP 版本的下载地址,但是搜了好久,也没找到,再后来就不了了之了。
奇怪的是,昨天的时候,无意间再去点击 VS2015 CTP 版本说明的那篇文章,发现居然更新了东西,然后多了下面的下载内容:
我很确定的是,前天的时候我并没有看到这个下载说明,当时下载 vs14.ctp_pro_enu.iso 的时候,是在版本说明中找到的下载链接,然后点击上面的 Microsoft Visual Studio Ultimate 2015 CTP iso 下载地址,看到了下载内容名称:vs2015.ctp_ult_enu.iso(4.81G),虽然又是四个多G,但看名字知道这次有谱了,心里总算踏实了,又是几个小时过去了。。。
终于下载好了,下面开始安装:
又是几个小时过去了。。。
在安装过程中有一次报错问题,当时没来得及截图,重新安装就好了,好在 VS2015 可以记忆安装状态,重新安装的话,可以接着之前的进行安装,不需要重复安装了,节约了很多的时间,安装成功:
先说一下几个变化,首先看一张图:
如果你之前用过 VS2015 Preview 版本的话,应该会感觉有所不同,对,没错,.NET Framework 版本没有了 4.5.3,增加了 .NET Framework 4.6,然后模版中的 ASP.NET Web Application 去掉了 vNext 的标签,现在只有 ASP.NET 5 Class Library 和 ASP.NET 5 Console Application 还保留着,创建 ASP.NET Web Application 项目,之后的 Web 选择项和之前的 VS2015 Preview 版本一样,然后选择 ASP.NET 5 Starter Web 选项进行创建。
在 ASP.NET 5 Beta2 更新说明 中(也就那几个),最重要的就是 ASP.NET 5 项目(包含 Web、Class Library 和 Console Application)可以引用非 ASP.NET 5 类库项目,说明:
Now, you can add a reference to a standard C# project.
(In previous releases, the Add Reference dialog only supported referencing other ASP.NET 5 projects.)
这对开发者非常重要,虽然知道微软早晚会兼容,但 Preview 版本用于生产环境显然是不行的,这次 CTP 版本是可以进行尝试了,之前曾放弃 ASP.NET 5,很大一部分原因就是不能引用非 ASP.NET 5 类库项目,那有人会说,你不能用 ASP.NET 5 Class Library 吗?当然普通场景下是可以的,但 ASP.NET 5 Class Library 有个问题就是不能添加服务引用,比如你调用 WCF,这个在 ASP.NET 5 Class Library 项目中就不能实现,现在他们之间的类库可以引用,那就可以进行实现了,服务引用用非 ASP.NET 5 类库项目,然后再在 ASP.NET 5 Class Library 项目中进行引用它。
引用示意图:
ClassLibrary1 为 ASP.NET 5 Class Library 项目,ClassLibrary2 为非 ASP.NET 5 Class Library 项目,需要注意的是 ClassLibrary2 不能引用 ClassLibrary1,另外,VS2015 CTP 版本中的 References 下面的图标好像也变化了,ClassLibrary1 的 project.json 配置:
{
"version": "1.0.0-*",
"dependencies": {
},
"frameworks": {
"aspnet50": {
"dependencies": {
"ClassLibrary2": "1.0.0-*"
}
},
"aspnetcore50": {
"dependencies": {
"System.Runtime": "4.0.20-beta-22416"
}
}
}
}
需要注意的是,之前我们在 ASP.NET 5 Class Library 项目中添加引用项,都是在 dependencies 节点中进行添加的,而添加非 ASP.NET 5 Class Library 项目的引用项,是在 frameworks 节点下的 dependencies 进行添加。
说到这,发现 VS2015 CTP 5 没什么坑啊,顶多是下载链接搞错了,多花了几个小时,确实是这样,其实“坑”就一个,也是让我非常“不爽”的地方。
用安装成功的 VS2015 CTP 打开之前的项目,首先映入眼帘的是这样:
什么意思?上面有提到在 VS2015 CTP 中没有了 .NET Framework 4.5.3(VS2015 Preview 中的版本),取而代之的是 .NET Framework 4.6,需要更改项目的 .NET Framework 版本,没办法,只能任由它更改了,另外,VS2015 CTP 也会时不时的给你冒出下面的“东西”:
太任性了,拿 VS2015 CTP 一点办法都没有,只能祈祷少遇到这个问题。
好了,更改为 .NET Framework 版本后,重新编译项目,出现了下面的这种情况:
当时,我和我的小伙伴都惊呆了,我滴妈妈呀,近 200 个错误,这是个什么情况????
冷静下来,查看具体错误信息,发现基本上都是字符串拼接的错误,示意代码:
var fullName = "\{customer.FirstName} \{customer.LastName}";
这是 C# 6.0 中增加的语法特性,难道 VS2015 CTP 就不支持了?很不解,非常不解,这个问题困扰了我很久,我就差一点把 VS2015 CTP 给卸了,然后再重装 VS2015 Preview,因为新项目中大量用到了这个语法特性(写起来非常方便),如果不支持的话,需要重新用 Format 实现,我的天哪,想想都是一件恐怖的事,而且项目中不只用到了这一个语法特性,还有很多,比如下面:
string[] names = new string[] { "Steve", null, "John" };
int length = names[1]?.Length ?? 0;
public string Location { get; set; } = "NYC";
但是,这些语法并没有报错,这就奇怪了,难道 VS2015 CTP 只移除了字符串拼接的语法?然后我就去找相关资料,又反复看了 VS2015 CTP 中的版本说明,丝毫没有找到有关 C# 6.0 语法特性更改的文字,最后无意间搜索到一篇文章:C# 6 PREVIEW: STRING INTERPOLATION。
注意文章最后有个 Note 说明:
“Note: This describes the syntax that works in the Preview. However, we’ve decided to change the syntax, to even better match that of format strings. In a later release you’ll see interpolated strings written like this:”
var s = $"{p.Name,20} is {p.Age:D3} year{{s}} old";
微软一句话,我们把特性更改了,怎么了?此处略去1万字的xxxxxxx。。。
其他不想说了,下面记录下,如果你升级了 Visual Studio 2015 CTP 5 版本,你的项目需要做哪些调整:
1. targetFramework 版本更改
原来为:
<system.web>
<compilation targetFramework="4.5.3"/>
<httpRuntime/>
</system.web>
更改为(暂时未有 .NET Framework 4.6 下载,.NET Framework 4.6 Preview 实际版本为 4.5.3):
<system.web>
<compilation targetFramework="4.5"/>
<httpRuntime/>
</system.web>
2. C# 6.0 语法特性-字符串拼接
var fullName = "\{customer.FirstName} \{customer.LastName}";
更改为:
var fullName = $"{customer.FirstName} {customer.LastName}";
3. C# 6.0 语法特性-引用静态类
using System.Math;
更改为:
using static System.Math;
其他暂时未发现,欢迎补充。
哎,要改代码了,此处再略去1万字的xxxxxxx。。。
后续:再次记录 Visual Studio 2015 CTP 5 的一个坑
一些资料:
- Visual Studio 2015 CTP fixed bugs and known issues
- Visual Studio 2015 CTP 5
- .NET Web Development and Tools Blog
- Making It Better: Updates for ASP.NET 5 in Visual Studio 2015 CTP 5
- How to enable C# 6.0 feature in Visual Studio 2013?
- C# 6 PREVIEW: STRING INTERPOLATION
- Primary constructors no longer compile in VS2015
- .NET Framework and .NET SDKs
升级 Visual Studio 2015 CTP 5 的坑、坑、坑的更多相关文章
- 再次记录 Visual Studio 2015 CTP 5 的一个坑
接上一篇:升级 Visual Studio 2015 CTP 5 的坑.坑.坑 升级到 VS2015 CTP 之后,今天要改项目中的一个东西,然后就不得不把 C# 6.0 改变的语法代码中改了下(之前 ...
- Visual Studio 2015 前端开发工作流
Visual Studio 2015 CTP 5,全称为 Visual Studio 2015 Community Technology Preview 5,意为社区技术预览版,之前的版本为:Visu ...
- win10 安装visual studio 2015遇到的坑
最近win7系统不知啥原因无法访问域中的网络文件,打算升级到win10体验一下.结果发现这一路有太多的坑.首先安装win10基本上算顺利,但是当进入系统后,菜单模式对于PC的鼠标来说,用起来感觉不顺手 ...
- 又发现一个visual studio 2015的坑啊。
又发现一个visual studio 2015的坑啊...我的后台管理的目录名称叫@duck, 但是在新版VS2015中打开项目后编译,出现错误: Error opening response fil ...
- Visual Studio 2015下编译zmq项目下其他项目踩进的项目引用坑
PS.在之前的一篇文章中介绍了如何用Visual Studio 2015编译zmq,在编译同解决方案中除了libzmq之外的项目例如inproc_thr时会报错误,具如下: Severity Code ...
- Visual Studio 2015的坑:中文字符串编译后成乱码
(2015年8月5日更新:微软已经修复了Roslyn的这个bug,详见 https://github.com/dotnet/roslyn/pull/4303 ) 昨天,我们用VS2015编译了博客程序 ...
- Visual Studio 2015 速递(4)——高级特性之移动开发
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- Visual Studio 2015速递(4)——高级特性之移动开发
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...
随机推荐
- django 在字符串[str(list)]中精确查找
1.问题描述 1.1表结构 1.2问题 ref_list为id列表的字符串,需要从ref_list中找出包含指定id的数据(eg id=8).如果实用models.objects.filter(ref ...
- Html5+NodeJS——拖拽多个文件上传到服务器
实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...
- *HDU 2451 数学
Simple Addition Expression Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- 对Java数组中去除重复项程序分析
我作为一个Java菜鸟,只会用简单的办法来处理这个问题.如果有大神看到,请略过,感激不尽! 所以首先先分析这道题目:数组中重复的数据进行删除,并且要让数组里的数据按原来的顺序排列,中间不能留空. 既然 ...
- dot
今天写程序的时候发现一个问题啊 在主函数里面吧某个指针node* r=NULL 赋值为空 然后调用函数insert(node* r,....) 在insert里面呢,我给这个指针赋值了啊 但是主函数里 ...
- Ubuntu添加开机自动启动程序方法
1. 开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init.init根据配置 文件继续引导过程,启动其它进程.通常情况下,修改放置在 / ...
- Spring MVC中Session的正确用法<转>
Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...
- 使用JDBC的批处理功能
package cn.itcast.jdbc; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedSt ...
- 安装subversion
安装subversion需要依赖apr.apr-util.sqlite 下载安装包,放在/usr/file目录 subversion-1.9.4.tar.gz apr-1.5.2.tar.gz apr ...
- Nova PhoneGap框架 第七章 设备事件处理
我们的框架包含了几种设备事件的处理,目的是为了让我们的程序员更容易的完成代码.这些事件包括:回退键(Android)和横竖屏切换事件. 7.1 Android回退键 首先来说说回退键的事件处理.当用户 ...