.NET CoreのSDKとランタイムの違いは何ですか?


99

私はこれを含めて多くの記事を読みましたが、それでも違いが何であるかを理解することができず、彼らはそれを簡単な言葉でまたはまったく説明していません。

誰かが.NETSDKと.NETランタイムの違いを明確にできますか?

更新:比較を使用していただければ幸いです。簡単な英語との類似性は非常に教育的です。

回答:


58

.Net Coreガイドによると、.NETCoreは次のアイテムで構成されています

  • 型システム、アセンブリの読み込み、ガベージコレクター、ネイティブ相互運用機能、その他の基本的なサービスを提供する.NETランタイム。
  • プリミティブデータ型、アプリ構成型、基本的なユーティリティを提供するフレームワークライブラリのセット。
  • .NET Core SDKで利用可能な、基本的な開発者エクスペリエンスを可能にするSDKツールと言語コンパイラのセット。
  • .NETCoreアプリの起動に使用される「dotnet」アプリホスト。ランタイムを選択してランタイムをホストし、アセンブリの読み込みポリシーを提供してアプリを起動します。同じホストを使用して、SDKツールをほぼ同じ方法で起動します。

SDKは、CLIやコンパイラーなど、.NETCoreアプリケーションの開発に必要なすべてのものです。

ランタイムは、アプリケーションをホスト/実行し、基本オペレーティングシステムとのすべての相互作用を抽象化する「仮想マシン」です。

アプリケーションの実行には後者のみが必要ですが、アプリケーションの開発には前者が必要です。


11
それは、ユーザーがアプリケーションを開発するために両方(SDK +ランタイム)をインストールする必要があることを意味しますか、それともランタイムも含まれているという理由だけでSDKが必要であることを意味しますか?
Puchacz

6
@Puchacz SDKインストーラーをダウンロードしたところ、CoreRuntimeとAsp.NetCoreRuntimeも含まれていました。
frakon 2018

1
それは私には意味がありません。CLIは、「フレームワークに依存する」実行可能ファイルを実行するために呼び出されます。たとえばdotnet myapp.dll、アプリを実行するためにCLIが必要な場合、それをランタイムの一部にすることできませんか?
ニュートリノ

1
これは、コアライブラリがランタイムの一部であるかSDKの一部であるかも答えません。
ニュートリノ

43

ランタイム:アプリを実行する

SDK(ランタイム+ツール):アプリをビルドして実行する


2
質問があります。VisualStudioからアプリを実行する前に、正しくビルドする必要がありますか?次に、ランタイムだけでなく、常にSDKが必要になります。
tRuEsatm

2
コンパイルされた言語を最初に構築する必要があります。使用するIDEに関係なく、ソースコードをアプリケーションに組み込むにはSDKが必要です。
シーズー

ランタイムは本当にSDKの一部ですか、それともランタイムはSDKインストーラーの一部としてSDKにパッケージ化されているだけですか?
フランク劉

39

ここでは何も発明していません。https://www.microsoft.com/net/downloadから定義をコピーして貼り付けるだけです

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

ソフトウェア開発キット(SDK)には、コマンドラインツールと任意のエディター(Visual Studioを含む)を使用して、.NETCoreアプリケーションを構築および実行するために必要なすべてのものが含まれています。

ランタイムは、既存の.NETのコアアプリケーションを実行するために必要なだけのリソースが含まれます。ランタイムはSDKに含まれています。


10

Rick Strahlの投稿からの共有:どの.NET Coreランタイムダウンロードが必要ですか?

アプリケーションの実行には.NETCoreランタイムのみが必要であり、インストールに関する情報を提供します。

アプリケーションを開発、ビルド、公開するには、SDKが必要です。

dotnet.exeランタイムでのインストールインストールし、それが唯一の提供中核機能をするために情報を提供するために、実行してアプリケーションをインストールし、に関する情報を提供していますdotnet mydll.dlldotnet --info。ビルド、公開、またはその他のことを行うには、SDKをインストールする必要があります。

次のコマンドを実行すると、インストールに関する情報が提供されます。

dotnet --info

コマンドが失敗した場合は、.NET Coreランタイムがインストールされていないか、システムのPATHで使用できないことを意味します。

以下は、コマンドの出力例です。

$ dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   2.2.101
 Commit:    236713b0b7

Runtime Environment:
 OS Name:     Mac OS X
 OS Version:  10.13
 OS Platform: Darwin
 RID:         osx.10.13-x64
 Base Path:   /usr/local/share/dotnet/sdk/2.2.101/

Host (useful for support):
  Version: 2.2.0
  Commit:  1249f08fed

