ความแตกต่างระหว่าง SDK และ Runtime ใน. NET Core คืออะไร?


94

ฉันได้อ่านบทความมากมายรวมถึงบทความนี้แต่ฉันก็ยังไม่สามารถเข้าใจได้ว่าอะไรคือความแตกต่างและพวกเขายังไม่ได้อธิบายในแง่ง่ายๆหรือเลย

ใครช่วยอธิบายความแตกต่างระหว่าง. NET SDK และ. NET Runtime ได้บ้าง?

อัปเดต: การใช้การเปรียบเทียบจะได้รับการชื่นชมมาก การเปรียบเทียบควบคู่ไปกับภาษาอังกฤษที่เรียบง่ายนั้นมีการศึกษาสูง

คำตอบ:


55

ตามคู่มือ. Net Core . NET Core ประกอบด้วยรายการต่อไปนี้

  • รันไทม์. NET ซึ่งจัดเตรียมระบบชนิดการโหลดแอสเซมบลีตัวรวบรวมขยะการทำงานร่วมกันแบบเนทีฟและบริการพื้นฐานอื่น ๆ
  • ชุดของไลบรารีเฟรมเวิร์กซึ่งจัดเตรียมประเภทข้อมูลดั้งเดิมประเภทองค์ประกอบของแอปและยูทิลิตี้พื้นฐาน
  • ชุดเครื่องมือ SDK และคอมไพเลอร์ภาษาที่เปิดใช้งานประสบการณ์พื้นฐานสำหรับนักพัฒนาที่มีอยู่ใน. NET Core SDK
  • โฮสต์แอป 'dotnet' ซึ่งใช้เพื่อเปิดแอป. NET Core มันเลือกรันไทม์และโฮสต์รันไทม์ให้นโยบายการโหลดแอสเซมบลีและเปิดแอพ โฮสต์เดียวกันยังใช้เพื่อเปิดเครื่องมือ SDK ในลักษณะเดียวกัน

SDK เป็นสิ่งที่จำเป็นทั้งหมด / ทำให้การพัฒนาแอปพลิเคชัน. NET Core ง่ายขึ้นเช่น CLI และคอมไพเลอร์

รันไทม์คือ "เครื่องเสมือน" ที่โฮสต์ / รันแอปพลิเคชันและสรุปการโต้ตอบทั้งหมดกับระบบปฏิบัติการพื้นฐาน

จำเป็นต้องใช้โปรแกรมหลังเท่านั้นในการเรียกใช้แอปพลิเคชัน แต่ก่อนหน้านี้จำเป็นในการพัฒนาแอปพลิเคชัน


10
หมายความว่าผู้ใช้ต้องติดตั้งทั้ง (SDK + Runtime) เพื่อพัฒนาแอปพลิเคชันหรือหมายความว่าต้องใช้ SDK เพียงเพราะมีรันไทม์ด้วย?
Puchacz

6
@Puchacz ฉันเพิ่งดาวน์โหลดตัวติดตั้ง SDK และยังมี Core Runtime และ Asp.Net Core Runtime
frakon

1
นั่นไม่สมเหตุสมผลสำหรับฉัน CLI ถูกเรียกให้เรียกใช้งาน 'framework ขึ้นอยู่กับ' ไฟล์ปฏิบัติการเช่นdotnet myapp.dllถ้าจำเป็นต้องใช้ cli เพื่อเรียกใช้แอปบนโลกมันจะไม่เป็นส่วนหนึ่งของรันไทม์ได้อย่างไร?
Neutrino

1
สิ่งนี้ยังไม่ตอบโจทย์ว่าไลบรารีหลักเป็นส่วนหนึ่งของรันไทม์หรือ SDK
Neutrino

41

รันไทม์ : เพื่อเรียกใช้แอพ

SDK (Runtime + Tooling) : เพื่อสร้างและเรียกใช้แอป


2
ฉันมีคำถามก่อนที่จะเรียกใช้แอปของฉันจาก Visual Studio จำเป็นต้องสร้างใช่ไหม จากนั้นฉันมักจะต้องการ SDK มากกว่าแค่รันไทม์
Sameer

