升级ASP.Net Core项目

升级完类库项目,第二篇,我们来升级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.*

参照下表修改对应的类名

旧类新类
IWebApplicationBuilderIWebHostBuilder
WebApplicationBuilderWebHostBuilder
IWebApplicationIWebHost
WebApplicationWebHost
WebApplicationOptionsWebHostOptions
WebApplicationDefaultsWebHostDefaults
WebApplicationServiceWebHostService
WebApplicationConfigurationWebHostConfiguration

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

Old prefixNew prefix
ASPNET_WEBROOTASPNETCORE_WEBROOT
ASPNET_SERVERASPNETCORE_SERVER
ASPNET_APPASPNETCORE_APPLICATIONNAME
ASPNET_ENVIRONMENTASPNETCORE_ENVIRONMENT
ASPNET_DETAILEDERRORSASPNETCORE_DETAILEDERRORS

修改Logging

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

例如:

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

具体请对照下表:

Old LevelsNew Levels
CriticalCritical
ErrorError
WarningWarning
InformationInformation
VerboseDebug
DebugTrace

关于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"
     ]
},


相关文章:


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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gophp解释器_【干货】Gisp 解释器 Golang 辅助开发工具

Gisp 是一个提供给 golang 使用的 Lisp 类 DSL 解释器。在 Lisp 的基本语法基础上&#xff0c;针对 go 环境稍作了一点语法糖。主要目标是提供一个尽可能便于与 golang 互操作的微型DSL工具。简介Gisp用go语言编写&#xff0c;是一个DSL 解释器&#xff0c;这个 DSL 基本上就是…

Oracle入门(十四.8)之迭代控制:基本循环Loop

一、迭代控制&#xff1a;LOOP语句 循环多次重复一个语句或一系列语句。 PL / SQL提供了以下几种类型的循环&#xff1a;•没有全面条件执行重复操作的基本循环 •FOR循环&#xff0c;基于计数器执行迭代操作•WHILE循环根据条件执行重复操作二、基本循环LOOP语句的最简单形式…

phpst安装memcache扩展_在 Ubuntu/Debian 下安装 PHP7.3 教程

介绍最近的 PHP 7.3.0 已经在 2018 年12月6日 发布 GA&#xff0c;大家已经可以开始第一时间体验新版本了&#xff0c;这里先放出 PHP7.3 安装的教程以便大家升级。适用系统&#xff1a; Ubuntu 18.04 LTS / Ubuntu 16.04 LTS &#xff0f; Ubuntu 14.04 LTS / Debian 9 stretc…

升级.Net Core RC1的类库项目

微软终于发布了.Net Code RC2了&#xff0c;作为一个软粉当然是第一时间升级了。《升级.Net Core RC2的那些事》系列文章主要是记录本人升级RC2的相关步骤以及遇到过的坑。 第一篇先写类库项目&#xff08;Nuget包项目&#xff09;的升级 升级VS工具 这里只提供一个下载地址&am…

Oracle入门(十四.9)之迭代控制:WHILE和FOR循环

一、WHILE循环您可以使用WHILE循环重复一系列语句&#xff0c;直到控制条件不再为TRUE。 条件在每次迭代开始时进行评估。当条件为FALSE或NULL时&#xff0c;循环终止。 如果条件在循环开始时为FALSE或NULL&#xff0c;则不会执行进一步的迭代。 WHILE condition LOOPstatement…

为TFS配置跨平台的生成服务器Xplat (Ubuntu Linux)

1. 概述 从TFS 2015开始&#xff0c;微软开始支持跨平台的构建代理。你可以使用TFS的Xplat代理&#xff0c;方便的在基于IOS, Unix和Linux的服务器上搭建生成代理&#xff0c;实现构建、发布等功能。本文档已Ubuntu为例&#xff0c;指导如何安装和运行Xplat代理。 2. 配置TFS的…

分数优先遵循志愿php源码_分数优先 遵循志愿

本报讯 昨日&#xff0c;广东省考试院发布2019年我省普通高校招生平行志愿投档及录取实施办法。今年我省依旧实行普通高校招生平行志愿投档录取模式&#xff0c;按照“分数优先、遵循志愿”的原则&#xff0c;根据考生高考成绩高低排序和院校志愿先后顺序投档&#xff0c;投出…

Oracle入门(十四.10)之显式游标简介

一、上下文区域和游标Oracle服务器分配一个称为上下文区域的私有内存区域来存储由SQL语句处理的数据。 每个上下文区域&#xff08;因此每个SQL语句&#xff09;都有一个与其关联的游标。您可以将游标视为上下文区域的标签&#xff0c;或者将其作为指向上下文区域的指针。 事实…

1.(转)canal背景与工作原理

