9月2日,微软发布了ASP.NET 5 Beta7(详见Announcing Availability of ASP.NET 5 Beta7)。其中最大的亮点是dnx已经可以完全基于CoreCLR运行,也就是在Mac/Linux上运行dnx无需再借助Mono,而之前必须安装Mono,才能运行dnu restore安装nuget包包。

我们的ASP.NET 5跨平台示例站点 about.cnblogs.com 之前是跑在 ASP.NET 5 Beta5 上的(详见借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息)。2个月跑下来,最大的感受是Kestrel太不稳定了,几乎天天都会挂掉。

今天我们决定将示例站点从ASP.NET 5 Beta5升级至Beta7,这篇博文主要分享的是升级操作步骤以及遇到的问题。

这次我们将服务器操作系统从CentOS换成了Ubuntu。

首先安装的是dnvm,安装步骤如下:

  • 安装curl

    apt-get install curl
  • 安装unzip
    apt-get install unzip
  • 安装dnvm
    curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh
    | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh

接下来是安装dnx:

安装命令:

# dnvm upgrade -r coreclr

安装结果:

Determining latest version
Latest version is 1.0.0-beta7
Downloading dnx-coreclr-linux-x64.1.0.0-beta7 from https://www.nuget.org/api/v2
Download: https://www.nuget.org/api/v2/package/dnx-coreclr-linux-x64/1.0.0-beta7
######################################################################## 100.0%
Installing to /root/.dnx/runtimes/dnx-coreclr-linux-x64.1.0.0-beta7

再接下来就是安装运行dnu restore命令所需的Linux库。

  • apt-get install libunwind8
  • apt-get install libcurl3-dev

紧接着就开始用新版的dnx运行示例站点所在的ASP.NET 5项目。

首先用dnu restore安装nuget包包,运行成功,结果如下:

# dnu restore
Microsoft .NET Development Utility CoreCLR-x64-1.0.0-beta7-15532
GET https://api.nuget.org/v3/index.json
OK https://api.nuget.org/v3/index.json 5354ms
Restoring packages for /data/AboutUs/project.json
...
Installed:
256 package(s) to /root/.dnx/packages

接下来就是用dnx命令运行站点,从Beta 7开始在当前目录运行不需要输入点号了,只需下面的命令:

dnx kestrel

运行站点首先遇到的错误:

System.MissingMethodException: Method not found:
'Microsoft.Framework.Configuration.IConfiguration
Microsoft.Framework.Configuration.IConfigurationBuilder.Build()'.
at Microsoft.AspNet.Hosting.Program.Main(String[] args)

这是由于kestrel包包改名了,由Kestrel改为了Microsoft.AspNet.Server.Kestrel,所以要在project.json中改一下。

{
"webroot": "wwwroot",
"exclude": ["wwwroot"],
"commands":{
"kestrel": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:8001"
},
"dependencies":{
"Microsoft.AspNet.Server.Kestrel": "1.0.0-*",
"Microsoft.AspNet.Mvc": "6.0.0-*",
"Microsoft.AspNet.StaticFiles": "1.0.0-*",
"Microsoft.AspNet.Diagnostics": "1.0.0-*",
"System.Runtime.Serialization.Primitives": "4.0.10-*"
}
}

继续运行dnx kestrel,出现新的错误:

/data/AboutUs/Extensions/HtmlHelperExtensions.cs(21,24): DNXCore,Version=v5.0 error CS0266:
Cannot implicitly convert type 'Microsoft.AspNet.Html.Abstractions.IHtmlContent' to
'Microsoft.AspNet.Mvc.Rendering.HtmlString'.
An explicit conversion exists (are you missing a cast?)

这是由于新版的ASP.NET MVC中IHtmlHelper.Raw返回值的类型由HtmlString改为了IHtmlContent,所以要改一下错误中提到的扩展方法的返回值类型。

public static class HtmlHelperExtensions
{
public static IHtmlContent TabLink(this IHtmlHelper htmlHelper,
string linkText, string linkUrl, string viewName)
{
//...
}
}

并且要添加一个命名空间——using Microsoft.AspNet.Html.Abstractions;

继续运行,继续错误:

Unable to load libuv. Make sure libuv is installed and available as libuv.so.1
at Microsoft.AspNet.Server.Kestrel.Networking.Libuv.Load(String dllToLoad)

这是由于Kestrel需要libuv才能运行,依次运行下面的命令安装libuv:

apt-get install make automake libtool
curl -sSL https://github.com/libuv/libuv/archive/v1.4.2.tar.gz | sudo tar zxfv - -C /usr/local/src
cd /usr/local/src/libuv-1.4.2
sh autogen.sh
./configure
make
make install
rm -rf /usr/local/src/libuv-1.4.2 && cd ~/
ldconfig

安装好libuv之后,终于成功运行起了站点!

# dnx kestrel
Application started. Press Ctrl+C to shut down.

但是用浏览器访问站点,却出现下面的错误:

The type or namespace name 'Runtime' does not exist in the namespace 'Microsoft.Framework' (are you missing an assembly reference?)
public Microsoft.Framework.Runtime.IRuntimeEnvironment env { get; private set; }

这是发生在MVC视图中的错误,也是改名惹的祸,IRuntimeEnvironment所有的命名空间由原来的Microsoft.Framework.Runtime被改为了Microsoft.Dnx.Runtime,所以视图中要改为以下的代码 :

@inject Microsoft.Dnx.Runtime.IRuntimeEnvironment env