2
ต้องสร้างภาษาคอมไพล์ก่อน ไม่ว่าคุณจะใช้ IDE แบบใด SDK จะต้องสร้างซอร์สโค้ดในแอปพลิเคชัน
TZU

Runtime เป็นส่วนหนึ่งของ SDK หรือ Runtime เพียงแค่บรรจุ SDK เป็นส่วนหนึ่งของตัวติดตั้ง SDK หรือไม่
Frank Liu

35

ฉันไม่ได้ประดิษฐ์อะไรที่นี่ เพียงคัดลอกคำจำกัดความจากhttps://www.microsoft.com/net/download

ป้อนคำอธิบายภาพที่นี่

ชุดพัฒนาซอฟต์แวร์ ( SDK ) ประกอบด้วยทุกสิ่งที่คุณต้องการในการสร้างและเรียกใช้แอปพลิเคชัน. NET Core โดยใช้เครื่องมือบรรทัดคำสั่งและตัวแก้ไขใด ๆ (รวมถึง Visual Studio)

รันไทม์รวมถึงเพียงทรัพยากรที่จำเป็นในการทำงานที่มีอยู่ในการใช้งาน .NET หลัก รันไทม์รวมอยู่ใน SDK


9

การแบ่งปันจากโพสต์ของ Rick Strahl: คุณต้องการดาวน์โหลด. NET Core Runtime รุ่นใด

ต้องใช้เฉพาะ. NET Core Runtime เพื่อรันแอปพลิเคชันและให้ข้อมูลเกี่ยวกับการติดตั้ง

ในการพัฒนาสร้างและเผยแพร่แอปพลิเคชันจะต้องใช้ 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 จะติดตั้งรันไทม์ด้วย


macOS homebrew เฉพาะ

การติดตั้ง homebrew-cask dotnetจะขัดแย้งกับdotnet-sdkดังนั้นเพื่อให้ได้ทั้งรันไทม์และsdkติดตั้งdotnet-sdk

brew cask install dotnet-sdk

ในระยะสั้นรันไทม์จะช่วยให้ระบบปฏิบัติการของคุณเพื่อให้ทำงานได้รวบรวมC-Sharp , C #โปรแกรมและSDKจะช่วยให้คุณรวบรวมโปรแกรมที่เขียนในC-Sharp , C #


สิ่งสำคัญคือต้องเข้าใจว่าคุณสามารถติดตั้ง runtimes และ SDK ได้หลายรายการและแต่ละโปรเจ็กต์สามารถใช้ที่แตกต่างกันได้ รันไทม์ถูกกำหนดโดยตัวระบุรันไทม์ของโปรเจ็กต์ของคุณใน.csprojไฟล์:

<TargetFramework>netcoreapp2.1</TargetFramework>

SDK เป็น SDK ที่ติดตั้งทั่วโลกล่าสุดซึ่งเป็นค่าเริ่มต้นหรือคุณสามารถแทนที่ SDK อย่างชัดเจนใน global.json ที่อยู่ในโฟลเดอร์รากของโซลูชัน ต่อไปนี้บังคับให้โปรเจ็กต์ของฉันใช้ RC SDK สุดท้ายอย่างชัดเจนแทนที่จะเป็นเวอร์ชัน RTM:

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

โดยทั่วไปไม่จำเป็นต้องใช้ SDK เวอร์ชันที่ต่ำกว่าโดยเฉพาะเนื่องจาก SDK สามารถใช้งานร่วมกันได้แบบย้อนหลังและสามารถรวบรวมแอปพลิเคชัน. NET Core เวอร์ชันต่างๆกลับไปที่ v1.0 ได้ IOW สามารถใช้ SDK ล่าสุดในเกือบทุกกรณีได้

.NET Core Runtimes

NET Core Runtimes เป็นส่วนประกอบที่มีอยู่ในตัวและมีขนาดเล็กที่สุดและมีค่าต่ำสุดที่แน่นอนในการรันเฉพาะ. NET Core บนแพลตฟอร์มเฉพาะ

