首发于:http://codelover.link/

前言

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

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

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

迁移可行性探讨

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

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

代码不兼容

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

类库不兼容

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

严重依赖Windows API或者COM组件

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

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

回到58HouseSearch项目上面。

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

  • AngleSharp

  • Newtonsoft.Json

  • log4net

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

友情提示:

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

错误操作如下:

正确打开方式:

  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项目

新建好了之后如下图:

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

    public class Startup{// This method gets called by the runtime. Use this method to add services to the container.// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940public void ConfigureServices(IServiceCollection services){//添加MVC框架services.AddMvc();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory){loggerFactory.AddConsole();if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}//启用静态文件中间件app.UseStaticFiles();//启动MVC路由app.UseMvcWithDefaultRoute();//设置默认页面app.UseMvc(routes =>{routes.MapRoute(name: "default",template: "{controller=House}/{action=Index}/{id?}"); });}}

改写GetHTMLByURL方法

之前的方法:

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

重写如下:

        public static string GetHTMLByURL(string Url, string type = "UTF-8"){try{Url = Url.ToLower();System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);// Get the response instance.System.Net.WebResponse wResp = wReq.GetResponseAsync().Result;System.IO.Stream respStream = wResp.GetResponseStream();using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type))){return reader.ReadToEnd();}}catch (System.Exception ex){return string.Empty;}}

改写Controller代码

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

发布到ubuntu

Install for Ubuntu 14.04, 16.04 & Linux Mint 17

第一步

//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

第二步

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”。如下:

  "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文件夹

  "publishOptions": {"include": ["wwwroot","web.config","Views"]},

runtimes

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

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

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

dotnet restoredotnet run

来个请求看看:

jexus转发/反向代理

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

58HouseSearch项目迁移到asp.net core相关推荐

  1. 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试

    一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能第一时间发现问题. 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行:一方面,AWS对Li ...

  2. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core Identity 迁移数据 - ASP.NET C ...

  3. 为什么你需要将代码迁移到ASP.NET Core 2.0?

    随着 .NET Core 2.0 的发布,.NET 开源跨平台迎来了新的时代.开发者们可以选择使用命令行.个人喜好的文本编辑器.Visual Studio 2017 15.3 和 Visual Stu ...

  4. 将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3

    将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3 原文:将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3 版权声明:本作 ...

  5. ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 项目配置 ( Startup ) - ASP ...

  6. ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新建项目 - macOS 环境 对于任何语言和 ...

  7. abp .net core linux,Abp vNext框架 从空项目开始 使用ASP.NET Core Web Application-笔记

    参考 abp vnext框架 从空项目开始 使用asp.net core web application rynowak的回答 migrate from asp.net core 2.2 to 3.0 ...

  8. ASP.NET MVC应用迁移到ASP.NET Core及其异同简介

    ASP.NET Core是微软新推出支持跨平台.高性能.开源的开发框架,相比起原有的ASP.NET来说,ASP.NET Core更适合开发现代应用程序,如跨平台.Dorker的支持.集成现代前端开发框 ...

  9. ASP.NET Core 2.0 Web API项目升级到ASP.NET Core 3.0概要笔记

    本文结构 先决条件 升级目标框架(Target Framework)的版本 过时的IHostingEnvironment与IApplicationLifetime对象 Endpoint Routing ...

最新文章

  1. 求用1,2,5这三个数不同个数组合的和为100的组合个数
  2. zabbix监控mysql的哪些参数_Centos6.3下zabbix监控mysql数据库参数
  3. 为vim编辑器增加行号功能
  4. QLineEdit学习
  5. InputStream,BufferedImage与byte数组之间的转换
  6. 把知识变成图谱一共需要花几步?89页全网最全清华知识图谱报告-学习笔记
  7. rust为什么显示不了国服_Rust编程语言初探
  8. 洛谷P1279 字串距离 (动态规划)
  9. mysql 备份优化_MySQL 备份过程优化
  10. 2021年最值得推荐的13个提高开发效率工具,程序员必备
  11. Play Framework + ReactiveMongo 环境搭建
  12. Kafka数据迁移MaxCompute最佳实践
  13. 面向对象,局部变量和成员变量
  14. 跨境B2B电商市场血雨腥风,供应链管理系统成争夺焦点
  15. 给初学日语者的几点建议——词汇篇
  16. DELL G3 3690耳机插入不显示,没声音
  17. javascript Date format(js日期格式化)
  18. 【PC端聊天功能模板】vue-elementul简单实现电脑端客服聊天功能,pc端聊天系统静态页面布局,配套websocket方案和心跳重连机制【详细注释,拿来即用】
  19. 【论文笔记】Explainable Reasoning over Knowledge Graphs for Recommendation
  20. [ - OpenGLES3.0 - ] 第一集 主线 - 打开新世界的大门

热门文章

  1. HydroCMS更换手风琴式侧栏metismenu
  2. 室内装修墙面处理(刷漆)的一般步骤
  3. 专业知识感觉什么都会,面试官一问却回答不上来怎么办?
  4. navicat远程连接mysql,2003 can't connect to mysql server on 10038(mysql在windows上)
  5. Linux中的lsof
  6. 「用一个更复杂的例子,来深入学习DESeq2差异表达分析后的小分析」
  7. 2022年医药新零售行业发展分析及前景预期
  8. 深圳市有什么靠谱的PMP机构推荐吗?
  9. 【前端客栈】使用CSS制作爱奇艺视频播放列表
  10. SpringBoot:统一异常、数据校验处理