Apa perbedaan antara SDK dan Runtime di .NET Core?


94

Saya sudah membaca banyak artikel, termasuk yang satu ini , namun saya masih tidak tahu apa bedanya, dan mereka belum menjelaskannya secara sederhana atau sama sekali.

Bisakah seseorang menjelaskan apa perbedaan antara .NET SDK dan .NET Runtime?

Pembaruan: Menggunakan perbandingan akan sangat dihargai. Analogi bersama bahasa Inggris sederhana sangat mendidik.

Jawaban:


55

Menurut .Net Core Guide , .NET Core terdiri dari item berikut

  • Sebuah runtime .NET, yang menyediakan sistem tipe, pemuatan perakitan, pengumpul sampah, interop asli, dan layanan dasar lainnya.
  • Satu set pustaka framework, yang menyediakan tipe data primitif, tipe komposisi aplikasi, dan utilitas dasar.
  • Seperangkat alat SDK dan kompiler bahasa yang memungkinkan pengalaman pengembang dasar, tersedia di .NET Core SDK.
  • Host aplikasi 'dotnet', yang digunakan untuk meluncurkan aplikasi .NET Core. Ini memilih runtime dan menghosting runtime, menyediakan kebijakan pemuatan assembly dan meluncurkan aplikasi. Host yang sama juga digunakan untuk meluncurkan alat SDK dengan cara yang hampir sama.

SDK adalah semua hal yang dibutuhkan / membuat pengembangan aplikasi .NET Core lebih mudah, seperti CLI dan kompiler.

Runtime adalah "mesin virtual" yang menghosting / menjalankan aplikasi dan mengabstraksi semua interaksi dengan sistem operasi dasar.

Hanya yang terakhir diperlukan untuk menjalankan aplikasi, tetapi yang pertama diperlukan untuk mengembangkan aplikasi.


10
Apakah ini berarti bahwa pengguna harus menginstal keduanya (SDK + Runtime) untuk mengembangkan aplikasi atau itu berarti SDK diperlukan hanya karena berisi runtime juga?
Puchacz

6
@Puchacz Saya baru saja mengunduh penginstal SDK dan itu berisi juga Core Runtime dan Asp.Net Core Runtime.
frakon

1
Itu tidak masuk akal bagiku. CLI dipanggil untuk menjalankan executable yang 'bergantung pada kerangka kerja', misalnya dotnet myapp.dlljika cli diperlukan untuk menjalankan aplikasi, bagaimana bisa itu tidak menjadi bagian dari runtime?
Neutrino

1
Ini juga tidak menjawab apakah pustaka inti adalah bagian dari runtime atau SDK.
Neutrino

41

Runtime : untuk menjalankan aplikasi

SDK (Runtime + Tooling) : untuk membangun dan menjalankan aplikasi


2
Saya punya pertanyaan, Sebelum menjalankan aplikasi saya dari Visual Studio, itu perlu dibangun kan? Maka saya akan selalu membutuhkan SDK, bukan hanya runtime.
Sameer

2
Bahasa yang dikompilasi perlu dibangun terlebih dahulu. Apa pun IDE yang Anda gunakan, SDK diperlukan untuk membuat kode sumber menjadi aplikasi.
TZU

Apakah Runtime benar-benar merupakan bagian dari SDK atau Runtime yang hanya dikemas dengan SDK sebagai bagian dari penginstal SDK?
Frank Liu

35

Saya tidak menemukan apa pun di sini. Cukup salin-tempel definisi dari https://www.microsoft.com/net/download

masukkan deskripsi gambar di sini

Kit pengembangan perangkat lunak ( SDK ) mencakup semua yang Anda butuhkan untuk membangun dan menjalankan aplikasi .NET Core, menggunakan alat baris perintah dan editor apa pun (termasuk Visual Studio).

The runtime mencakup hanya sumber daya yang diperlukan untuk menjalankan aplikasi yang ada NET Core. Runtime disertakan dalam SDK.


9

Berbagi dari posting Rick Strahl: Unduhan Waktu Proses Inti .NET manakah yang Anda perlukan?

Hanya .NET Core Runtime yang diperlukan untuk menjalankan aplikasi dan memberikan informasi tentang penginstalan.

Untuk mengembangkan, membangun dan menerbitkan aplikasi akan membutuhkan SDK.

dotnet.exeinstall dengan runtime install, tetapi hanya menyediakan fitur inti untuk memberikan info untuk menjalankan aplikasi dan memberikan info tentang install: dotnet mydll.dlldan dotnet --info. Untuk membuat, menerbitkan, atau melakukan apa pun yang Anda perlukan untuk menginstal SDK.

Menjalankan perintah berikut akan memberikan informasi tentang penginstalan:

dotnet --info

Jika perintah gagal, artinya Anda tidak memiliki runtime .NET Core diinstal atau tersedia di PATH sistem.

Di bawah ini adalah contoh keluaran dari perintah.

$ 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

Outputnya memberi tahu Anda:

  • Versi SDK yang diinstal
  • Versi runtime aktif yang menjalankan perintah dotnet ini
  • Daftar semua runtime dan SDK yang diinstal

Menginstal SDK juga menginstal runtime.


