公式に.NET Core マイグレーションの方法があがっているので、実践してみます。 docs.microsoft.com
シンプルな.NETCore1.1のWebアプリケーションをASP.NETCore2.0にマイグレーションして見ます。 Visual Studio 2017を操作してやっていこうと思います。
ターゲットフレームワークをアップデートする
対象プロジェクトを右クリック > プロパティ > ターゲットフレームワーク
.NET Core 1.1 → .NET Core 2.0
へ変更する。
NuGetパッケージ更新
.NET Core 2.0 に伴い、パッケージの依存関係が整理され、
参照が1つのパッケージに統一されたようです。
それにあわせて依存関係を整理します。
docs.microsoft.com
依存関係を右クリック > NuGetパッケージの管理 からNuGetパッケージマネージャーを開く
“インストール済み"タブ を開き、不要なパッケージをアンインストール
これを↓のような感じに
Microsoft.AspNetCore.All
をインストール
検索してインストールする。
“インストール済み"タブは↓の様になります。
.NET Core CLI tools を更新する
こちらはVisual Studio上からの更新方法がわからず、.csprj
を直接更新しました。
私の環境では下記の様に更新しました。
■変更前
<ItemGroup> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" /> </ItemGroup>
■変更後
<ItemGroup> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> </ItemGroup>
PackageTargetFallbacの更新
こちらも直接.csprj
を更新しました。
■変更前
<PropertyGroup> <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback> </PropertyGroup>
■変更後
<PropertyGroup> <AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> </PropertyGroup>
Program.cs
の更新
公式ドキュメントを確認して更新する。
Startup.cs
の更新
公式ドキュメントには記載がなかったですが、
ASP.NET Core 2.0 への更新によりStartup.cs
の内容も変更されています。
Configurationの設定、configのバインド周りやロギングの設定記載が削除されています。
この辺りはもう少し詳細まで内容を確認しないとなと思っています。
コードは下記のように変更しました。
(新規にASP.NET Core 2.0アプリケーションを作成した場合と同じ内容です。)
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } }
デプロイ・実行
ローカルIISにサイトを構築、実行してみました。
普通にいけるかと思いきやエラーが出て少しはまりました。
(レスポンスが500だったのですが、ASP.NET Coreアプリでの、IIS詳細詳細エラー表示が上手くいかず、原因特定に時間がかかりました・・・)
dotnet run
実行 → localhostへアクセスしてみると↓スタックトレースが。
Unhandled Exception: System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider' has been registered.
■エラー原因
NuGetパッケージ参照からMicrosoft.ApplicationInsights.AspNetCore
アンインストールしたため、_Layout.cshtml
内のメソッド呼び出しで例外が発生していた。
https://developercommunity.visualstudio.com/content/problem/50735/applicationinsights-javascriptsnippet-exception-wi.html
■対応
_Layout.cshtml
から下記2行削除で正常に表示されました
@inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet @Html.Raw(JavaScriptSnippet.FullScript)
■再実行
正常に表示されました。
デフォルトままのWebアプリケーションだったので特筆することはなかったですが、ASP.NET Core 2.0での変更点などを確認・整理できてよかったです。
参考
Exploring Program.cs, Startup.cs and CreateDefaultBuilder in ASP.NET Core 2 preview 1
ASP.NET Core RC2でHelloWorld~EntryPointとStartupも探る - ryuichi111stdの技術日記