.net column
.NET開発者のためのブログメディア

.net core 3.0とは?.net core 3.0 から.net core3.1に移行する方法や注意点を解説!

2021年05月31日
SE
.net core 3.0を.net core 3.1に移行するとき、どのようなことに注意すればいいですか。
PM
以前のバージョンに対応していない機能があるので注意が必要です。

.net core 3.0とは?


「.net core 3.0」とは、Microsoftがリリースしたオープンソースのソフトウェアフレームワーク.NET Coreシリーズのひとつです。

.net coreシリーズはWindows専用の「.NET Framework」とは異なり、様々なOSに対応しているため、クロスプラットフォームで動作するのが特徴です。また、SDKも無料で配布されていて、VisualStudioがあれば簡単にアプリケーションを制作できます。

しかし、.net core3.1や.NET 5がリリースされているので、新しく開発する場合は特に.net core 3.0を使う必要はないでしょう。

3.0から3.1の移行はそれほど難しくないので、3.1に移行することをおすすめします。

.net core 3.0 から.net core3.1に移行するには?


様々な方法がありますが、バージョンアップ自体は難しくありません。注意する点は変更点を知っておくことぐらいでしょう。

かつて「.net core 2.2」から「.net core 3.0」にバーションアップする際は多かった修正も、「.net core 3.0」から「.net core 3.1」に移行する場合は、C#的にはそれほど変更はありません。

ビルドが通れば問題が出にくいので、試しにバージョンアップしてからビルドしてみると良いでしょう。

.net core 3.0から.net core 3.1に移行する必要はあるのか?

.net core 3.1は2022年までの長期保証(LTS)版なので、特に理由がなければ.net core 3.1に移行するケースがほとんどです。

既に.NET 5が出ていますが、こちらはLTS版ではないので.NET 6を待つのも方法の一つです。ただし、net core 3.1の保証もいずれは終了するので、.NET 5の挙動を確認するのも良いですが、開発する際は用途に応じてSDKをダウンロードしましょう。

.net core 3.0から.net core 3.1に移行するときの注意点

移行の際の注意点は、以前のバージョンに対応していない機能があることです。

変更点は大きく分けてSameSiteとMSBuild、そしてWindowsフォームの影響の3点です。いずれも対処はそれほど難しいものではなく、SameSite以外は、特に意識しなければ使っていない人がほとんどでしょう。

簡単に説明すると、Googleのブラウザのクッキーに関する仕様変更とビルドと、表示関係に関する変更です。それぞれの対処法を次項で解説します。

SameSiteの移行の対処方法とは

この修正は、GoogleによるCookieの使用の改変により大きな仕様変更があったもので、Edge以外でのブラウザは新しい値を受けると動作が停止する可能性があります。

.net core 3.0からの変更で気をつけるべき部分はこの程度でしょう。

この対処法としては、if関数 if (options.SameSite == SameSiteMode.None)を記述して、該当する値があった時に例外処理を書くことで回避できます。 公式サイトの引用を参考に修正しましょう。

なお、公式サイトでは、「Startup.cs」 を直接修正することが推奨されています。

C#
———
private void CheckSameSite(HttpContext httpContext, CookieOptions options)
{
if (options.SameSite == SameSiteMode.None) {
var userAgent = httpContext.Request.Headers[“User-Agent”].ToString();
if (/* UserAgent doesn't support new behavior */){
options.SameSite = SameSiteMode.Unspecified;
}
}
}

public void ConfigureServices(IServiceCollection services)
{
services.Configure(options =>
{
options.OnDeleteCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
options.OnAppendCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
});
}

public void Configure(IApplicationBuilder app)
{
app.UseAuthentication();
app.UseCookiePolicy();
}
———

あるいは、動作を無視するオプトアウト機能を使うこともできます。

Microsoft.AspNetCore.SuppressSameSiteNone 互換性スイッチを使用するとASP.NET Core Cookieを無視できます。
プロジェクトの runtimeconfig.template.json ファイルに以下のJSONを記述すればオプトアウトすることができます。

JSON
——-
{
“configProperties”:
{
“Microsoft.AspNetCore.SuppressSameSiteNone”: “true”
}
}

———

MSBuildの変更に対する対処法とは

MSBuildは、パッケージの依存関係の参照の簡略化を目的とした変更が行われました。3.1.4からの変更で、RunResolvePackageDependencies ターゲットから最上位のパッケージ参照だけが提示されるように変更されています。

必要のない参照をビルドしないようにしてくれる機能なので、あまり気にすることはないでしょう。