khusus macOS homebrew

Menginstal dotnet homebrew-cask akan berkonflik dengan dotnet-sdk , jadi untuk mendapatkan runtime, dan sdk menginstal dotnet-sdk

brew cask install dotnet-sdk

Singkatnya, runtime akan memungkinkan OS Anda menjalankan program C-Sharp , C # yang dikompilasi , dan sdk akan memungkinkan Anda untuk mengkompilasi program yang ditulis dalam C-Sharp , C # .


Penting untuk dipahami bahwa Anda dapat memiliki beberapa runtime dan beberapa SDK yang terpasang dan setiap proyek dapat menggunakan yang berbeda. Waktu proses ditentukan oleh penentu waktu proses proyek Anda di .csprojfile:

<TargetFramework>netcoreapp2.1</TargetFramework>

SDK adalah SDK yang dipasang secara global terakhir yang merupakan default, atau Anda dapat secara eksplisit mengganti SDK di global.json yang ditempatkan di folder root solusi. Berikut ini secara eksplisit memaksa proyek saya untuk menggunakan RC SDK terakhir, bukan versi RTM:

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

Secara umum, tidak perlu menggunakan versi SDK tertentu yang lebih rendah karena SDK kompatibel dengan versi sebelumnya dan dapat mengompilasi berbagai versi aplikasi .NET Core kembali ke v1.0. IOW, tidak masalah menggunakan SDK terbaru di hampir semua kasus.

.NET Core Runtime

.NET Core Runtimes adalah komponen mandiri dan spesifik terkecil dan berisi minimum absolut untuk menjalankan hanya .NET Core pada platform tertentu.

Perhatikan bahwa penginstalan runtime tidak menyertakan dependensi runtime paket meta ASP.NET Core, jadi jika aplikasi Anda mereferensikan Microsoft.AspNetCore.App atau Microsoft.AspNetCore. Anda harus mengunduh paket ASP.NET Core secara terpisah. Namun, jika Anda secara eksplisit mereferensikan semua paket ASP.NET Core Nuget daripada menggunakan paket meta, paket tersebut disebarkan sebagai bagian dari aplikasi Anda dan dapat berjalan hanya dengan runtime.

Pada dasarnya Anda memperdagangkan ukuran paket instalasi vs. persyaratan pra-instal runtime.

Referensi:


Mengapa Microsoft.AspNetCore.Appdicantumkan di bawah runtime? Saya pikir CLR akan menjadi runtime?
Robotron

@Robot Anda benar. Hanya shared/Microsoft.NETCore.App/<runtime version>runtime saja. The shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>berisi perpustakaan ASP.NET Core. docs.microsoft.com/en-us/dotnet/core/build/…
stormwild

2

SDK adalah semua hal yang dibutuhkan / membuat pengembangan aplikasi .NET Core lebih mudah, seperti CLI dan kompiler.

Runtime adalah "mesin virtual" yang menghosting / menjalankan aplikasi dan mengabstraksi semua interaksi dengan sistem operasi dasar.


2

masukkan deskripsi gambar di sini

Sebagai ringkasan: Jika Anda menginstal SDK, Anda akan memiliki semua yang Anda butuhkan untuk pengembangan dan menjalankan aplikasi.


0

SDK biasanya menyertakan dokumentasi dan file bantuan lainnya. Runtime hanya berisi file biner untuk penginstalan.


2
apakah kamu yakin itu menginstal lebih dari itu.
Emil

SDK berisi alat yang membantu dalam mengembangkan aplikasi inti .net, seperti kompiler. Runtime menghosting aplikasi inti .net dan menangani semua interaksi dengan OS yang mendasarinya.
Syed Waqas

0

menambahkan ke jawaban stormwild jika Anda hanya menginstal .Net Core Runtime, Anda akan menerima output berikut dari 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

Runtime cukup jika kita hanya ingin menjalankan aplikasi pada perangkat keras, sebaliknya untuk mengembangkan dan menjalankan kita membutuhkan SDK (yang mencakup runtime dan perkakas).masukkan deskripsi gambar di sini


0

Secara sederhana, sesuai pemahaman saya dan referensi dari artikel https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/

.NET SDK - Ini mencakup semua yang Anda butuhkan mulai dari membuat aplikasi .Net Core hingga membangun, menjalankan, dan menerbitkan aplikasi. Ini murni dibutuhkan oleh lingkungan pengembangan, sehingga pengembang dapat mengembangkan aplikasi dari awal dan membangun, men-debug dan menjalankan aplikasi.

Runtime - Ini hanya memiliki komponen yang diperlukan untuk menjalankan aplikasi .NET Core. SO ini dapat diinstal di sisi server tempat Anda menerapkan aplikasi dan tidak memerlukan build dan debug. Untuk itu diperlukan komponen hosting IIS secara terpisah. Sebagai gantinya, Anda dapat menggunakan Hosting Bundle untuk Windows.


-1

Saat Anda menginstal SDK, Anda juga mendapatkan runtime di dalamnya. Periksa ini di bawah, inilah yang terinstal ketika kita menginstal SDK.

Berikut ini telah diinstal di C: \ Program Files \ dotnet • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET Core Runtime 2.2.0

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.