因为自己到开发电脑转到Mac Air,之前的Webform/MVC应用在Mac 跑不起来,而且.Net Core 2.0 已经比较稳定了。

1. 为什么会有跨平台的.Net Core 

近年来,我们已经进入云计算时代,在云平台的PaSS和SaSS上也是发生了大幅度的进化,以docker为代表。微软的Azure平台,google的GAE等等各大云计算厂商都提供了PaSS平台,我们的应用程序要迁移到这样的平台上都需要进行重写。Docker,给云计算带来一场革新,Docker可以被认为是互联网的集装箱,可以灵活地封装软件,令其更快速地传播。这对现代互联网来说是一件大事,因为软件都会运行上成百上千的机器上。Docker可以改变我们开发软件的方式,令每个人都能便捷地利用大量的运算能力。Docker可以让开发者专注于开发软件,不需要考虑在哪里运行自己的软件,这才是云计算的发展方向。开发者考虑应用本身就足够了。

以往的.NET 很难进入以docker为代表的云计算开发平台,特别是Windows不支持Docker,因为那完全是互联网服务的基石--Linux系统才有的技术,微软为了适应这样的云计算潮流,在Windows Server 2016/Windows 10上支持了docker,也重新开发跨平台.NET Core的应用运行平台。

2. 对Old .Neter, 如何尽快熟悉.Net Core 呢?

我们在vs.net 新建一个Empty Core solution, 看看程序入口program.cs,它还是一个console程序. 多引入了4个命名空间. ASP.NET Core应用的寄宿依赖于一个WebHost对象,通过对应的CreateDefaultBuilder的工厂方法创建启动一个WebHost, web服务器. 注册调用了StartUp类. 这个类里面会注册一些中间件.

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore;

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.Logging;

namespace sso

{

public class Program

{

public static void Main(string[] args)

{

BuildWebHost(args).Run();

}

public static IWebHost BuildWebHost(string[] args) =>

WebHost.CreateDefaultBuilder(args)

.UseStartup<Startup>()

.Build();

}

}

startup类里有configureServices和configure方法, 调用顺序是先ConfigureServices后Configure。

这2个的区别是: 其中和Dependecy Injection有关的方法是放在ConfigureServices()中,

Configure()是和Middleware相关的方法

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 https://go.microsoft.com/fwlink/?LinkID=398940

public void ConfigureServices(IServiceCollection services)

{

}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

if (env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}

app.Run(async (context) =>

{

await context.Response.WriteAsync("Hello World!");

});

}

}

默认Empty的solution是只有一个Hello World,我们看一下典型的数据库应用,这个文件会是怎么样的,引入EF,MVC等中间件

public void ConfigureServices(IServiceCollection services)

{

// Add framework services.

services.AddDbContext<ApplicationDbContext>(options =>

options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

services.AddIdentity<ApplicationUser, IdentityRole>()

.AddEntityFrameworkStores<ApplicationDbContext>()

.AddDefaultTokenProviders();

services.AddMvc();

// Add application services.

services.AddTransient<IEmailSender, AuthMessageSender>();

services.AddTransient<ISmsSender, AuthMessageSender>();

}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

if (env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

app.UseBrowserLink();

}

else

{

app.UseExceptionHandler("/Error");

}

app.UseStaticFiles();

app.UseMvc(routes =>

{

routes.MapRoute(

name: "default",

template: "{controller}/{action=Index}/{id?}");

});

}

如果要引入其他中间件,比如这个,可以参考下面文章.

ASP.NET Core 中间件之压缩、缓存
asp.net core 2.0 查缺补漏
中间件配置主要是用RunMapUse方法进行配置,请参考这个文章  ASP.NET Core 运行原理剖析

犯了一个错误,在 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?tabs=aspnetcore2x  这里有提到

Don't call next.Invoke after the response has been sent to the client. Changes to HttpResponse after the response has started will throw an exception.

错误代码如下: 这个代码运行时会出错,错误是

该网页无法正常运作

localhost 意外终止了连接。

ERR_INCOMPLETE_CHUNKED_ENCODING

