Sự khác biệt giữa SDK và Runtime trong .NET Core là gì?


94

Tôi đã đọc nhiều bài báo, bao gồm cả bài báo này , nhưng tôi vẫn không thể tìm ra sự khác biệt là gì và họ đã không giải thích nó bằng các thuật ngữ đơn giản hay gì cả.

Ai đó có thể vui lòng làm rõ sự khác biệt giữa .NET SDK và .NET Runtime là gì không?

Cập nhật: Sử dụng so sánh sẽ rất được đánh giá cao. Phép tương tự cùng với tiếng Anh đơn giản mang tính giáo dục cao.

Câu trả lời:


55

Theo Hướng dẫn .Net Core , .NET Core bao gồm các mục sau

  • Thời gian chạy .NET, cung cấp hệ thống kiểu, tải hợp ngữ, trình thu gom rác, tương tác gốc và các dịch vụ cơ bản khác.
  • Một tập hợp các thư viện khung, cung cấp các kiểu dữ liệu nguyên thủy, kiểu cấu thành ứng dụng và các tiện ích cơ bản.
  • Một bộ công cụ SDK và trình biên dịch ngôn ngữ cho phép trải nghiệm nhà phát triển cơ sở, có sẵn trong .NET Core SDK.
  • Máy chủ ứng dụng 'dotnet', được sử dụng để khởi chạy các ứng dụng .NET Core. Nó chọn thời gian chạy và lưu trữ thời gian chạy, cung cấp chính sách tải lắp ráp và khởi chạy ứng dụng. Máy chủ lưu trữ tương tự cũng được sử dụng để khởi chạy các công cụ SDK theo cách tương tự.

SDK là tất cả những thứ cần thiết / giúp việc phát triển ứng dụng .NET Core dễ dàng hơn, chẳng hạn như CLI và trình biên dịch.

Thời gian chạy là "máy ảo" lưu trữ / chạy ứng dụng và tóm tắt tất cả các tương tác với hệ điều hành cơ sở.

Chỉ yêu cầu cái sau để chạy ứng dụng, nhưng cái trước là cần thiết để phát triển ứng dụng.


10
Nó có nghĩa là người dùng phải cài đặt cả hai (SDK + Runtime) để phát triển ứng dụng hay nó có nghĩa là SDK chỉ được yêu cầu vì nó cũng chứa thời gian chạy?
Puchacz

6
@Puchacz Tôi vừa tải xuống trình cài đặt SDK và nó cũng chứa Core Runtime và Asp.Net Core Runtime.
frakon

1
Điều đó vô nghĩ với tôi. CLI được gọi để thực thi một tệp thực thi 'phụ thuộc vào khung công tác', ví dụ: dotnet myapp.dllnếu cli được yêu cầu chạy một ứng dụng làm thế nào trên trái đất nó có thể không phải là một phần của thời gian chạy?
Neutrino

1
Điều này cũng không trả lời liệu thư viện lõi là một phần của thời gian chạy hay SDK.
Neutrino

42

Runtime : để chạy ứng dụng

SDK (Runtime + Tooling) : để xây dựng và chạy ứng dụng


2
Tôi có một câu hỏi, Trước khi chạy ứng dụng của tôi từ Visual Studio, nó cần được xây dựng đúng không? Sau đó, tôi sẽ luôn cần một SDK thay vì chỉ thời gian chạy.
Sameer

2
Ngôn ngữ biên dịch cần được xây dựng trước. Bất kể bạn sử dụng IDE nào, SDK là bắt buộc để xây dựng mã nguồn thành một ứng dụng.
TZU

Runtime có thực sự là một phần của SDK hay Runtime chỉ được đóng gói với SDK như một phần của trình cài đặt SDK?
Frank Liu

35

Tôi không phát minh ra bất cứ thứ gì ở đây. Chỉ cần sao chép-dán các định nghĩa từ https://www.microsoft.com/net/download