しかし、これで何かしらの不具合が出た場合など、3.0以前の使用に戻してみたいという時には設定が必要です。

その場合はプロジェクトファイルを開き、 EmitLegacyAssetsFileItems プロパティを true に変更すると元の設定に戻ります。

Windowsフォームの変更に対する対処法とは

こちらは、.NET Framework 2.0で導入されたような古いUIの変更です。

もともと非推奨のフォームで、3.0時点でデザイナーツールボックスから選択できないようになっています。そのため、3.0での開発をした場合は、ほぼ変更点はないでしょう。

ただし、古いアプリケーションのアップデートの場合は修正が必要になるケースがあります。

代価できる新しいメソッドが準備されていますので、もしエラーが発生した場合は、以下のフォーム変更に関するMicrosoft公式ページを参考にひとつひとつ代価する必要があります。

3.0から3.1にバージョンアップする方法

変更点が確認できれば、バージョンアップはそれほど難しいものではありません。

まず、マイクロソフト公式ページからSDKをダウンロードします。VisualStudioやVisualStudio Codeのバージョンは最新のものにしましょう。

プロジェクトのプロパティを開き、アプリケーションタブの対象フレームワークを3.1に切り替えます。

この時、直接ターゲットファイルを書き換えても構いませんが、初心者にはとっつきにくいのでVisualStudioを使用すると楽に行えます。なお、直接編集するときはターゲットフレームワークを編集していきます。

diff
———

- < TargetFramework>netcoreapp3.0< /TargetFramework>
+ < TargetFramework>netcoreapp3.1< /TargetFramework>

———
global.jsonに依存している場合はそちらに書き換えましょう。

diff
———

{
“sdk”: {
- “version”: “3.0.101”
+ “version”: “3.1.101”
}
}

______

また、パッケージを参考にしている場合も各パッケージを3.0から3.1に対応させましょう。

プロジェクトファイルの各Microsoft.AspNetCore.* パッケージを参照し、Versionを3.1.以降の新しいものにします。

Version=“3.0.x”と書かれたものをVersion=“3.1.x”にします。xの部分は置き換えたいバージョンの数字を入れ替えてください。特に3.1内のバージョン違いで不具合があることは報告されていないので3.1の最新版のv3.1.12SDKをダウンロードして書き換えた方が良いでしょう。
———

< ItemGroup>
- < PackageReference Include=“Microsoft.AspNetCore.Mvc.NewtonsoftJson” Version=“3.0.0” />
- < PackageReference Include=“Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation” Version=“3.0.0” Condition=“'$(Configuration)' == 'Debug'“ />
+ < PackageReference Include=“Microsoft.AspNetCore.Mvc.NewtonsoftJson” Version=“3.1.12” />
+ < PackageReference Include=“Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation” Version=“3.1.12” Condition=“'$(Configuration)' == 'Debug'“ />
< /ItemGroup>

———
dockerを使用する場合も3.1に対応させましょう。

コンソールからプルしてください。
docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1

これでバージョンアップが可能です。ビルドしてみてエラーが出たら変更点の違いを参考に修正すれば移行が完了します。このほか、XMLに埋め込んでいる場合なども修正すると良いでしょう。

変更点があまりにも多すぎる時はバージョンアップしない手もありますが、サポートが終了すればアプリを使用する際に動作に不具合が出る可能性も出てきます。

長期的なアプリケーションの提供をする場合は積極的にバージョンアップについての情報を仕入れて開発しましょう。

ここでは割愛しますがGitでバージョン管理をしているのであれば、ブランチを分けたり変更を巻き戻したりできますので、併せて使用すると良いでしょう。

面倒であれば、バージョンを一斉検索して問題がなさそうなら置換してしまっても良いでしょう。不具合が出たら元に戻せば良いので、後学のためにもバージョンアップを試してみることをおすすめします。

SE
net core 3.0のバージョンアップの方法、よく分かりました。
PM
ご紹介したことに注意してバージョンアップしてください。

.net core 3.0 についてのまとめ


.net core 3.0は新しいバージョンである3.1や.NET5への移行がそれほど難しくないSDKです。

3.1への変更はブラウザ上の仕様変更もありますので、3.0のデバッグでエラーが出ていなくても、ブラウザ上で動作に不具合が出る可能性があります。

修正点もそこまで重くないことを考えれば、今からWebアプリケーションの開発をされる方であれば、あえて3.0を使う必要はないので.NET5や.net core 3.1を使った方が良いでしょう。

また、すでに3.0で制作している方がバージョンアップをしたい場合は、本記事やMicrosoft公式ページを参考にしてみてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags