升级完类库项目,第二篇,我们来升级ASP.Net Core项目

修改global.json与project.json

这里可以参照,升级.Net Core RC2的那些事(一)

这里补充一点就是如果你觉得这样修改复杂,你完全可以新建一个项目,把这两个文件拷贝过来,再加上自己引用过的包,也是可以的,看你觉得那种方法更简单点

增加Program入口类

Program.cs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Program
{
     public static void Main( string [] args)
     {
         var host =  new WebHostBuilder()
             .UseKestrel()
             .UseContentRoot(Directory.GetCurrentDirectory())
             .UseIISIntegration()
             .UseStartup<Startup>()
             .Build();
         host.Run();
     }
}

并移除Startup.cs中的

1
2
// Entry point for the application.
public static void Main( string [] args) => WebApplication.Run<Startup>(args);

修改类名和命名空间名

将所有 Microsoft.AspNet.* 的命名空间修改为 Microsoft.AspNetCore.*

参照下表修改对应的类名

旧类 新类
IWebApplicationBuilder IWebHostBuilder
WebApplicationBuilder WebHostBuilder
IWebApplication IWebHost
WebApplication WebHost
WebApplicationOptions WebHostOptions
WebApplicationDefaults WebHostDefaults
WebApplicationService WebHostService
WebApplicationConfiguration WebHostConfiguration

如果你有使用全局环境变量,也请对照下表修改

Old prefix New prefix
ASPNET_WEBROOT ASPNETCORE_WEBROOT
ASPNET_SERVER ASPNETCORE_SERVER
ASPNET_APP ASPNETCORE_APPLICATIONNAME
ASPNET_ENVIRONMENT ASPNETCORE_ENVIRONMENT
ASPNET_DETAILEDERRORS ASPNETCORE_DETAILEDERRORS

修改Logging

如果你有使用日志功能,需要修改下日志等级的配置,具体在 appsettings.json

例如:

1
2
3
4
5
6
7
8
"Logging" : {
   "IncludeScopes" false ,
   "LogLevel" : {
     "Default" "Debug" ,
     "System" "Information" ,
     "Microsoft" "Information"
   }
},

具体请对照下表:

Old Levels New Levels
Critical Critical
Error Error
Warning Warning
Information Information
Verbose Debug
Debug Trace

关于PostAsJsonAsync与ReadAsAsync

如果以前有使用 Microsoft.AspNet.WebApi.Client 的,当然现在也是可以直接引用这个包来实现Web API之间的对接的

但我在实战中发现,也许是因为引用包之间的版本冲突,会有诡异的异常,于是我自己实现了一个Helper也分享给大家

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public static class HttpClientHelper
{
     public static async Task<T> ReadAsAsync<T>( this HttpContent content)
     {
         return JsonConvert.DeserializeObject<T>(await content.ReadAsStringAsync());
     }
     public static async Task<HttpResponseMessage> PostAsJsonAsync<T>( this HttpClient client,  string url, T model)
     {
         SetHeader(client);
         return await client.PostAsync(url, SetContent(model));
     }
     private static StringContent SetContent<T>(T model)
     {
         return new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8,  "application/json" );
     }
     private static void SetHeader(HttpClient client)
     {
         client.DefaultRequestHeaders.Clear();
         client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue( "application/json" ));
         client.DefaultRequestHeaders.AcceptCharset.Add( new StringWithQualityHeaderValue( "utf-8" ));
     }
     public static async Task<HttpResponseMessage> PutAsJsonAsync<T>( this HttpClient client,  string url, T model)
     {
         SetHeader(client);
         return await client.PutAsync(url, SetContent(model));
     }
}

关于文件上传保存

以前有.SaveAsAsync,这样便捷的扩展方法保存的,现在没有了(或者说藏到了哪里目前找不到了),于是就需要手写

相关的代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (model.picdata !=  null )
             {
                 var extName = ContentDispositionHeaderValue.Parse(model.picdata.ContentDisposition).FileName.Trim( '"' );
                 int i = extName.LastIndexOf( '.' );
                 extName = extName.Substring(i);
                 string fileName = Guid.NewGuid() + extName;
                 var filePath = _hostingEnvironment.WebRootPath +  @"\upload\" + fileName;
                 //保存文件
                 using ( var fileStream =  new FileStream(filePath, FileMode.Create))
                 {
                     var inputStream = model.picdata.OpenReadStream();
                     await inputStream.CopyToAsync(fileStream);
                 }
                 //await model.picdata.SaveAsAsync(filePath);
             }

