壁その4は、Microsoft.AspNetCore.Diagnostics.EntityFrameworkCoreパッケージ をインストールできない問題です。
チュートリアルにProgram.csファイルに対して「データベース例外フィルターを追加する」という記載があり、そのためにMicrosoft.AspNetCore.Diagnostics.EntityFrameworkCoreパッケージを追加インストールすると書かれています。
このパッケージを使うことで、開発環境下においてアプリケーションが例外をスローしたときの処理を記述することができます。
詳細なエラー情報を得ることで、エラーの原因やスタックトレースなどのデバッグに役立たせることができるようになります。
このパッケージは、appsettings.jsonファイルで環境がDevelopmentに設定されている場合にのみ実行されるようにする必要があります。
あくまで開発環境下で使えるデバッグ用の機能です。
製品版は、上記パッケージに変わって、Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCoreパッケージへのパッケージ参照を追加する必要があるようです。
さて、チュートリアルには、まず、Microsoft.AspNetCore.Diagnostics.EntityFrameworkCoreパッケージを追加インストールし、次にProgram.csファイルに以下の赤字で示すコードを追加するように記載されています。
using ContosoUniversity.Data;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddDbContext<SchoolContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString(“SchoolContext”)));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler(“/Error”);
app.UseHsts();
}
else
{
app.UseDeveloperExceptionPage();
app.UseMigrationsEndPoint();
}
チュートリアルにMicrosoft.AspNetCore.Diagnostics.EntityFrameworkCoreパッケージの追加インストール方法の記載がありましたので、その通りに次のように行いました。
ツール>NuGetパッケージマネージャー(N)>パッケージマネージャーコンソール(O)でコンソールを出して、
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
と入力しました。
しかし、
「error: NU1202: パッケージ Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore 7.0.9 は net6.0(.NETCoreApp,Version=v6.0)と互換性がありません。パッケージMicrosoft.AspNetCore.Diagnostics.EntityFrameworkCore 7.0.9がサポートするもの:net7.0(.NETCoreapp,Version=v7.0)」
「error: パッケージ ’Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore’ は プロジェクト ‘C:\users\****\source\repos\contosoUniversity\ContosoUniversity.csproj’ の ‘all’ フレームワークとの互換性がありません。」
というエラーメッセージが表示され、パッケージの追加ができません。
エラーメッセージをよく読むと
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore のバージョンが7.0.9
.NETのバージョンが6.0
どうも、2つの間のバージョンが合わないようです。
Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore のバージョンを調べてみると、次のバージョンがあることがわかりました。
3.1.0 5.0.0 6.0.0 7.0.0 7.0.9
今回、最新の7.0.9でインストールを試みたところ互換性がなくインストールできませんでした。
.NET6.0に対してMicrosoft.AspNetCore.Diagnostics.EntityFrameworkCoreパッケージをインストールするので、互換性のあるMicrosoft.AspNetCore.Diagnostics.EntityFrameworkCoreパッケージを探ることにしました。
バージョンを指定してインストールするshellコマンドを調べたところ、dotnet add packagコマンドがありました。
今回は、Windows Power Shellを使って、コマンド実行しました。
まず、Windows Power Shellを開き、CD(チェンジディレクトリ)でプロジェクトへ移動します。
(C:\Users\〇〇〇\source\repos\ContosoUniversity\へ移動)
それから、次のコマンドを入力して、実行しました。
dotnet add package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore –version 6.0.0
version 6.0.0を指定したら、無事、パッケージが追加されました。(7.0.0はダメでした。)
そして、Program.csファイルに、開発用のデータベース例外処理のコードを書き加えることもできました。
色々なコンポーネントを組み合わせて開発するので、バージョンの互換性を意識しておかないといけないな、と気が付かせてくれる壁でした。
追記
チュートリアルは、8章に分かれています。
第1章のチュートリアルの壁は以上です。
第1章はStudentテーブルに対してデータを追加したり、編集したり、削除をしたり、表示したりするところまででした。
フレームワークの威力は大したものだと、感心しました。
プログラムコードを大して記述しなくても、これらの画面や処理を自動作成してくれました。
次回から、2章のチュートリアルに進んでいきます。