開発 - asp.net core.net framework
.NET Standardと.NET Core (5)
.NET Standard は、すべての.NET実装が提供する必要があるAPIの仕様です。 .NETファミリに一貫性をもたらし、任意の.NET実装から使用できるライブラリを構築できます。 共有コンポーネントを構築するためのPCLを置き換えます。
.NET Core は、ASP.NET Coreを使用してコンソールアプリケーション、Webアプリ、クラウドサービスを構築するために最適化された.NET Standardの実装です。 そのSDKには、Visual Studio開発に加えて、コマンドラインベースの完全な開発ワークフローをサポートする強力なツールが付属しています。 それらの詳細については、 aka.ms/netstandardfaq / aka.ms/netcore および aka.ms/netcore 。
上記、およびこの質問で説明されているほとんどの内容の非常に明確な説明は、Microsoftによる次の非常に役立つ記事(MSDN-2017年9月)で見つけることができます: .NET Standard-Demystifying .NET Core and .NET Standard
.NET Standardと.NET Coreの違いについて読みましたが、違いが何であるか、または.NET Standardライブラリプロジェクトを選択するタイミングと.NET Coreライブラリプロジェクトを選択するタイミングを本当に知りません。
.NET Standardは、使用するプラットフォームに関係なく、APIのセットが常に利用可能であることを確認することを読みました(そのプラットフォームが選択した.NET Standardバージョンと互換性がある限り)。 間違っていなければ、これは.NET Standardのクラスライブラリを作成し、それを選択した.NET Standardバージョンと互換性のあるプラットフォームで使用できることを意味します。
.NET Coreでは、クロスプラットフォームでの使用も想定しているため、.NET Coreライブラリを選択すると、.NET Standardと同様に多くのプラットフォームでも使用できるようになります。
だから最後に、私は違いを見ません。 いつどれを使うべきですか? それらの違いは何ですか?
.NET Core Classライブラリは、基本的に.NET Frameworkライブラリのサブセットであり、APIの数が少ないだけです。 .NET Core Classライブラリに固執すると、ランタイム間でコードを共有することが難しくなります。 このコードは、必要なAPIがないため、異なるランタイム(Mono for Xamarin)では機能しない場合があります。 これを解決するために .NET Standard があり ます。これは、使用できるAPIを示す仕様のセットです 。 .NET Standardの主な目的は、ランタイム間でコードを共有することです。 そして、この仕様がすべてのランタイムで実装されていることが重要です(.NET Framework、 .NET Core 、Mono for Xamarin)。
ライブラリを.NET Coreプロジェクトのみに使用することが確実な場合、.NET Standardは無視できますが、コードが.NET FrameworkまたはMono for Xamarinで使用される可能性がわずかでもある場合は、。標準
また、.NET Standardの上位バージョンにはより多くのAPIが含まれていますが、より多くのプラットフォームでサポートされている下位バージョンにも注意してください。 したがって、ランタイム間で共有する.NET Standardライブラリを作成する場合は、可能な限り低いバージョンをターゲット にします。これにより、プラットフォームの最大量に到達 でき ます。 たとえば、.NET Framework 4.5および.NET Core 1.0で実行する場合、使用できる最高の.NET Standardバージョンは.NET Standard 1.1です。 詳細については 、ドキュメントのこの素晴らしい表を参照 してください。
PS:また、ライブラリを.NET Standardに変換する場合は、.NET Portability Analyzerが役立ちます。
.NET Frameworkのことですか? .NET標準は、.NET Framework、.NET Core、Xamarinなどの実装であるためです。
Linux上でホストできるため、.NET Coreが大好きです(私の経験ではnginxを使用してください)。 IISでのみホストできる.NETフレームワークとは異なります。 この場合、ホスティング予算について考慮することができます(Windowsサーバーは私にとって高価なので)。
開発環境の観点では 、.Netコアは軽量です。 したがって、Visual Studioだけでなく、IDEにVSCode、Sublimeを使用できます。
私はあなたの疑問をさらに明確にし、ジョン・スキートの答えを広げようとします。
.NET Standardは 仕様 であるため、特定の.NET Standardバージョン用にコンパイルされたライブラリは、さまざまな.NET Standard実装で使用できます。
私の他のコメントで述べたように、.NET Standardと他の.NET Standard実装(.NET Core、.NET Frameworkなど)の関係の良い例えは、 David Fowlerによるこの要点です。 これらのインターフェースの実装です。
この関係図は、この関係を理解するのに役立ちます。
NetCore10
を対象とするものは
INetStandard15
、
INetStandard15
API
および
NetCore10
固有の
API(
DotNetHostPolicy
など)にアクセスできます。
もちろん、このライブラリを異なる
INetStandard15
実装で使用することはできません(
NetCore10
は
NetFramework462
または
Mono46
変換できません)。
代わりに、
INetStandard15
API(および具体的なフレームワークの代わりにその仕様をターゲットとする)のみにアクセスする必要がある場合、ライブラリは
それを実装するフレームワーク
(
NetCore10
、
NetFramework462
など)で使用できます。
注: 元のアナロジーでは、David Fowlerは.NET Standardバージョンとフレームワーク実装の両方のインターフェースを使用していました。 代わりに、インターフェイスとクラスを使用する方がより直感的であり、仕様と具体的な実装の関係をより適切に表していると思います。
.NET Standard は、.NET実装で利用できることを目的とした.NET APIの仕様です。 これにより、すべての.NET実装に対してBCL APIの統一されたセットを定義できます。
.NET Core は、そのような.NET Standardの実装の1つです。 .NET Frameworkは、.NET Standardの別の実装です。
.NETブログの 画像
Federicosの回答 は、各フレームワークがバージョンとともにどのように進化するかをグラフィカルに示しています。 Microsoft Docsの 図をご覧ください。
.NET Standardを Targeting するとプラットフォームのサポートが向上しますが、.NET Core(または.NET Framework)などの特定の.NETプラットフォームをターゲットにすると、そのプラットフォームのすべてのプラットフォーム機能を使用できます。