• 58HouseSearch项目迁移到asp.net core


    前言

    58HouseSearch这个项目原本是基于ASP.NET MVC 4写的,开发环境是Windows+VS2015,发布平台是linux+mono+jexus,这样看来整个项目基本已经满足跨平台的需求。

    这样一来,本来我是没什么动力去做迁移的,好好的东西闲着没事干才迁移呢。

    不过,这不国庆了么?穷人不是在家穷游天下么?所以…真的有点闲着没事干了。

    迁移可行性探讨

    项目迁移前,我们还是先来讨论一下迁移可行性。为嘛要进行可行性探讨呢?原因是.NET CORE是一个跨平台的框架,和上一代的.NET存在不兼容。

    个人总结一下,迁移的主要的问题在于:代码不兼容、类库不兼容、严重依赖Windows API或者COM组件等。

    代码不兼容

    代码不兼容其实不算麻烦。毕竟代码是活的,你我也是活的,不就是一个改字罢了。花点时间慢慢改,总是能搞掂的。

    类库不兼容

    要不就弃用,要不就找替代品。

    严重依赖Windows API或者COM组件

    额?找替代品,找不到可用替代品的话。放弃吧,这个项目别考虑迁移了。

    这个故事告诉我们,做跨平台项目的时候,少点用系统API或者组建。

    回到58HouseSearch项目上面。

    这个项目的代码基本都是我写的,所以重写代码没什么问题。
    依赖的类库有下面几个:

    AngleSharp是用来解析HTML的类库,用linq的方式来操作HTML,用起来实在爽快。

    如果这货在.net core上不能跑,我应该立马放弃了。
    不过,这个实在给力…

    AngleSharp支持平台

    Newtonsoft.Json

    在这个项目里面主要是用来记录PV数据的,非核心功能,可有可无。不过看了下nuget上的介绍,也是支持.net core的。

    剩下log4net…嗯,并不支持log4net。不过这个就更加是非核心内容了,直接丢了。
    PS:考虑后期加入Nlog替代log4net。

    至于依赖Windows API之类的,在这个项目里面基本没有,所以略过…

    准备工作

    友情提示:

    1. Visual Studio Community 2015 with Update 3 下载镜像来安装。

    错误操作如下:
    错误操作

    正确打开方式:

    正确的打开方式-1

    正确的打开方式-2

    1. 安装.NET Core SDK和.NET Core之后再安装.NET Core 1.0.1 - VS 2015 Tooling Preview 2

    2. 安装.NET Core 1.0.1 - VS 2015 Tooling Preview 2 这货的可能会报错0x80072f8a未指定的错误

    解决方案见下图:

    图片描述

    详细见链接:安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.2出现0x80072f8a未指定的错误

    上面都弄好之后,理论上在VS2O15-新建项目里面可以看到ASP.NET CORE的模板了。如下图:
    ASP.NET CORE的模板

    项目迁移

    新建空白ASP.NET CORE项目

    新建好了之后如下图:

    空白ASP.NET CORE项目

    Nuget获取引用

    https://www.nuget.org/packages/AngleSharp/

    https://www.nuget.org/packages/Newtonsoft.Json

    添加Controllers文件夹

    然后把之前项目的Controllers拷贝过来,改掉命名空间,去掉无用代码,添加相应引用。

    添加Views文件夹

    本项目直接把之前项目的Views拷贝过来是完全没有问题的。

    静态文件处理

    asp.net core MVC中的文件结构和asp.net mvc的文件结构略有不同。

    asp.net core MVC在view中“IMG/Little/PaleGreen.png”对应的文件对应于“项目路径/webroot/IMG/Little/PaleGreen.png”;

    而asp.net mvc中,对应路径为“项目/IMG/Little/PaleGreen.png”。

    因而,我们的所有静态文件都应该放到:webroot文件夹下。

    上面的都做完了之后,项目结构如下:

    项目结构

    接下来就是改代码了。

    代码迁移

    Startup.cs添加MVC

    之前的方法:改写GetHTMLByURL方法

    old GetHTMLByURL

    .net core重写了HttpWebRequest,变成了WebRequest,所以上面的代码废了。

    重写如下:


    嗯,换了命名空间,别的一句都没改直接拉过来了…略过。
    改写Controller代码

    发布到ubuntu

    Install for Ubuntu 14.04, 16.04 & Linux Mint 17

    第一步

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Ubuntu 14.04 / Linux Mint 17
    sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
    sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
    sudo apt-get update
     
     
    //Ubuntu 16.04
    sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
    sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
    sudo apt-get update

    第二步

    1
    sudo apt-get install dotnet-dev-1.0.0-preview2-003131

    安装好了之后,输入 dotnet -v 应该能看到版本信息,如下图:

    dotnet -v

    这样的下,一句完成了ubuntu 运行asp.net core的环境搭建了。

    project.json里面隐藏的坑

    dependencies

    NET Core 1.0.1 - VS 2015 Tooling Preview 2模板的asp.net core 版本和ubuntu 的asp.net core 版本不一致。

    根据微软爸给的教程,我们在ubuntu上安装的.NET Core 1.0.0,见上图。

    然而我们创建项目的模板是.NET Core 1.0.1,见下图:

    .NET Core 1.0.1

    怎么办?要不升级ubuntu的asp.net core,要不降级。

    由于没找到.NET Core 1.0.1 ubuntu的安装包,所以我选择了降级到.NET Core 1.0.0.

    其中需要把Microsoft.NETCore.App version 、Microsoft.AspNetCore.Server.Kestrel、Microsoft.AspNetCore.Mvc 这三个节点都改成“1.0.0”。如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    "dependencies": {
    "Microsoft.NETCore.App": {
    "version": "1.0.1",
    "type": "platform"
    },
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Newtonsoft.Json": "9.0.1",
    "AngleSharp": "0.9.8.1"
    },

    publishOptions

    发布输出包括Views文件夹

    1
    2
    3
    4
    5
    6
    7
    "publishOptions": {
    "include": [
    "wwwroot",
    "web.config",
    "Views"
    ]
    },

    runtimes

    runtimes 配置为模板运行平台。
    详细见链接:https://docs.nuget.org/ndocs/schema/project.json

    1
    "runtimes": { "ubuntu.14.04-x64": {} }

    上面都弄好之后,跑一下看,如下图:

    1
    2
    3
    dotnet restore
     
    dotnet run

    来个请求看看:

    请求log

    jexus转发/反向代理

    ASP.NET Core “完整发布,自带运行时” 到jexus

    Github地址:https://github.com/liguobao/58HouseSearch

    在线地址:codelover.link:8080

  • 相关阅读:
    我在ZZ这八年
    安装JBpm
    用程序实现HTTP压缩和缓存
    (转)WPF Custom Control Dependency Property Gotcha
    开发一个Word的代码高亮插件
    (转)Getting rid of the DSL model explorer
    (翻译)LearnVSXNow! #16 创建简单的编辑器2
    对 COM 组件的调用返回了错误 HRESULT E_FAIL。
    Word中使用代码高亮插件
    使用HttpWebRequest post数据时要注意UrlEncode
  • 原文地址:https://www.cnblogs.com/liguobao/p/5931599.html
Copyright © 2020-2023  润新知