[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
質問
Visual Studioでは、少なくとも3種類のクラスライブラリを作成することができます。
- クラスライブラリ(.NET Framework)
- クラスライブラリ(.NET標準)
- クラスライブラリ(.NET Core)
前者は私たちが長年使ってきたものですが、私が抱えている大きな混乱ポイントは、.NET Standardと.NET Coreのクラスライブラリタイプをいつ使うか、ということです。最近、次のようなことを試みたときに、この問題に直面しました。 異なるフレームワークのバージョンをマルチターゲットにする と ユニットテストプロジェクトの作成 .
では、次のような違いがあるのでしょうか。 クラスライブラリ(.NET標準) と クラスライブラリ(.NET Core) なぜ両方が存在するのか、どのような場合にどちらかを使うべきなのか。
解決方法は?
<ブロッククオートどのような場合に、どちらを使うべきでしょうか?
互換性とAPIアクセスのトレードオフで決定します。
ライブラリと互換性のあるアプリケーションの数を増やし、ライブラリがアクセスできる.NET APIの表面積が減少しても構わない場合は、.NET標準ライブラリを使用します。
ライブラリがアクセスできる.NET APIサーフェスエリアを拡大したい場合、また、ライブラリと互換性のある.NET Coreアプリケーションのみを許可しても構わない場合は、.NET Coreライブラリを使用します。
例えば、.NET Standard 1.3 をターゲットとしたライブラリの場合
との互換性があります。
.NET Framework 4.6、.NET Core 1.0、Universal Windows Platform 10.0 および .NET Standard 1.3 をサポートするその他のプラットフォームを対象とするアプリケーションをサポートします。ただし、このライブラリは、.NET APIの一部にアクセスすることはできません。たとえば
Microsoft.NETCore.CoreCLR
パッケージは、.NET Coreと互換性がありますが、.NET Standardとは互換性がありません。
クラスライブラリ(.NET Standard)とクラスライブラリ(.NET Core)の違いは何ですか?
互換性があります。.NET Standardをターゲットとするライブラリは、.NET Coreや.NET Frameworkなどの.NET Standard準拠のランタイムで実行されます。 モノ / Xamarin . 一方、.NET Coreをターゲットとするライブラリは、.NET Coreランタイム上でのみ実行可能です。
API表面積: .NET標準ライブラリは、すべての機能が
NETStandard.Library
一方、.NET Core ライブラリは、すべてのものが
Microsoft.NETCore.App
. 後者には約20の追加ライブラリが含まれており、そのうちのいくつかは.NET標準ライブラリに手動で追加することができます(たとえば
System.Threading.Thread
) と、.NET Standardと互換性のないもの (例えば
Microsoft.NETCore.CoreCLR
).
また、.NET Coreライブラリはランタイムを指定し、アプリケーションモデルも付属しています。これは、例えばユニットテストのクラスライブラリを実行可能にするために重要なことです。
<ブロッククオートなぜ両方が存在するのでしょうか?
ライブラリを少し無視して、.NET Standardが存在する理由は移植性のためです。.NETプラットフォームが実装することに同意するAPIのセットを定義しています。.NET標準を実装しているプラットフォームは、その.NET標準をターゲットとするライブラリと互換性があります。これらの互換性のあるプラットフォームの1つが.NET Coreです。
ライブラリの話に戻ると、.NET Standardライブラリのテンプレートは、複数のランタイムで動作するように存在しています(APIの表面積を犠牲にして)。逆に、.NET Coreライブラリ・テンプレートは、(互換性を犠牲にして)より多くのAPI表面積にアクセスし、実行ファイルを構築するプラットフォームを指定するために存在します。
インタラクティブなマトリックスはこちら どの .NET 規格がどの .NET 実装をサポートし、どの程度の API 表面積が利用可能であるかを示しています。
関連
-
[解決済み】この動詞型ではcontent-bodyを送信できない
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
-
[解決済み] .NETのManualResetEventとAutoResetEventの違いは何ですか?
-
[解決済み] PowerShellで文字列がNULLまたは空であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] WCF - メッセージサイズのクォータを増加させる方法
-
[解決済み] .NET Core、.NET Framework、Xamarinの違いとは?
-
[解決済み】.NET Standardと.NET Coreの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイラーエラーメッセージ。コンパイラはエラーコード -532462766 で失敗しました。
-
[解決済み] Microsoft.Practices.ServiceLocationはどこから来たのですか?
-
[解決済み] ServicePointManagerは、*スキームのプロキシをサポートしていません[closed]。
-
[解決済み] "ItemsSourceを使用する前に、Itemsコレクションを空にする必要があります。"
-
[解決済み] 16進数値0x00は無効な文字です。
-
[解決済み] NetFx45WebLinkとNetFx45RedistLinkの違いは何ですか?
-
[解決済み] VB.NETでファイル名を一意のサフィックスに変更するには?
-
[解決済み] WPFの場合、x:Name属性とName属性の違いは何ですか?
-
[解決済み] System.Timers.Timer vs System.Threading.Timer
-
[解決済み] WPFのStaticResourceとDynamicResourceの違いは何ですか?