本人的项目中就这一处需要保存文件的,就不封装了:),你喜欢也可以自己封装下

关于System.Drawing

由于项目中需要使用图片处理(生成二维码),好多大神建议另外建项目调用,但我想做在一个项目中,故有此一段

首先,ASP.Net Core项目是不支持System.Drawing的,如果需要使用,则需要修改成纯 net461 的项目,这里需要修改一下project.json

1、删除 Microsoft.NETCore.App 配置节

1
2
3
4
"Microsoft.NETCore.App" : {
     "version" "1.0.0-rc2-3002702" ,
     "type" "platform"
},

2、修改 frameworks 配置节,只保留 net461 项

1
2
3
4
5
6
7
8
9
10
11
"frameworks" : {
     "net461" : {
         "frameworkAssemblies" : {
             "System.Drawing" "4.0.0.0"
         },
         "dependencies" : {
             "ThoughtWorks.QRCode" "1.1.0" ,
             "Microsoft.NETCore.Platforms" "1.0.1-rc2-24027"
         }
     }
},

这样修改完成后就可以在项目中使用 System.Drawing 命名空间了

副作用:

这样修改后,项目是不能在CoreCLR上跑的,Windows环境下不会存在问题,Linux下则需要配置Mono环境才可以

关于Session

现在光在 ConfigureServices 方法中加 services.AddSession(); 是不够的,实际使用时会报错

还需要在 Configure 方法中加 app.UseSession();

发布到IIS

通过VS发布

现在你可以像MVC5那样通过 右键菜单的 发布 功能,用Web Deploy来发布到IIS,需要注意的是目前这个工具对中文的支持不是很好,所以不要使用中文的项目名哟

通过cli发布

你也可以通过以下命令获得发布文件

1
dotnet publish -c release

然后把获得的文件通过FTP等途径上传到服务器

PS:此命令需要在 project.json 的同级目录下运行

IIS配置

IIS绑定的目录应该是最多DLL的那一层,而不是以前RC1的wwwroot

应用程序池中设置 无托管代码 等,这些基本和RC1一致

其他补充

如果你的项目存在Areas,默认是不会发布出去的,此时需修改project.json的publishOptions配置节,例如:

1
2
3
4
5
6
7
8
9
"publishOptions" : {
     "include" : [
         "wwwroot" ,
         "Views" ,
         "Areas/Admin/Views" ,
         "appsettings.json" ,
         "web.config"
     ]
},

相关文章:

  • ASP.NET Core 1.0 入门——了解一个空项目

  • ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)

  • .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介

  • 云服务器下ASP.NET Core 1.0环境搭建(包含mono与coreclr)

  • 使用VS Code开发ASP.NET Core 应用程序

  • dotnet run是如何启动asp.net core站点的

  • ASP.NET Core提供模块化Middleware组件

  • “dotnet restore"和"dotnet run"都做了些什么?

  • 探秘 dotnet run 如何运行 .NET Core 应用程序

  • .NET Portability Analyzer 已开源

  • ASP.NET Core的配置(1):读取配置信息

  • ASP.NET Core的配置(2):配置模型详解

  • .NET Core 1.0 RC2 历险之旅

  • 使用VS Code开发 调试.NET Core 应用程序

  • 让我们Core在一起:ASP.NET Core & .NET Core

  • .NET Core VS Code 环境配置

  • 官方博客明确了 .NET Core RC2/RTM 时间表

  • .NET Core全新的配置管理[共9篇]

  • 利用记事本创建一个ASP.NET Core RC2 MVC应用

  • 微软.NET 正式劈腿成功,横跨所有平台

  • .NET Core 1.0 CentOS7 尝试

  • 解读发布:.NET Core RC2 and .NET Core SDK Preview 1

  • [.NET Core].NET Core R2安装及示例教程

原文地址:http://blog.lishewen.com/post/to-upgrade-thenet-core-rc2-(2)-those-things-to-upgrade-the-core-program-at-aspnet


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

