更新文檔:
<a href="http://dotnet.github.io/docs/core-concepts/dnx-migration.html">Migrating from DNX to .NET Core</a>
<a href="https://docs.asp.net/en/latest/migration/rc1-to-rc2.html">Migrating from ASP.NET 5 RC1 to ASP.NET Core 1.0 RC2</a>
<a href="https://docs.efproject.net/en/latest/miscellaneous/rc1-rc2-upgrade.html">Migrating your Entity Framework Code from RC1 to RC2</a>
之前,使用 ASP.NET 5 RC1 開發了一個項目,并且這個項目已經用于生産環境,項目中包含的一些東西:
ASP.NET 5 Web 和 ASP.NET 5 WebApi 項目
xUnit 單元測試(包含對 WebApi 的測試)
EntityFramework 程式包
AutoMapper 程式包
自定義開發的程式包
Bootstrap 前端架構
Log 日志記錄
Identity 身份驗證
HttpClient 調用其他 WebApi
現在要更新到 ASP.NET Core 1.0 RC2,官方更新文檔隻是簡單的介紹了下,實際更新的過程中還是遇到了不少的問題,我們平常開發 ASP.NET 應用程式,上面所列出的東西基本都包含了,是以,下面紀錄更新的過程,包含一些問題和解決方式,希望可以幫助到大家。
更新的首要前提,開發環境需要安裝:
<a href="https://go.microsoft.com/fwlink/?LinkId=798481">Visual Studio official MSI Installer</a>
<a href="https://dist.nuget.org/visualstudio-2015-vsix/v3.5.0-beta/NuGet.Tools.vsix">NuGet Manager extension for Visual Studio</a>
然後,我們打開 ASP.NET 5 RC1 應用程式的解決方案:

