「.NET Core」とは何ですか?


323

最近、公式の.NET Frameworkブログで、.NET Coreがオープンソースになることが発表されました。

皮肉なことに、作者は.NET Coreについては次の投稿で説明する予定であると述べてます。詳細については、別の発表記事で説明しています。

提供された図から:

.NET Core図

記事のテキスト自体は、.NET Core(オープンソース化などの明らかなものに加えて)は完全な.NETのモジュール式の再実装であると思います。つまり、フレームワークコンポーネントは、NuGetパッケージが現在読み込まれているように、必要に応じて読み込まれます。そして今、ASP.NET 5はすでに実装されているモジュールの1つです。.NET Coreについての私の理解は正しいですか?多分私は何かが足りないのですか?


私は最近の記事を見つけましこれは短くて非常に良いものです。.NET Standard、.NET Core、.NET Framework、およびそれらの関係について説明します。私はそれを強くお勧めします。


5
blogs.msdn.com/b/dotnet/archive/2014/12/04/…についての新しいブログ投稿がここにありますが、その図を理解することはまだ困難です。たとえば、WPFとWinFormsが.NET Coreを使用できないことを意味しますか?
dodgy_coder 14

@dodgy_coder最終的には、Store AppsとASP.NET 5が新しいフレームワークアーキテクチャを初めて使用することになると思います。
Petr Abdulin 2014

1
@dodgy_coder、その権利。現在、WPFおよびWinFormsアプリは.netコアに移植できません。それらはWindowsユニバーサルアプリに再開発される場合があります。これを参照してください:blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev

回答:


154

.NETブログから.NET 2015プレビューの発表:.NETの新時代

.NET Coreには2つの主要コンポーネントがあります。これには、.NET Framework CLRと同じコードベースから構築された小さなランタイムが含まれています。.NET Coreランタイムには同じGCとJIT(RyuJIT)が含まれていますが、アプリケーションドメインやコードアクセスセキュリティなどの機能は含まれていません。ランタイムは、[ASP.NET Core]パッケージの一部として、NuGetを介して提供されます。

.NET Coreには、基本クラスライブラリも含まれています。これらのライブラリは、大部分は.NET Frameworkクラスライブラリと同じコードですが、より小さなライブラリセットを出荷できるように考慮(依存関係の削除)されています。これらのライブラリは、NuGet.orgのSystem。* NuGetパッケージとして出荷されます。

そして:

[ASP.NET Core]は、.NET Coreを採用した最初のワークロードです。[ASP.NET Core]は、.NET Frameworkと.NET Coreの両方で実行されます。[ASP.NET Core]の重要な価値は、同じマシン上の[.NET Core]の複数のバージョンで実行できることです。WebサイトAとWebサイトBは、同じマシン上の.NET Coreの2つの異なるバージョンで実行できます。または、同じバージョンを使用できます。

つまり、最初に、アプリケーションとライブラリのコードを実行するランタイムと、ほぼ完全に文書化された標準クラスライブラリで構成されるMicrosoft .NET Frameworkがありました。

ランタイムは、共通言語インフラストラクチャを実装する共通言語ランタイムであり、JITコンパイラと連携してCIL(以前のMSIL)バイトコードを実行します。

Microsoftの.NETの仕様と実装は、その歴史と目的を考えると、非常にWindowsとIISを中心としていて、「太った」ものでした。ライブラリ、名前空間、タイプが少ないバリエーションもありますが、Webまたはデスクトップの開発に役立つものや、法的な観点から移植するの面倒なものはほとんどありません。

したがって、Windows以外のマシンで実行できるMicrosoft以外のバージョンの.NETを提供するには、別の方法を開発する必要がありました。ランタイムを移植するだけでなく、フレームワーククラスライブラリ全体を移植して、十分に採用する必要があります。その上、Microsoftから完全に独立するには、最も一般的に使用される言語のコンパイラが必要になります。

Monoは、Windows以外のさまざまなOSで実行される ランタイムの唯一の代替実装ではありませんが、.NET 4.5およびVBおよびC#コンパイラのフレームワーククラスライブラリのほとんどすべての名前空間の 1つです。

.NET Core:ランタイムのオープンソース実装、および最小限の基本クラスライブラリを入力してください。すべての追加機能は、NuGetパッケージを通じて提供され、特定のランタイム、フレームワークライブラリ、およびサードパーティパッケージをアプリケーション自体にデプロイします。