โปรดสังเกตว่าการติดตั้งรันไทม์ไม่รวมการอ้างอิงรันไทม์แพคเกจเมตา ASP.NET Core ดังนั้นหากแอปพลิเคชันของคุณอ้างถึง Microsoft.AspNetCore.App หรือ Microsoft.AspNetCore สิ่งที่คุณต้องดาวน์โหลดแยกกันดาวน์โหลดแพคเกจ ASP.NET Core อย่างไรก็ตามหากคุณอ้างถึงแพ็กเกจ ASP.NET Core Nuget ทั้งหมดอย่างชัดเจนแทนที่จะใช้แพ็คเกจเมตาแพ็กเกจเหล่านั้นจะถูกปรับใช้เป็นส่วนหนึ่งของแอปพลิเคชันของคุณและสามารถทำงานได้โดยใช้เพียงรันไทม์

โดยพื้นฐานแล้วคุณกำลังซื้อขายขนาดแพ็คเกจการติดตั้งเทียบกับข้อกำหนดก่อนการติดตั้งรันไทม์

อ้างอิง:


เหตุใดจึงMicrosoft.AspNetCore.Appแสดงรายการภายใต้เวลาทำงาน ฉันคิดว่า CLR จะเป็นรันไทม์?
Robotron

@ Robotron คุณพูดถูก เฉพาะshared/Microsoft.NETCore.App/<runtime version>ช่วงเวลาที่เป็น shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>มีห้องสมุด ASP.NET หลัก docs.microsoft.com/en-us/dotnet/core/build/…
stormwild

2

SDK เป็นสิ่งที่จำเป็นทั้งหมด / ทำให้การพัฒนาแอปพลิเคชัน. NET Core ง่ายขึ้นเช่น CLI และคอมไพเลอร์

รันไทม์คือ "เครื่องเสมือน" ที่โฮสต์ / รันแอปพลิเคชันและสรุปการโต้ตอบทั้งหมดกับระบบปฏิบัติการพื้นฐาน



0

โดยปกติ SDK จะมีเอกสารและไฟล์วิธีใช้อื่น ๆ รันไทม์มีเฉพาะไฟล์ไบนารีสำหรับการติดตั้ง


2
คุณแน่ใจไหม? มันติดตั้งมากกว่านั้นมาก
Emil

SDK มีเครื่องมือที่ช่วยในการพัฒนาแอป. net core เช่นคอมไพเลอร์ รันไทม์โฮสต์แอปพลิเคชัน. net core และจัดการการโต้ตอบทั้งหมดกับระบบปฏิบัติการพื้นฐาน
Syed Waqas

0

เพิ่มในคำตอบของ stormwild ในกรณีที่คุณติดตั้ง. Net Core Runtime เท่านั้นคุณจะได้รับผลลัพธ์ต่อไปนี้จาก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 ไปจนถึงการสร้างเรียกใช้และเผยแพร่แอปพลิเคชัน สิ่งนี้ต้องการโดยสภาพแวดล้อมการพัฒนาเท่านั้นดังนั้นนักพัฒนาจึงสามารถพัฒนาแอปพลิเคชันตั้งแต่เริ่มต้นและสร้างแก้ไขข้อบกพร่องและเรียกใช้แอปพลิเคชัน

รันไทม์ - มีเฉพาะส่วนประกอบที่ต้องการเพื่อรันแอปพลิเคชัน. NET Core ดังนั้นสิ่งนี้สามารถติดตั้งได้ในฝั่งเซิร์ฟเวอร์ที่คุณปรับใช้แอปพลิเคชันและไม่จำเป็นต้องสร้างและดีบัก ต้องใช้ส่วนประกอบการโฮสต์ IIS แยกต่างหาก คุณสามารถใช้ Hosting Bundle สำหรับ Windows แทนได้


-1

เมื่อคุณติดตั้ง SDK คุณจะได้รับรันไทม์ด้วย ตรวจสอบสิ่งนี้ด้านล่างนี่คือสิ่งที่ได้รับการติดตั้งเมื่อเราติดตั้ง SDK

สิ่งต่อไปนี้ได้รับการติดตั้งที่ C: \ Program Files \ dotnet • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET Core Runtime 2.2.0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.