映入眼簾的是程式包還原失敗,并且是一大堆錯誤:
什麼鬼?有點莫名其妙,程式包還原失敗的原因是,在原有的程式包源中找不到了,具體就是微軟把相關程式包都删掉了,好坑啊,我還以為是程式包源變更了,後來我找了當時的好幾個程式包源,試了都不行,那是不是所有的程式包都删掉了?其實不是,微軟隻保留了這種<code>1.0.0-rc1-final</code>版本的程式包,其他的基本上都删掉了,比如下面的這種版本程式包:
當時 ASP.NET Core 1.0 RC2 一釋出出來,我開發環境就安裝更新了,然後前幾天這個項目有一個 bug 需要進行修複,打開之後就是上面這個鳥樣,是以,修複 bug 必須要更新到 RC2 版本,這也是我這次更新的主要原因。
首先,我們需要把所有程式集的<code>project.json</code>配置,由原有的(示例):
修改為(示例):
上面主要是<code>frameworks</code>的配置更改,并且去除了<code>tags</code>、<code>projectUrl</code>和<code>licenseUrl</code>,<code>netcoreapp1.0</code>的前身是<code>dnxcore50</code>,意思是跨平台,為什麼需要需要添加<code>imports</code>配置?主要是為了相容,詳細看上面的那篇文章。
<code>frameworks</code>的配置修改好之後,下面就是程式包的版本更新了,我大概記錄了一些:
Old Version
New Version
"EntityFramework.Core": "7.0.0-rc2-16432"
"Microsoft.EntityFrameworkCore": "1.0.0-rc2-final"
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc2-16432"
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final"
"Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc2-16160"
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0-rc2-final"
"Microsoft.AspNet.DataProtection.Extensions": "1.0.0-rc2-15874"
"Microsoft.AspNetCore.DataProtection.Extensions": "1.0.0-rc2-final"
"Microsoft.AspNet.Diagnostics": "1.0.0-rc2-16303"
"Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final"
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc2-15994"
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final"
"Microsoft.AspNet.Mvc": "6.0.0-rc2-16614"
"Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final"
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc2-16614"
"Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.0-rc2-final"
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc2-16156"
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final"
"Microsoft.AspNet.StaticFiles": "1.0.0-rc2-16036"
"Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final"
"Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc2-15905"
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final"
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-15905"
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final"
"Microsoft.Extensions.Logging": "1.0.0-rc2-15907"
"Microsoft.Extensions.Logging": "1.0.0-rc2-final"
"Microsoft.Extensions.Logging.Console": "1.0.0-rc2-15907"
"Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final"
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-15907"
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final"
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc2-16142",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc2-final"
還有一些其他的後面再說下,我們可以先更改代碼,然後根據 VS 2015 的提示“安裝對應程式包”功能,可以很友善的進行更新,如圖:
将<code>frameworks</code>修改為<code>netcoreapp1.0</code>之後,<code>Serializable</code>的引用找不到了。
解決方式:添加<code>"System.Runtime.Serialization.Formatters": "4.0.0-rc3-24113-00"</code>程式包。
原先代碼:
修改為:
如果程式集中引用了<code>"Microsoft.EntityFrameworkCore": "1.0.0-rc2-final"</code>程式包,需要将<code>frameworks</code>修改如下:
否則會出現下面的錯誤:
<a href="https://xunit.github.io/docs/getting-started-dotnet-core.html">Getting started with xUnit.net (.NET Core / ASP.NET Core)</a>
<code>Microsoft.AspNet.TestHost</code>程式包,在 .NET Core RC2 版本被移除了,是以我們沒辦法對 WebApi 進行測試了(應該有其他的解決方式,待研究),原有的寫法(雖然還是可以引用<code>1.0.0-rc1-final</code>版本,但和 RC2 已經不相容了):
xUnit 單元測試的相關代碼,基本上不需要更改,我們隻需要更新下<code>project.json</code>的配置,原先配置:
除了使用 VS 2015 的 Test Explorer 跑單元測試之外,我們還可以使用新的<code>dotnet test</code>指令。
增加<code>Program.cs</code>:
并添加<code>web.config</code>(移除<code>wwwroot</code>目錄下的<code>web.config</code>):
之前引用的<code>"Serilog.Framework.Logging": "1.0.0-*"</code>日志元件,現在已被棄用,需要重新引用:
日志代碼配置:
<code>appsettings.json</code>檔案中的<code>Logging: LogLevel</code>配置更改:
Old Levels
New Levels
Critical
Error
Warning
Information
Verbose
Debug
Trace
移除<code>app.UseIISPlatformHandler();</code>配置。
<code>_ViewImports.cshtml</code>檔案中的:
并引用<code>"Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.0-rc2-final"</code>程式包。
<code>CookieAuthentication</code>配置更新為:
完整的<code>Startup.cs</code>代碼:
首先,ASP.NET Core 1.0 RC2 的釋出有兩種方式:
Portable:便攜式,釋出不包含運作時檔案,伺服器需要安裝 .NET Core。
Self-Contained:攜帶式,釋出包含運作時檔案,伺服器不需要安裝 .NET Core。
預設是 Portable 的釋出方式,和 ASP.NET 5 RC1 所不同的是,ASP.NET Core 1.0 RC2 隻能通過<code>dotnet publish</code>的指令進行釋出。
<code>project.json</code>配置代碼:
<code>dotnet publish</code> 指令釋出:
釋出生成目錄為:<code>\CNBlogs.Ad.Web\bin\Debug\netcoreapp1.0\publish</code>,目錄結構:
<code>runtimes</code>目錄下有各個平台的<code>native</code>檔案,其作用就是即時編譯,<code>publish</code>目錄除了基本的程式集之外,并沒有運作時的檔案。
根目錄下的<code>web.config</code>配置:
并去除<code>dependencies</code>程式包的<code>platform</code>配置:
<code>dotnet publish</code> 指令重新釋出,目錄結構:
和上面的 Portable 釋出不同的是,釋出檔案中多了<code>coreclr.dll</code>等,并且由<code>CNBlogs.Ad.WebApi.dll</code>變成了<code>CNBlogs.Ad.WebApi.exe</code>,我們甚至直接可以點選<code>CNBlogs.Ad.WebApi.exe</code>運作網站,根目錄下的<code>web.config</code>配置:
IIS 和之前的 ASP.NET 5 RC1 釋出配置一樣,建立 Web 站點,然後綁定釋出目錄就行,應用程式池的模式需要改為“無代碼托管”。
本文轉自田園裡的蟋蟀部落格園部落格,原文連結:http://www.cnblogs.com/xishuai/p/upgrade-aspnet5-rc1-to-aspnet-core1-rc2.html,如需轉載請自行聯系原作者