ASP.NET CoreはMVCとWebAPIの新しいバージョンであり、.NET Coreランタイム上で実行されますが、.NET Framework上でも実行されるシンHTTPサーバーアブストラクションと一緒にバンドルされています。


4
ああ、それは私がそれを逃した方法です!ブログのタイムラインは実際下にありました!そのような恥..
Petr Abdulin 2014年

17
それはすべてかなり新しいものであり、ほとんど説明されていません。あなたは良い質問をしたと思います。:)
CodeCaster 2014年

3
説明はまだかなり簡単なので、2番目の考えは「次の投稿」ではないようです。
Petr Abdulin 2014年

2
これは基本的にvNextがもたらしたものではありませんか?
ps2goat 2014年

3
彼らがnugetを介してフレームワークを公開し始めて以来、私たちはそれを行ってきました。その投稿では回避策は必要ありません。
ps2goat 2014年

84

これは、Compact Frameworkエディションで開始された.NET Frameworkのサブセットです。それはSilverlight、Windowsストア、Windows Phoneに進みました。展開を小さく維持することに重点が置かれ、迅速なダウンロードやストレージ機能が限られているデバイスに適しています。また、Windows以外のプラットフォームで起動する方が簡単であり、確かにこれがオープンソース版として選択された理由です。CLRおよび基本クラスライブラリの「難しい」および「高価な」部分は省略されています。

それ以外の場合は、そのようなフレームワークバージョンをターゲットにするといつでも簡単に認識できます。ランタイムでサポートされているものだけを公開する別個の参照アセンブリのセットを使用します。マシンのC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCoreディレクトリに保存されています。


更新:.NET Core 2.0のリリース後、適切な洞察を提供するいくつかの代表的な数値を確認しました。彼らは、過去2年間、.NET CoreへのフレームワークAPIの移植に取り組んできました。.NET Core 1.0は、当初13,000個のAPIをサポートしていました。.NET Core 2.0は20,000のAPIを追加し、合計で32,000になり、既存のNuGetパッケージの約70%を移植できるようになりました。LinuxとMacOSへの移植が簡単にできないほどWindowsに依存しすぎている一連のAPIがあります。最近リリースされたWindows互換機能パックの対象であり、さらに20,000のAPIが追加されています。


4
ブログの投稿から、これが別の「コンパクト」フレームワークバージョンのように見えるかは言いません。.NET Core最新の完全なフレームワークよりも高いバージョン5.0が発表されました。私はそれらがそれが何か別のものであることを意味すると思います。
Petr Abdulin 2014年

5
.NETCoreバージョンの履歴について説明しました。太陽の下で何も新しいことはありません、それは長い間存在しています。5.0での変更は段階的であり、新しいRyuJIT x64ジッターは私が今考えることができる唯一のものです。ライセンスの変更のみが本当に新しいものです:)
Hans Passant

3
私はあなたのポイントを得ました。ただし、.NETの次の時代としてフレームワークサブセットを発表するのは少し大胆だと私はまだ思っています。
Petr Abdulin 2014年

50

私は最近の記事を見つけましこれは短くて非常に良いものです。.NET Standard、.NET Core、.NET Framework、およびそれらの関係について説明します。私はそれを強くお勧めします。残念ながら、私は適応してここに置く時間はありません。

以下の元の回答内容:


それで、主題に関する最新の公式エントリに基づいて、私がそれらを見るとき、ここにいくつかの重要なポイントがあります:

.NET Coreは本質的に.NET Frameworkのフォークであり、その実装も因数分解の問題を中心に最適化されています。

.NET Coreは、.NET NativeもASP.NET 5にも固有のものではないと考えています。BCLとランタイムは汎用であり、モジュール式に設計されています。このように、それはすべての将来の.NETバーティカルの基盤を形成します。

したがって、.NET NativeとASP.NET 5は、新しいフレームワーク構成のテストの「対象」にすぎません。

ここに画像の説明を入力してください

参照してください、それらは別の低レベルも必要ですが、BCLの大部分はまだ一般的です。

.NET Coreは、.NET NativeもASP.NET 5にも固有のものではないと考えています。BCLとランタイムは汎用であり、モジュール式に設計されています。このように、それはすべての将来の.NETバーティカルの基盤を形成します。

つまり、上部のマゼンタの四角形は新しいアプリモデルで大量に追加されますが、ベースは共通のままです。

NuGetの展開:

