私はこれを含めて多くの記事を読みましたが、それでも違いが何であるかを理解することができず、彼らはそれを簡単な言葉でまたはまったく説明していません。
誰かが.NETSDKと.NETランタイムの違いを明確にできますか?
更新:比較を使用していただければ幸いです。簡単な英語との類似性は非常に教育的です。
私はこれを含めて多くの記事を読みましたが、それでも違いが何であるかを理解することができず、彼らはそれを簡単な言葉でまたはまったく説明していません。
誰かが.NETSDKと.NETランタイムの違いを明確にできますか?
更新:比較を使用していただければ幸いです。簡単な英語との類似性は非常に教育的です。
回答:
.Net Coreガイドによると、.NETCoreは次のアイテムで構成されています
- 型システム、アセンブリの読み込み、ガベージコレクター、ネイティブ相互運用機能、その他の基本的なサービスを提供する.NETランタイム。
- プリミティブデータ型、アプリ構成型、基本的なユーティリティを提供するフレームワークライブラリのセット。
- .NET Core SDKで利用可能な、基本的な開発者エクスペリエンスを可能にするSDKツールと言語コンパイラのセット。
- .NETCoreアプリの起動に使用される「dotnet」アプリホスト。ランタイムを選択してランタイムをホストし、アセンブリの読み込みポリシーを提供してアプリを起動します。同じホストを使用して、SDKツールをほぼ同じ方法で起動します。
SDKは、CLIやコンパイラーなど、.NETCoreアプリケーションの開発に必要なすべてのものです。
ランタイムは、アプリケーションをホスト/実行し、基本オペレーティングシステムとのすべての相互作用を抽象化する「仮想マシン」です。
アプリケーションの実行には後者のみが必要ですが、アプリケーションの開発には前者が必要です。
dotnet myapp.dll
、アプリを実行するためにCLIが必要な場合、それをランタイムの一部にすることはできませんか?
ここでは何も発明していません。https://www.microsoft.com/net/downloadから定義をコピーして貼り付けるだけです
ソフトウェア開発キット(SDK)には、コマンドラインツールと任意のエディター(Visual Studioを含む)を使用して、.NETCoreアプリケーションを構築および実行するために必要なすべてのものが含まれています。
ランタイムは、既存の.NETのコアアプリケーションを実行するために必要なだけのリソースが含まれます。ランタイムはSDKに含まれています。
Rick Strahlの投稿からの共有:どの.NET Coreランタイムダウンロードが必要ですか?
アプリケーションの実行には.NETCoreランタイムのみが必要であり、インストールに関する情報を提供します。
アプリケーションを開発、ビルド、公開するには、SDKが必要です。
dotnet.exe
ランタイムでのインストールインストールし、それが唯一の提供中核機能をするために情報を提供するために、実行してアプリケーションをインストールし、に関する情報を提供していますdotnet mydll.dll
とdotnet --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をインストールすると、ランタイムもインストールされます。
homebrew-cask dotnetをインストールすると、dotnet-sdkと競合するため、ランタイムとsdkの両方を取得するにはdotnet-sdkをインストールします
brew cask install dotnet-sdk
つまり、ランタイムではOSでコンパイル済みのC-Sharp、C#プログラムを実行でき、SDKではC-Sharp、C#で記述されたプログラムをコンパイルできます。
複数のランタイムと複数の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はランタイムになると思いましたか?
shared/Microsoft.NETCore.App/<runtime version>
ランタイムだけです。にshared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>
は、ASP.NETCoreライブラリが含まれています。docs.microsoft.com/en-us/dotnet/core/build/...
SDKには通常、ドキュメントやその他のヘルプファイルが含まれています。ランタイムには、インストール用のバイナリファイルのみが含まれています。
あなただけのネットコアランタイムは、あなたから次のような出力を受け取りますインストールしている場合は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]
簡単に言えば、私の理解と記事https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/からの参照によると
.NET SDK-これには、.Net Coreアプリケーションの作成から、アプリケーションの構築、実行、公開まで、必要なすべてのものが含まれます。これは開発環境で純粋に必要とされるため、開発者はアプリケーションを最初から開発し、アプリケーションをビルド、デバッグ、および実行できます。
ランタイム-これには、.NETCoreアプリケーションの実行に必要なコンポーネントのみが含まれます。したがって、これは、アプリケーションをデプロイするサーバー側にインストールでき、ビルドやデバッグは必要ありません。IISホスティングコンポーネントが個別に必要でした。代わりに、Windows用のホスティングバンドルを使用できます。
SDKをインストールすると、その中でランタイムも取得します。以下でこれを確認してください。これは、SDKをインストールするときにインストールされるものです。
以下は、C:\ Program Files \ dotnetにインストールされました。•.NETCore SDK2.2.100•.NETCoreランタイム2.2.0•ASP.NETCoreランタイム2.2.0