【README】 1.canal是一个工具&#xff0c;由阿里开源&#xff0c;用于解析mysql的binlog增量日志&#xff0c;重放日志还原出业务数据&#xff0c;下游可以送入 es&#xff0c;mysql&#xff0c;hbase等&#xff1b; 2.本文以下内容转自&#xff1a;GitHub - alibaba/canal:…

Dapper、Entity Framework 和混合应用

你大概注意到了&#xff0c;自 2008 年以来&#xff0c;我写过许多关于 Entity Framework&#xff08;即 Microsoft 对象关系映射器 (ORM)&#xff09;的文章&#xff0c;ORM 一直是主要的 .NET 数据访问 API。市面上还有许多其他 .NET ORM&#xff0c;但是有一个特殊类别因其强…

html让时间只展示年月日_如何用html写代码,使得在网页上显示当前的时间和日期...

展开全部在网页62616964757a686964616fe59b9ee7ad9431333363363537中动态的显示日期时间&#xff0c;一般都是使用js来实现&#xff0c;很简单&#xff0c;一看就会。网页中动态的显示系统日期时间function startTime(){var todaynew Date();//定义日期对象var yyyy today.get…

Oracle入门(十四.11)之使用显式游标属性

一、游标和记录 此示例中的游标基于SELECT语句&#xff0c;该语句仅检索每个表行的两列。 如果它检索了六列或七&#xff0c;八&#xff0c;二十个呢&#xff1f; DECLAREv_emp_id employees.employee_id%TYPE;v_last_name employees.last_name%TYPE;CURSOR emp_cursor ISSEL…

(转 )centos8安装mysql

【1】下载 mysql rpm包 MySQL :: Download MySQL Yum Repositoryhttps://dev.mysql.com/downloads/repo/yum/ 【2】安装mysql 根据官方文档安装&#xff0c;如下&#xff1a; MySQL :: A Quick Guide to Using the MySQL Yum Repositoryhttps://dev.mysql.com/doc/mysql-yu…

IIS负载均衡-Application Request Route详解第一篇: ARR介绍

说到负载均衡&#xff0c;相信大家已经不再陌生了&#xff0c;本系列主要介绍在IIS中可以采用的负载均衡的软件&#xff1a;微软的Application Request Route模块。 其实Application RequestRoute已经有很多文章介绍过了&#xff0c;但是有很多的文档都是英文的&#xff0c;笔者…

单位矩阵的逆矩阵是它本身吗_矩阵运算、单位矩阵与逆矩阵(二)

逆矩阵什么是逆矩阵&#xff1f;数有倒数&#xff1a;逆矩阵也是相同的概念&#xff0c;但我们写为A-1逆矩阵的定义计算逆矩阵我们怎么知道计算结果是正确的&#xff1f;我们把矩阵和逆矩阵相乘来看看&#xff1a;我们为什么需要逆矩阵&#xff0c;举个例子&#xff1a;一帮人坐…

Oracle入门(十四.12)之游标FOR循环

一、游标FOR循环游标FOR循环处理显式游标中的行。 这是一个快捷方式&#xff0c;因为游标被打开&#xff0c;循环中的每次迭代都会获取一次行&#xff0c;当处理最后一行时会退出循环&#xff0c;并且游标会自动关闭。 当最后一行被提取时&#xff0c;循环本身在迭代结束时自动…

结合Jexus + Kestrel 部署 asp.net core 生产环境

ASP.NET Core 是微软的全新的框架。这一框架的目标 ︰ 跨平台针对云应用优化解除 System.Web 的依赖。 获得下面三个方面的优势&#xff0c;你可以把它认为是一个C# 版本的NodeJS&#xff1a; 1&#xff09; 模块化实现 2&#xff09; 一切都尽可能的-异步 3&#xff09; 依赖关…

centos普通用户修改文件权限_用户管理(特殊权限、特殊属性、umask 默认权限 )

特殊权限suidLinux 系统文件除了9位基本权限&#xff0c;还有额外3位特殊权限&#xff0c;分别是  SUID(set uid)&#xff0c; -rwsr-xr-x  SGID(set gid)&#xff0c; -rw-r-sr-x  SBIT(sticky bit), -rw-r-xr-t  这3位特殊权限不建议使用(除系统默认的特殊权限可…

Oracle入门(十四.13)之带参数的游标

一、带参数的游标参数是一个变量&#xff0c;其名称用于游标声明中。 当游标打开时&#xff0c;参数值被传递给Oracle服务器&#xff0c;Oracle服务器使用它来决定要将哪些行检索到光标的活动集中。这意味着您可以在块中多次打开和关闭显式光标&#xff0c;或者在同一个块的不同…

4.canal抽取失败报is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts‘

【README】 1.本文po出了报错【messageXXX is blocked because of many connection errors; unblock with mysqladmin flush-hosts】的解决方法&#xff1b; 2.解决方法参考了 StackOverflow&#xff1a; mysql - How to unblock with mysqladmin flush hosts - Stack Overfl…