.NET Frameworkとは対照的に、.NET CoreプラットフォームはNuGetパッケージのセットとして提供されます。ライブラリエコシステムの大部分が既に存在するため、NuGetを使用しました。

現在のフレームワークとの関係:

Visual Studio 2015の目標は、.NET Coreが.NET Frameworkの純粋なサブセットであることを確認することです。つまり、機能にギャップはありません。Visual Studio 2015のリリース後は、.NET Coreのバージョンが.NET Frameworkよりも高速になることを期待しています。つまり、.NET Coreベースのプラットフォームでのみ機能を利用できるようになる場合があります。

概要:

.NET Coreプラットフォームは、オープンソース開発とNuGetでのアジャイル配信のために最適化された新しい.NETスタックです。私たちはMonoコミュニティと協力して、Windows、Linux、Macで優れたものにするために取り組んでおり、Microsoftは3つのプラットフォームすべてでサポートする予定です。

.NET Frameworkがエンタープライズクラスの開発にもたらす価値を維持しています。テストし、一緒にサポートした一連のNuGetパッケージを表す.NET Coreディストリビューションを提供します。Visual Studioは、引き続き開発のワンストップショップです。ディストリビューションの一部であるNuGetパッケージの使用には、インターネット接続は必要ありません。

基本的に、これは変更された配布モデルを持つ.NET 4.6と見なすことができ、同時にオープンソースになるプロセスにあります。


22

現在のドキュメントには、.NET Coreとは何か、使用する領域などについての適切な説明があります。次の特性が.NET Coreを最もよく定義しています。

柔軟な展開:アプリに含めることも、ユーザー全体またはマシン全体に並べてインストールすることもできます。

クロスプラットフォーム:Windows、macOS、Linuxで動作します。他のOSに移植できます。サポートされるオペレーティングシステム(OS)、CPU、およびアプリケーションシナリオは、Microsoft、他の企業、および個人によって提供されるように、時間とともに成長します。

コマンドラインツール:すべての製品シナリオはコマンドラインで実行できます。

互換性:.NET Coreは、.NET標準ライブラリを介して、.NET Framework、Xamarin、Monoと互換性があります。

オープンソース:.NET Coreプラットフォームはオープンソースであり、MITおよびApache 2ライセンスを使用しています。ドキュメントはCC-BYに基づいてライセンスされています。.NET Coreは.NET Foundationプロジェクトです。

Microsoftによるサポート:.NET Coreは、.NET CoreサポートごとにMicrosoftによってサポートされています

そして、これが.NET Coreに含まれるものです:

型システム、アセンブリの読み込み、ガベージコレクター、ネイティブの相互運用性、およびその他の基本的なサービスを提供する.NETランタイム。

プリミティブデータタイプ、アプリケーション構成タイプ、および基本的なユーティリティを提供する一連のフレームワークライブラリ。

.NET Core SDKで利用可能な、基本的な開発者エクスペリエンスを可能にするSDKツールと言語コンパイラのセット。

.NET Coreアプリケーションの起動に使用される「dotnet」アプリケーションホスト。ランタイムを選択してホストし、アセンブリ読み込みポリシーを提供してアプリを起動します。同じホストを使用して、SDKツールをほとんど同じ方法で起動します。


19

.NET Coreは、Monoと同様の.NET標準(ECMA 335)の新しいクロスプラットフォーム実装ですが、Microsoft自体によって実行されます。

docs.microsoft.comを参照してください


18

マイクロソフトは、将来のWebオープンソースパラダイムを認識し、.NETを他のオペレーティングシステムに開放することを決定しました。.NET CoreはMacおよびLinux用の.NET Frameworkです。これは「軽量」の.NET Frameworkであるため、一部の機能/ライブラリがありません。

Windowsでは、引き続き.NET FrameworkとVisual Studio 2015を実行します。.NETCoreは、Node.js、npm、YeomanDockerなどのオープンソースの世界とより友好的です。

以前は不可能だったVisual Studio Code + .NET Coreを使用して、MacまたはLinuxで本格的なWebサイトとRESTful APIを開発できます。したがって、MacやUbuntuが好きで、.NET開発者の場合は、先に進んで設定してください。

以下のためのMono .NETのコア対、モノは、現在のMicrosoft(と呼ばれる会社に買収されたLinux用の.NET Frameworkとして開発されたXamarin)とモバイル開発で使用されます。最終的に、MicrosoftはMonoを.NET Coreにマージ/移行する可能性があります。今のところ、Monoについては心配していません。


12