nhập mô tả hình ảnh ở đây

Bộ phát triển phần mềm ( SDK ) bao gồm mọi thứ bạn cần để xây dựng và chạy các ứng dụng .NET Core, sử dụng các công cụ dòng lệnh và bất kỳ trình soạn thảo nào (bao gồm Visual Studio).

Thời gian chạy chỉ bao gồm các tài nguyên cần thiết để chạy các ứng dụng .NET Core hiện có. Thời gian chạy được bao gồm trong SDK.


9

Chia sẻ từ bài đăng của Rick Strahl: Bạn cần Tải xuống .NET Core Runtime nào?

Chỉ cần .NET Core Runtime để chạy ứng dụng và cung cấp thông tin về cài đặt.

Để phát triển, xây dựng và xuất bản một ứng dụng sẽ yêu cầu SDK.

dotnet.execài đặt với cài đặt thời gian chạy, nhưng nó chỉ cung cấp các tính năng cốt lõi để cung cấp thông tin để chạy ứng dụng và cung cấp thông tin về cài đặt: dotnet mydll.dlldotnet --info. Để xây dựng, xuất bản hoặc làm bất kỳ điều gì khác, bạn cần cài đặt SDK.

Chạy lệnh sau sẽ cung cấp thông tin về cài đặt:

dotnet --info

Nếu lệnh không thành công, điều đó có nghĩa là bạn chưa cài đặt hoặc cài đặt .NET Core runtime trong PATH của hệ thống.

Dưới đây là đầu ra mẫu của lệnh.

$ 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

Đầu ra cho bạn biết:

  • Phiên bản SDK đã cài đặt
  • Phiên bản thời gian chạy hoạt động đang chạy lệnh dotnet này
  • Danh sách tất cả các thời gian chạy và SDK đã cài đặt

Cài đặt SDK cũng cài đặt thời gian chạy.


macOS homebrew cụ thể

Cài đặt dotnet homebrew-cask sẽ xung đột với dotnet-sdk , vì vậy để có được cả thời gian chạy và sdk hãy cài đặt dotnet-sdk

brew cask install dotnet-sdk

Tóm lại, thời gian chạy sẽ cho phép hệ điều hành của bạn để chạy biên soạn C-Sharp , C # chương trình, và các sdk sẽ cho phép bạn biên dịch chương trình viết bằng C-Sharp , C # .


Điều quan trọng cần hiểu là bạn có thể cài đặt nhiều thời gian chạy và nhiều SDK và mỗi dự án có thể sử dụng một SDK khác nhau. Thời gian chạy được xác định bởi bộ định thời gian chạy của dự án của bạn trong .csprojtệp:

<TargetFramework>netcoreapp2.1</TargetFramework>

SDK là SDK được cài đặt toàn cầu cuối cùng là mặc định hoặc bạn có thể ghi đè rõ ràng SDK trong global.json được đặt trong thư mục gốc giải pháp. Điều sau rõ ràng buộc dự án của tôi phải sử dụng RC SDK cuối cùng, thay vì phiên bản RTM:

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

Nói chung, không cần phải sử dụng phiên bản SDK thấp hơn cụ thể vì SDK tương thích ngược và có thể biên dịch các phiên bản khác nhau của .NET Core applicationatino trở lại v1.0. IOW, bạn có thể sử dụng SDK mới nhất trong hầu hết các trường hợp.

.NET Core Runtimes

.NET Core Runtimes là thành phần cụ thể và khép kín nhỏ nhất và chứa mức tối thiểu tuyệt đối để chỉ chạy .NET Core trên một nền tảng cụ thể.

Lưu ý rằng cài đặt thời gian chạy không bao gồm các phụ thuộc thời gian chạy gói meta ASP.NET Core, vì vậy nếu ứng dụng của bạn tham chiếu đến Microsoft.AspNetCore.App hoặc Microsoft.AspNetCore. Tất cả bạn phải tải xuống riêng gói ASP.NET Core. Tuy nhiên, nếu bạn tham chiếu rõ ràng tất cả các gói ASP.NET Core Nuget thay vì sử dụng các gói meta, thì các gói đó sẽ được triển khai như một phần của ứng dụng của bạn và nó có thể chạy chỉ với thời gian chạy.

