升级 Visual Studio 2015 CTP 5 的坑、坑、坑

前两天,微软发布了 Visual Studio 2015 CTP 5,全称为 Visual Studio 2015 Community Technology Preview 5,意为社区技术预览版,以前的版本为:Visual Studio 2015 Preview,多了一个 CTP,虽然都为预览版,但此次 CTP 的版本发布,显然离 VS2015 的正式版本发布已经不远了。html

先贴一个重要连接:Visual Studio 2015 CTP 5 更新说明git

上面的文章中详细说明了 VS2015 各个版本更新内容,除了 VS2015 IDE 的发布,微软还发布了 ASP.NET 5 Beta2,信息量很大。github

吐槽开始

前天的时候,根据上面文章中的连接地址,而后我就火烧眉毛的下载了,但下载以后发现是这个玩意:vs14.ctp_pro_enu.iso(4.38G),我当时没怎么注意,下载以后看一下名字为 VS14,VS14 不是早就改名为 VS2015 了吗?后面还有一个 Pro(能够理解为专业版),当时有很强烈的预感,我下错了,果真,在安装的时候就报错了,说是已经安装了什么的,具体不记得详细信息了,而后我就回过头去找下载连接(已通过去了好几个小时),肯定就是这个版本的下载连接,难道是微软的编辑把下载的连接地址搞错了?后来去 MSDN 搜 VS2015 CTP 版本的下载地址,可是搜了很久,也没找到,再后来就不了了之了。web

奇怪的是,昨天的时候,无心间再去点击 VS2015 CTP 版本说明的那篇文章,发现竟然更新了东西,而后多了下面的下载内容:json

211136418447572.png

我很肯定的是,前天的时候我并无看到这个下载说明,当时下载 vs14.ctp_pro_enu.iso 的时候,是在版本说明中找到的下载连接,而后点击上面的 Microsoft Visual Studio Ultimate 2015 CTP iso 下载地址,看到了下载内容名称:vs2015.ctp_ult_enu.iso(4.81G),虽然又是四个多G,但看名字知道此次有谱了,内心总算踏实了,又是几个小时过去了。。。ide

终于下载好了,下面开始安装:this

211143015165197.png

211143068606629.png

又是几个小时过去了。。。spa

在安装过程当中有一次报错问题,当时没来得及截图,从新安装就行了,好在 VS2015 能够记忆安装状态,从新安装的话,能够接着以前的进行安装,不须要重复安装了,节约了不少的时间,安装成功:.net

211150256252441.png

先说一下几个变化,首先看一张图:orm

211153383757127.png

若是你以前用过 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 项目中进行引用它。

引用示意图:

211215308916575.png

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 打开以前的项目,首先映入眼帘的是这样:

211228336721087.png

什么意思?上面有提到在 VS2015 CTP 中没有了 .NET Framework 4.5.3(VS2015 Preview 中的版本),取而代之的是 .NET Framework 4.6,须要更改项目的 .NET Framework 版本,没办法,只能任由它更改了,另外,VS2015 CTP 也会时不时的给你冒出下面的“东西”:

211233274064690.png

太任性了,拿 VS2015 CTP 一点办法都没有,只能祈祷少遇到这个问题。

好了,更改成 .NET Framework 版本后,从新编译项目,出现了下面的这种状况:

211237274225484.png

当时,我和个人小伙伴都惊呆了,我滴妈妈呀,近 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。。。

相关文章
相关标签/搜索