原文地址 http://www.cnblogs.com/zitjubiz/p/net_core_daily_1.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析相关推荐

  1. 把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog

    Net Core 大量使用依赖注入(Dependency Inject), 打个比方,我们常用的日志组件有Log4Net,NLog等等. 如果我们要随时替换日志组件,那么代码中就不能直接引用某个组件的 ...

  2. 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0

    今年五月的 Build 大会上,微软说 .NET Core 3.0 将带来 WPF / Windows Forms 这些桌面应用的支持.当然,是通过 Windows 兼容包(Windows Compa ...

  3. 新旧系统更替产生的数据迁移问题

    新旧系统更替产生的数据迁移问题 作者:西安项目组夏凯撰文时间:2004.11.08 在信息化建设过程中,随着技术的发展,原有的信息系统不断被功能更强大的新系统所取代.从两层结构到三层结构,从Clien ...

  4. ASP.NET Core 3.0 迁移避坑指南

    一.前言 .NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态WebApi项目迁移到.NET Core ...

  5. power linux 安装系统,在Linux系统中安装/使用PowerShell Core 6.0

    在微软爱上 Linux 之后,PowerShell 这个原本只是 Windows 才能使用的组件,于 2016 年 8 月 18 日开源并且成为跨平台软件,登陆了 Linux 和 macOS. Pow ...

  6. 与时俱进 | 博客现已运行在 .NET Core 3.0 及 Azure 上

    点击上方蓝字关注"汪宇杰博客" 导语 9月23日,微软正式发布了 .NET Core 3.0,这个版本具有大量新功能和改进.我也在第一时间将自己的博客网站更新到了 .NET Cor ...

  7. .NET Core 3.0 正式公布:新特性详细解读

    点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 作者丨Richard Lander 译者丨核子可乐 策划丨赵钰莹 近日,.NE ...

  8. 微软.Net Core 3.0 预览版7发布:大幅减少 SDK 空间大小

    据悉,这个预览版是 .Net Core 3 中重要的版本,可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话), ...

  9. ASP.NET Core 1.0中的管道-中间件模式

    ASP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline).日志记录.用户认证.MVC等模块都以中间件(Middleware)的方式注册在管道中.显而易见这样的设计非常松耦合 ...

最新文章

  1. [转载]WebForm下使用 jQuery.loadUserControl异步load用户控件
  2. eclipse项目导入idea部署到tomcat
  3. 【经典重温】所有数据无需共享同一个卷积核!谷歌提出条件参数化卷积CondConv(附Pytorch复现代码)...
  4. linux怎么复制文件夹全部内容,linux局域网怎么复制文件夹下的全部文件到另外文件夹...
  5. python 伪多线程_Python实现简单多线程任务队列
  6. 《智能计算系统》课程报告——《An Efficient FPGA Accelerator Optimized for High Throughput Sparse CNN Inference》学习笔记
  7. SVN环境搭建详解(来源网络)
  8. Linux基础——怎么样从 MacOS 或 Linux 通过 SSH 远程 Linux
  9. 赛尔译文 | 基础模型的机遇与风险 (四)
  10. RxJava -- 从 create 开始 (一)
  11. Open Inventor Coin3D
  12. inode客户端linux 怎样运行,Ubuntu下安装iNode上网客户端
  13. Python 基础(一):入门必备知识
  14. Via板载声卡底噪严重、播放卡顿及耳机与扬声器音源切换问题【解决方法】
  15. Spring Cloud 基础教程 - 程序猿DD
  16. “我与女明星只差一个毛戈平”,毛戈平与上市又差什么?
  17. c++贪吃蛇源代码 完整版
  18. 2020-08-29 ---- 美团点评 笔试
  19. 图片工具picpick
  20. [转载]深入Windows NT/2000模块的组织 - 专题安全方向{ Security Research Papers } - 邪恶八进制信息安全团队技术讨论组 努力为祖国的信息安全撑起一片蓝天

热门文章

  1. 理解云计算备份与灾难恢复
  2. js温故而知新11(AJAX)——学习廖雪峰的js教程
  3. 【bayes】贝叶斯likelihood和model
  4. [存档]CxServer的项目周期管理
  5. .net 垃圾回收机制
  6. 面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)
  7. .NET6之MiniAPI(十九):NLog
  8. 想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)
  9. ASP.NET Core Web API使用静态swagger.json文件
  10. MAUI安卓子系统调试方法(附安装教程)