升级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.*
參照下表修改對應的類名
| 舊類 | 新類 |
| IWebApplicationBuilder | IWebHostBuilder |
| WebApplicationBuilder | WebHostBuilder |
| IWebApplication | IWebHost |
| WebApplication | WebHost |
| WebApplicationOptions | WebHostOptions |
| WebApplicationDefaults | WebHostDefaults |
| WebApplicationService | WebHostService |
| WebApplicationConfiguration | WebHostConfiguration |
如果你有使用全局環境變量,也請對照下表修改
| 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" ?? } }, |
具體請對照下表:
| 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项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Entity Framework升级
- 下一篇: 升级.Net Core RC1的类库项目