赞赏

人赞赏

升级ASP.Net Core项目相关推荐

  1. ASP.NET CORE系列【一】搭建ASP.NET CORE项目

    原文:ASP.NET CORE系列[一]搭建ASP.NET CORE项目 为什么要使用 ASP.NET Core? NET Core 刚发布的时候根据介绍就有点心里痒痒,微软的尿性都懂的,新东西bug ...

  2. 【无私分享:ASP.NET CORE 项目实战】目录索引

    简介 首先,我们的  [无私分享:从入门到精通ASP.NET MVC]   系列已经接近尾声,希望大家在这个过程中学到了一些思路和方法,而不仅仅是源码. 因为是第一次写博客,我感觉还是比较混乱的,其中 ...

  3. 各类最新Asp .Net Core 项目和示例源码

    1.网站地址:http://www.freeboygirl.com 2.网站Asp .Net Core 资料 http://www.freeboygirl.com/blog/tag/asp%20net ...

  4. 在Asp.net core 项目中操作Mysql数据库

    工程环境 : win10+asp.net core 2.1 + vs2017 步骤: 1 在vs中新建asp.net core  项目 2 在Nuget中为项目添加第三方包microsoft.visu ...

  5. [转]【无私分享:ASP.NET CORE 项目实战(第十四章)】图形验证码的实现

    本文转自:http://www.cnblogs.com/yuangang/p/6000460.html 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 很长时间没有来更新博客 ...

  6. 从零实操基于WSL2 Docker部署Asp.Net Core项目

    前言 平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Wind ...

  7. 《ASP.NET Core项目开发实战入门》送书活动结果公布

    截至2020.09.20 本次送书活动<ASP.NET Core项目开发实战入门>.下面把Top 5的留言截图给大家回顾一下. 以下5位同学将获赠书籍一本: 小林子 鉴 静 红脸先生 阿星 ...

  8. 送福利 | 送书5本《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发

    <ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...

  9. 在 ASP.NET Core 项目中使用 AutoMapper 进行实体映射

    一.前言 在实际项目开发过程中,我们使用到的各种 ORM 组件都可以很便捷的将我们获取到的数据绑定到对应的 List<T> 集合中,因为我们最终想要在页面上展示的数据与数据库实体类之间可能 ...

最新文章

  1. 华为,你终于活成了他们害怕的样子
  2. ARM、Intel、MIPS处理器的区别
  3. mysql world.sql.zip_安装mysql数据库zip版|mysqlzip
  4. Linux中文件上传使用rz
  5. hdu4888 最大流(构造矩阵)
  6. P4719 【模板】动态dp
  7. Balluff推出刀具识别系统
  8. linux6.4 安装oracle11g 出现错误ORA-01078和LRM-00109错误
  9. 总结@ 在C# 中的用法
  10. PHP数组缓存:三种方式JSON、序列化和var_export的比较
  11. 百度语义预训练ERNIE实现物流信息抽取任务
  12. AIS 2021顶级论文报告会论文征集与听众报名通知
  13. Waymo已经开始绘制亚特兰大地图数据,自动驾驶汽车路测地点又添新城
  14. 视频直播源代码,视频文件当中的存储方法
  15. MySQL字符串拼接函数介绍
  16. CS229 Lecture 1
  17. apk破解(二) 简单修改一个so文件
  18. 线性代数笔记(更新中ing)
  19. mysql如果忘记密码怎么办
  20. 用纯python脚本玩转UU加速器

热门文章

  1. 搞定WordPress的日志自动截断
  2. AspNet Core 6.0 Json写默认首字母小写(camelCase)问题
  3. 最流行的 .NET 开源项目合集
  4. C#实现网页加载后将页面截取成长图片 | Playwright版
  5. .NET 大会今日开幕 |这些白嫖福利不看肠子都悔青
  6. 聊一聊基于Nacos的metadata完成服务间的AB测试
  7. .NET 开源免费图表组件库,Winform,WPF 通用
  8. OAuth 2.0 扩展协议之 PKCE
  9. C# 如何判断某个 tcp 端口是否被占用?
  10. 日志ILog(文件日志/控制台日志/控件日志/网络日志)