Microsoft は、.NET Framework と .NET Core という 2 つの異なる .NET ランタイムを提供しています。どちらも .NET Standard を実装しており、それぞれの間のコードにはかなりの相互互換性がありますが、.NET Framework は Windows でのみ動作します。 2 つのランタイムの違いについて説明します。
簡単な答え: クロスプラットフォーム互換性
簡単な答えは、.NET Core は Linux と macOS で動作するのに対し、.NET Framework は Windows でのみ動作するということです。クロスプラットフォーム互換性が必要な場合は .NET Core を使用し、.NET Core に移植されていない Windows 固有のサービスと NuGet パッケージが必要な場合は .NET Framework を使用します。
.NET Core は .NET Framework の後継であるため、今後は間違いなく選択する必要があります。いくつかの Windows のみの機能が残りますが、これらの多くは Windows 互換機能パック 拡張機能で引き続きサポートできます。
全体的なコアとフレームワークはほぼ同じですが、実際にはいくつかのわずかな違いがあります。 .NET Core と .NET Framework はどちらも .NET Standard と呼ばれる同じ API を使用しますが、Core はオープンソースであるのに対し、Framework は Microsoft の Windows 専用実装です。
一般に、Core は Framework よりも若干軽量です。これは、Core がマイクロサービス ベースのバックエンドで Docker 向けに設計されており、Docker とともによく使用されるためです。そもそも Linux を使用できることに加えて (Docker に必要)、.NET Core を使用すると、結果として得られるイメージが少し小さくなります。
さらに、違いのほとんどは NuGet パッケージの違いにあります。たとえば、Entity Framework Core は、.NET Framework 上で実行される Entity Framework 6 とは少し異なります。 ASP.NET Core は、.NET Core 用に多くの部分が再設計されているため、ASP.NET 4 とは大きく異なります。
.NET Core を使用する場合
次の場合は、.NET Framework ではなく .NET Core を使用する必要があります。
- クロスプラットフォームの互換性が必要です。これには、Docker およびマイクロサービス アーキテクチャの使用が含まれます。
- 新しいプロジェクトを開始しようとしているので、必要なのは 1 つ選択することだけです。 (.NET Core の方が新しいです。)
- .NET Framework に依存する Windows 固有のツール、ライブラリ、または NuGet パッケージを使用していません。
- 可能な限り最高のパフォーマンスが必要です。 Microsoft では、.NET Framework 上で ASP.NET を備えた .NET Core を推奨しています。
- 複数のバージョンの .NET Core を並行して実行したいと考えています。フレームワークはこれをサポートしていません。
- Linux で CLI アクセスが必要な場合、または Linux で CI/CD ビルド サーバーを実行する場合。
.NET Framework を使用する場合
次の場合は、.NET Core ではなく .NET Framework を使用する必要があります。
- Windows 展開のみを対象としています。
- Windows フォーム、WPF、ASP.NET Web フォーム/ページ、Windows Workflow Foundation などの Windows パッケージとライブラリを頻繁に使用します。
- 使用しているテクノロジは 、.NET Core 用の Windows 互換機能パック によって追加されたものではありません。
- すでに使用しているので、移行するのは大変な労力です。
.NET 5は間もなく登場します
2020 年 11 月にリリース予定の .NET 5 ランタイム には多くの改善が加えられていますが、最も重要なのは、2 つの異なるランタイムに統一性をもたらすことが約束されていることです。 Microsoft は両方のランタイムの長所を 1 つのパッケージに統合することに重点を置いているため、「コア」または「フレームワーク」という名前はありません。
WPF と Windows フォームは、.NET 5 だけでなく、その他の多数の互換性修正でもサポートされています。これは .NET Framework の完全な代替品ではありませんが、両方のプラットフォームで十分に動作するはずです。 Microsoft はまだ .NET Framework のサポートを終了していませんが、今後は段階的にサポートを終了する可能性があります。
.NET Core に切り替える方法
通常、.NET Core 上で機能している既存のプロジェクトは古い .NET Framework に切り替える必要がない可能性が高いため、これは「Framework -> Core に切り替える方法」になります。
Windows 固有のものを使用している場合は、それはできません。使用しているコンポーネントが Core バージョンを取得するまでは .NET Framework を使用することになりますが、ASP.NET WebForms の場合のように、いくつかのことは発生しません。
最も簡単な解決策は、.NET Core に基づいて新しいソリューションとプロジェクトを作成し、コードを転送することです。単純なアプリをお持ちの場合は、これが最も簡単な解決策である可能性があります。
それ以外の場合は、次を使用できます
< a href = "https://github.com/dotnet/try-convert" > dotnet try-convert </ a >
または、 Microsoft の移植ガイド に従ってください。
大規模で複雑なプロジェクトの場合は、 .NET Portability Analyzer を 使用できます。これは Microsoft が提供するツールで、プロジェクトをスキャンし、変換の難易度を示し、次のステップをどのようにするべきかを示します。また、依存関係の有向グラフを作成することもでき、他に分析が必要なものを確認するのに役立ちます。一部のプロジェクトは他のプロジェクトよりも移植が難しく、Core で利用できないものを使用している場合は、回避策がなければまったく移植できない可能性があります。