Về cơ bản, bạn đang giao dịch kích thước gói cài đặt so với yêu cầu cài đặt trước thời gian chạy.

Người giới thiệu:


Tại sao được Microsoft.AspNetCore.Appliệt kê trong thời gian chạy? Tôi nghĩ CLR sẽ là một thời gian chạy?
Robotron

@Robotron Bạn nói đúng. Chỉ shared/Microsoft.NETCore.App/<runtime version>có những thời gian chạy. Nó shared/Microsoft.AspNetCore.{App,All}/<aspnetcore version>chứa các thư viện ASP.NET Core. docs.microsoft.com/en-us/dotnet/core/build/…
Stormwild

2

SDK là tất cả những thứ cần thiết / giúp việc phát triển ứng dụng .NET Core dễ dàng hơn, chẳng hạn như CLI và trình biên dịch.

Thời gian chạy là "máy ảo" lưu trữ / chạy ứng dụng và tóm tắt tất cả các tương tác với hệ điều hành cơ sở.


2

nhập mô tả hình ảnh ở đây

Tóm lại: Nếu bạn cài đặt SDK, bạn sẽ có mọi thứ bạn cần để phát triển và chạy ứng dụng.


0

SDK thường bao gồm tài liệu và các tệp trợ giúp khác. Thời gian chạy chỉ chứa các tệp nhị phân để cài đặt.


2
bạn có chắc không? nó cài đặt nhiều hơn thế.
Emil

SDK chứa các công cụ giúp phát triển ứng dụng lõi .net, chẳng hạn như trình biên dịch. Runtime lưu trữ một ứng dụng lõi .net và xử lý tất cả các tương tác với hệ điều hành cơ bản.
Syed Waqas

0

thêm vào câu trả lời của Stormwild trong trường hợp bạn chỉ cài đặt .Net Core Runtime, bạn sẽ nhận được kết quả sau từ 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

Thời gian chạy là đủ nếu chúng ta chỉ muốn chạy ứng dụng trên phần cứng, nếu không để phát triển và chạy, chúng ta cần SDK (bao gồm thời gian chạy và công cụ).nhập mô tả hình ảnh ở đây


0

Nói một cách đơn giản, theo sự hiểu biết của tôi và tham khảo từ bài viết https://karthikekblog.com/net-core-sdk-vs-runtime-vs-hosting-bundle/

.NET SDK - Điều này bao gồm mọi thứ bạn cần từ việc tạo ứng dụng .Net Core đến xây dựng, chạy và xuất bản ứng dụng. Điều này hoàn toàn do môi trường phát triển yêu cầu, vì vậy các nhà phát triển có thể phát triển ứng dụng từ đầu và xây dựng, gỡ lỗi và chạy ứng dụng.

Thời gian chạy - Điều này chỉ có các thành phần yêu cầu để chạy các ứng dụng .NET Core. VẬY điều này có thể được cài đặt ở phía máy chủ nơi bạn triển khai ứng dụng và không yêu cầu bản dựng và gỡ lỗi. Nó yêu cầu các thành phần lưu trữ IIS riêng biệt. Thay vào đó, bạn có thể sử dụng Gói lưu trữ dành cho Windows.


-1

Khi bạn cài đặt SDK, bạn cũng nhận được thời gian chạy trong đó. Kiểm tra điều này bên dưới, đây là những gì được cài đặt khi chúng tôi cài đặt SDK.

Các phần sau đã được cài đặt tại C: \ Program Files \ dotnet • .NET Core SDK 2.2.100 • .NET Core Runtime 2.2.0 • ASP.NET Core Runtime 2.2.0

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.