.NET Core SDKs installed:
  2.1.4 [/usr/local/share/dotnet/sdk]
  2.1.302 [/usr/local/share/dotnet/sdk]
  2.2.101 [/usr/local/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.0.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.2 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

出力は次のことを示しています。

  • インストールされているSDKバージョン
  • このdotnetコマンドを実行しているアクティブなランタイムバージョン
  • インストールされているすべてのランタイムとSDKのリスト

SDKをインストールすると、ランタイムもインストールされます。


macOS自作固有

homebrew-cask dotnetをインストールすると、dotnet-sdkと競合するため、ランタイムとsdkの両方を取得するにはdotnet-sdkをインストールします

brew cask install dotnet-sdk

つまり、ランタイムではOSでコンパイル済みのC-SharpC#プログラムを実行でき、SDKではC-SharpC#で記述されたプログラムをコンパイルできます。


複数のランタイムと複数のSDKをインストールでき、プロジェクトごとに異なるものを使用できることを理解することが重要です。ランタイムは、.csprojファイル内のプロジェクトのランタイム指定子によって決定されます。

<TargetFramework>netcoreapp2.1</TargetFramework>

SDKは、デフォルトである最後にグローバルにインストールされたSDKであるか、ソリューションのルートフォルダーに配置されたglobal.jsonでSDKを明示的にオーバーライドできます。以下は、プロジェクトにRTMバージョンの代わりに最後のRCSDKを使用するように明示的に強制します。

{
 "sdk": {
   "version": "2.1.300-rc.31211"
 }
}

SDKは下位互換性があり、さまざまなバージョンの.NET Core applicatinoをv1.0にコンパイルできるため、通常、特定の下位SDKバージョンを使用する必要はありません。IOW、ほとんどすべての場合に最新のSDKを使用しても問題ありません。

.NETCoreランタイム

.NET Coreランタイムは、最小の自己完結型の特定のコンポーネントであり、特定のプラットフォームで.NETCoreだけを実行するための絶対最小値が含まれています。

ランタイムインストールにはASP.NETCoreメタパッケージのランタイム依存関係が含まれていないため、アプリケーションがMicrosoft.AspNetCore.AppまたはMicrosoft.AspNetCore.Allを参照している場合は、ASP.NETCoreパッケージを個別にダウンロードする必要があることに注意してください。ただし、メタパッケージを使用するのではなく、すべてのASP.NET Core Nugetパッケージを明示的に参照する場合、それらのパッケージはアプリケーションの一部として展開され、ランタイムだけで実行できます。

基本的に、インストールパッケージのサイズとランタイムのプレインストール要件を交換します。

参照:


Microsoft.AspNetCore.Appランタイムの下に表示されるのはなぜですか?CLRはランタイムになると思いましたか?
ロボトロン

@Robotronその通りです。shared/Microsoft.NETCore.App/<runtime version>ランタイムだけです。にshared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>は、ASP.NETCoreライブラリが含まれています。docs.microsoft.com/en-us/dotnet/core/build/...
stormwild

2

SDKは、CLIやコンパイラーなど、.NETCoreアプリケーションの開発に必要なすべてのものです。

ランタイムは、アプリケーションをホスト/実行し、基本オペレーティングシステムとのすべての相互作用を抽象化する「仮想マシン」です。


2

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

まとめ:SDKをインストールすると、アプリの開発と実行に必要なものがすべて揃います。


0

SDKには通常、ドキュメントやその他のヘルプファイルが含まれています。ランタイムには、インストール用のバイナリファイルのみが含まれています。


2
本気ですか?それよりもはるかに多くをインストールします。
エミル

SDKには、コンパイラなどの.netコアアプリの開発に役立つツールが含まれています。ランタイムは.netコアアプリケーションをホストし、基盤となるOSとのすべての相互作用を処理します。
Syed Waqas 2018

0

あなただけのネットコアランタイムは、あなたから次のような出力を受け取りますインストールしている場合はstormwildの答えに追加するDOTNET --info

>PS C:\Users\Administrator> dotnet --info
>
>Host (useful for support):
>  Version: 2.2.3
>  Commit:  6b8ad509b6 
>
>.NET Core SDKs installed:
>  No SDKs were found.
>
>.NET Core runtimes installed:
>  Microsoft.NETCore.App 2.2.3 [C:\Program 
>Files\dotnet\shared\Microsoft.NETCore.App]

0

ハードウェア上でアプリケーションだけを実行する場合はランタイムで十分です。それ以外の場合、開発して実行するにはSDK(ランタイムとツールを含む)が必要です。ここに画像の説明を入力してください


0

簡単に言えば、私の理解と記事https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/からの参照によると

.NET SDK-これには、.Net Coreアプリケーションの作成から、アプリケーションの構築、実行、公開まで、必要なすべてのものが含まれます。これは開発環境で純粋に必要とされるため、開発者はアプリケーションを最初から開発し、アプリケーションをビルド、デバッグ、および実行できます。

ランタイム-これには、.NETCoreアプリケーションの実行に必要なコンポーネントのみが含まれます。したがって、これは、アプリケーションをデプロイするサーバー側にインストールでき、ビルドやデバッグは必要ありません。IISホスティングコンポーネントが個別に必要でした。代わりに、Windows用のホスティングバンドルを使用できます。


-1

SDKをインストールすると、その中でランタイムも取得します。以下でこれを確認してください。これは、SDKをインストールするときにインストールされるものです。

以下は、C:\ Program Files \ dotnetにインストールされました。•.NETCore SDK2.2.100•.NETCoreランタイム2.2.0•ASP.NETCoreランタイム2.2.0

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