今日Visual Studio 2017で新しいプロジェクトを作成しようとしましたが(最近Visual Studio 2015からアップグレードされました)、プロジェクトの種類に新しい選択肢のセットがあることに気付きました。新しいのか、新しいプロジェクトを始めて久しぶりの!! :)

Visual Studioスクリーンショット

このドキュメントのリンクに出くわしとても便利だと思ったので、共有します。箇条書きの詳細も記事に記載されています。私はここに箇条書きを投稿しています:

次の場合は、サーバーアプリケーションに.NET Coreを使用する必要があります。

You have cross-platform needs.
You are targeting microservices.
You are using Docker containers.
You need high performance and scalable systems.
You need side by side of .NET versions by application.

次の場合は、サーバーアプリケーションに.NET Frameworkを使用する必要があります。

Your application currently uses .NET Framework (recommendation is to extend instead of migrating)
You need to use third-party .NET libraries or NuGet packages not available for .NET Core.
You need to use .NET technologies that are not available for .NET Core.
You need to use a platform that doesnt support .NET Core.

このリンクは、.NET用語集を提供します。


11

マイクロソフトのウェブサイトから:

.NET Coreは、.NET Core、ASP.NET Core、Entity Framework Coreなどのいくつかのテクノロジーを指します。

これらのテクノロジは、CoreCLRランタイム(ユニバーサルWindowsプラットフォームで使用)を使用して実行されるという点で、ネイティブ.NETとは異なります。

あなたの質問で述べたように、.NET Coreはオープンソースであるだけでなく、移植性もあります[MacOS、Windows、Linuxで動作します]

.NET Coreの内部は、アプリケーションで必要とされない限り、コアライブラリとは異なるモジュールを使用しないように最適化されています。


4
「.NET Coreは.NET Coreを含むいくつかのテクノロジーを指します」...素晴らしいもの
キーレンジョンストーン

3

マイクロソフトは.NET Core v 3.0を発表しました。これは.NET Coreの大幅に改良されたバージョンです。

詳細については、この素晴らしい記事: 2019年4月の.NET Frameworkと.NET Coreの違いをご覧ください 。


3
リンクのみの回答、および主に意見に基づく回答はお勧めしませんmeta.stackexchange.com/a/8259
double-beep

了解しました。意見の部分を編集しました。お知らせいただきありがとうございます。
itsikha

1
どのように改善されましたか?最も重要な変更と追加であるとあなたが思うことの要約を提供できますか?
Peter Mortensen

3

.NET Coreは、Windows、Linux、およびmacOSオペレーティングシステム向けの無料でオープンソースの管理されたコンピューターソフトウェアフレームワークです。これは、.NET Frameworkの後継であるオープンソースのクロスプラットフォームです。

.NET Coreアプリケーションは、Windows、Linux、およびmacOSでサポートされています。簡単に言えば、.NET Coreは.NET Frameworkに似ていますが、クロスプラットフォームです。つまり、.NETアプリケーションをWindows、Linux、MacOSで実行できます。.NETフレームワークアプリケーションは、Windowsシステムでのみ実行できます。したがって、.NET Frameworkと.NET Coreの基本的な違いは、.NET Coreはクロスプラットフォームであり、.NET FrameworkはWindowsでのみ実行されることです。

さらに、.NET CoreにはMicrosoftによる依存性注入が組み込まれており、依存性注入にサードパーティのソフトウェア/ DLLファイルを使用する必要はありません。


1
依存関係注入について詳しく説明できますか?これは実際にこの意味で何を意味しますか?特定のフレームワークを参照していますか?いくつかの参照/リンクがありますか?
Peter Mortensen

1

.NET Coreは、.NETのオープンソースおよびクロスプラットフォームバージョンです。マイクロソフト製品は、その優れた機能に加えて、通常のユーザー、特に.NETテクノロジで作成された製品のエンドユーザーにとって常に高額でした。

低レベルの顧客のほとんどは、OSとしてLinuxを使用することを好みます。.NETCore以前は、その優れた能力にもかかわらず、Microsoftテクノロジを使用したくありません。しかし、.NET Coreの生産後、この問題は完全に解決され、OSを考慮することなくお客様を満足させることができます。


それは完全に解決されていません。LinuxでWindowsフォームまたはWPFアプリケーションを使用するのは難しいでしょう。
Peter Mortensen

0

.NET Coreは、.NET Frameworkのオープンソースおよびクロスプラットフォームバージョンです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.