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上不能跑,我应该立马放弃了。
不过,这个实在给力…
Newtonsoft.Json
在这个项目里面主要是用来记录PV数据的,非核心功能,可有可无。不过看了下nuget上的介绍,也是支持.net core的。
剩下log4net…嗯,并不支持log4net。不过这个就更加是非核心内容了,直接丢了。
PS:考虑后期加入Nlog替代log4net。
至于依赖Windows API之类的,在这个项目里面基本没有,所以略过…
准备工作
- Visual Studio Community 2015 with Update 3 – Free
- .NET Core SDK
- .NET Core
- .NET Core 1.0.1 - VS 2015 Tooling Preview 2
友情提示:
- Visual Studio Community 2015 with Update 3 下载镜像来安装。
错误操作如下:
正确打开方式:
安装.NET Core SDK和.NET Core之后再安装.NET Core 1.0.1 - VS 2015 Tooling Preview 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项目
新建好了之后如下图:
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方法
.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 应该能看到版本信息,如下图:
这样的下,一句完成了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,见下图:
怎么办?要不升级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
|
来个请求看看:
jexus转发/反向代理
ASP.NET Core “完整发布,自带运行时” 到jexus
Github地址:https://github.com/liguobao/58HouseSearch
在线地址:codelover.link:8080
58HouseSearch项目迁移到asp.net core的更多相关文章
- 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试
一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能第一时间发现问题. 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行:一方面,AWS对Li ...
- 为什么你需要将代码迁移到ASP.NET Core 2.0?
随着 .NET Core 2.0 的发布,.NET 开源跨平台迎来了新的时代.开发者们可以选择使用命令行.个人喜好的文本编辑器.Visual Studio 2017 15.3 和 Visual Stu ...
- ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 迁移数据 上一章节中我们配置了 ...
- 将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3
在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF:同时还发布了 Visual Studio 2019 预览版 ...
- ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 项目配置 ( Startup ) 前面几章节 ...
- ASP.NET Core 基本项目目录结构 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 基本项目目录结构 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 基本项目目录结构 上一章节中我们成功创建了一个名为 Hell ...
- ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新建项目 - macOS 环境 对于任何语言和 ...
- Abp vNext框架 从空项目开始 使用ASP.NET Core Web Application-笔记
参考 Abp vNext框架 从空项目开始 使用ASP.NET Core Web Application http://www.vnfan.com/helinbin/d/745b1e040c9b4f6 ...
- 如何将IHttpHandler和IHttpModule迁移到ASP.NET Core中间件
ASP.NET Core是一个跨平台.开源的框架,用于在Windows.Mac和Linux操作系统(OS)上开发web应用程序.你可以使用以下任何IDE开发ASP.NET Core 应用程序: Vis ...
随机推荐
- ubuntu git svn 缺少 subversion-perl
在命令行中输入以下命令:sudo apt-get install subversion-tools等待安装成功即可.
- Android(java)学习笔记22:我们到底该如何处理异常?
1. 我们到底该如何处理异常? (1)原则: 如果该功能内部可以将问题处理,用try,自己能解决就自己解决问题. 如果处理不了,交由调用者处理,这是用throws,自己不能解决的问题,我们就抛出去交个 ...
- [18/11/22] 将点分十进制的IP地址化成二进制输出
#include <stdio.h> void binary(int d){ ,j,n,b[]={}; ){ n=d%; d=d/; b[i++]=n; //不停的除2,余数保存在b[8] ...
- lucene&solr学习——创建和查询索引(理论)
1.Lucene基础 (1) 简介 Lucene是apache下的一个开放源代码的全文检索引擎工具包.提供完整的查询引擎和索引引擎:部分文本分析引擎. Lucene的目的是为软件开发人员提供一个简单易 ...
- autofac 注册
1 注册的概念和方式 使用autofac 的ContainerBuilder 来注册组件(components---通常指实现类),并把它的服务(service---通常指接口,抽象类,类实例)暴露给 ...
- Django-rest-framework(七)swagger使用
在我们接口开发完之后,需要交付给别人对接,在没有使用swagger的时候,我们需要单独编写一份api接口文档,由postman之类的工具进行请求得到返回的结果.而有了swagger之后,可以通过提取接 ...
- mysql 复制A表 到B表;insert into select * from table
情况一: INSERT INTO tb1 (a,b,c) select a1,b1,c1, from tb2 where .... -- 案例 百度云 INSERT INTO l_biz_car_o ...
- java面向对象编程思想的理解
1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...
- Java秒杀系统方案优化 高性能高并发实战(已完成)
1:商品列表 2:商品详情判断是否可以开始秒杀,未开始不显示秒杀按钮显示倒计时,开始显示秒杀按钮,同时会显示验证码输入框以及验证码图片,当点击秒杀按钮的时候会首先判断验证码是否正确,如果正确会返回一个 ...
- 大专生自学c++到找到工作的前前后后
先做个自我介绍,我13年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了.13年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学 ...