解决这个问题之后, 站点 about.cnblogs.com 能正常访问了,升级也就成功完成了!

希望新版Kestrel能稳定一些。

.NET跨平台之旅:将示例站点从ASP.NET 5 Beta5升级至Beta7的更多相关文章

  1. .NET跨平台之旅:将示例站点从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0

    终于将“.NET跨平台之旅”的示例站点 about.cnblogs.com 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 ,经历了不少周折,在这篇博文中记录一下. 从 AS ...

  2. .NET跨平台之旅:将示例站点从ASP.NET 5 Beta7升级至RC1

    今天,我们将示例站点(about.cnblogs.com,服务器操作系统是Ubuntu)从ASP.NET 5 Beta7升级到了RC1,在升级过程中只遇到了一个问题. 在运行 dnvm upgrade ...

  3. .NET跨平台之旅:在Linux上将ASP.NET 5运行日志写入文件

    在前一篇博文(增加文件日志功能遇到的挫折)中,我们遇到了这样一个问题:虽然有一些.NET日志组件(比如Serilog, NLog)已经开始支持.NET Core,但目前只支持控制台输出日志,不支持将日 ...

  4. .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存

    注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...

  5. .NET跨平台之旅:增加文件日志功能遇到的挫折

    在将我们的ASP.NET 5示例站点(about.cnblogs.com)升级至ASP.NET 5 RC1的时候,我们增加了控制台日志功能. 在ASP.NET 5添加日志功能很简单,只需在projec ...

  6. .NET跨平台之旅:升级ASP.NET Core示例站点

    ASP.NET Core示例站点网址:http://about.cnblogs.com/ 首先安装最新版的 .NET Core 运行环境,从 https://github.com/dotnet/cli ...

  7. .NET跨平台之旅:将示例站点升级至 ASP.NET Core 1.1

    微软今天在 Connect(); // 2016 上发布了 .NET Core 1.1 ,ASP.NET Core 1.1 以及 Entity Framework Core 1.1.紧跟这次发布,我们 ...

  8. .NET跨平台之旅:将示例站点升级至 .NET Core 1.1 Preview 1

    今天微软发布了 .NET Core 1.1 Preview 1(详见 Announcing .NET Core 1.1 Preview 1 ),紧跟 .NET Core 前进的步伐,我们将示例站点 h ...

  9. .NET跨平台之旅:将示例站点升级至ASP.NET Core 1.0

    北京时间6月28日凌晨,微软发布了 .NET Core 1.0,详见新闻 .NET Core 1.0 正式发布了 ,ASP.NET Core 1.0 也随之一起发布了. 紧跟这次发布,我们将跑在 Li ...

随机推荐

  1. .html(),.text()和.val()的差异总结

    .html(),.text(),.val()三种方法都是用来读取选定元素的内容:只不过.html()是用来读取元素的html内容(包括html标签),.text()用来读取元素的纯文本内容,包括其后代 ...

  2. iOS之自动调节输入文本框的高度

    //自动调节输入文本框的高度 - (void)textViewDidChange:(UITableView *)textView{ float height; if ([[[UIDevice curr ...

  3. 谈谈iOS app的线上性能监测

    在移动端开发者中最重要的KPI应该是崩溃率.当崩溃率稳定下来后,工作的重心就应该转移到性能优化上.那么问题来了,如果你的项目也没有接入任何性能监测SDK,没有量化的指标来衡量,那你说你优化了性能领导信 ...

  4. 解决xcode8模拟器不能删除应用的问题

       问题描述:想删除模拟器上的测试项目,但是长按之后主界面模糊一下,并没有出现小叉叉来删除.    原因:这是因为xcode8中模拟器自带Touch3D,我们控制不好触摸板的力度. 解决方法: 1. ...

  5. MongoDB学习笔记~关于官方驱动集成IQueryable之后的一些事

    回到目录 关于官方驱动集成IQueryable之后的一些事,有好事也有坏事,好事就是它会将你的linq语句非常友好的翻译成MongoDB语句,而坏事就是有一些linq语句不会被翻译,不会被翻译的代价就 ...

  6. 如何使用 OpenStack CLI - 每天5分钟玩转 OpenStack(22)

    本节首先讨论 image 删除操作,然后介绍 OpenStack CLI 的使用方法,最后讨如何 Troubleshoot. Web UI 删除 image admin 登录后,Project -&g ...

  7. CentOS使用yum源中自带的rpm包安装LAMP环境

    CentOS使用yum源中自带的rpm包安装LAMP环境.这是Linux下安装LAMP的环境一种最基本最简便的方式.新手可以从容安装使用. 1. 安装基础包(可选安装)yum install -y w ...

  8. netty3升netty4一失眼成千古恨

    老项目是netty3的,本来想直接改到netty5,但是netty5居然是只支持jdk1.7,很奇怪jdk1.6和jdk1.8都不行..为了兼容jdk1.6加上netty4本来和netty5就差别不大 ...

  9. AngularJS笔记---路由视图

    最近有同事提到过关于ng-view的使用, 其实自己也不懂了,由于最近一直在做AngularJs的Rearch,所以就看了一些关于ng-view的国外博客. 做过ASP.NET MVC4的都知道, 我 ...

  10. 连载《一个程序猿的生命周期》- 44.感谢,我从事了IT相关的工作

    感谢博客园一直以来的支持,写连载都是在这里首发,相比较CSDN和开源中国气氛要好的多. 节前,想以此篇文章结束<一个程序猿的生命周期>的<生存>篇,对过10的年做一个了断,准备 ...