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

来源:互联网 发布:ubuntu jdk下载 编辑:程序博客网 时间:2024/06/05 19:12

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 versionLatest version is 1.0.0-beta7 Downloading dnx-coreclr-linux-x64.1.0.0-beta7 from https://www.nuget.org/api/v2Download: 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 restoreMicrosoft .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 5354msRestoring 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 libtoolcurl -sSL https://github.com/libuv/libuv/archive/v1.4.2.tar.gz | sudo tar zxfv - -C /usr/local/srccd /usr/local/src/libuv-1.4.2sh autogen.sh./configuremakemake installrm -rf /usr/local/src/libuv-1.4.2 && cd ~/ldconfig
复制代码

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

# dnx kestrelApplication 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 能正常访问了,升级也就成功完成了!

0 0
原创粉丝点击