簡體   English   中英

C#8.0,.NET Core 3.0和Visual Studio之間的關系

[英]Relationship between C# 8.0, NET Core 3.0 and Visual Studio

構建C#8.0的文章指出

目前的計划是C#8.0將與.NET Core 3.0同時發布。 但是,隨着我們正在開發的Visual Studio 2019的預覽,這些功能將開始活躍起來。

C#8.0,.NET Core 3.0和Visual Studio之間有什么關系?

作為后續,我也很困惑在物理部署方面新的語言版本實際上是什么。 它是作為新的Visual Studio部署的一部分部署的新程序集,還是部分網絡核心sdk安裝或其他部分? 是否需要將C#8添加到完整框架和.NET Core?

C#語言包含一個規范以及名為Roslyn的參考編譯器。

.Net版本(4.8或.net Core 3)表示框架(一組API),它位於執行編譯程序的托管運行時(CLR)的頂部(以中間語言,一種匯編代碼)。

理想情況下,C#語言與平台無關,並且獨立於框架和運行時,在C#的歷史中,設計了幾個關鍵語言功能,其中CLR的當前版本不允許該功能,或者該功能基於更高級別的類型和框架添加(例如C#5中的Async-Await,以及C#7中某個程度的值元組)。

對於C#8,諸如Async流和范圍之類的語言功能需要新的框架類型,這些類型在框架的當前/早期版本中同樣不存在。 新的默認接口成員需要CLR更改。 因此,這些語言功能(語法)將無法針對早期的框架和CLR版本進行編譯。

與以前的語言迭代不同,Microsoft不會在新的.Net Framework 4.8版中發布這些要求。 相反,他們正在推動.Net Core 3.0作為參考平台,允許他們更快地進行迭代。

關於Visual Studio,雖然您可以在早期版本的IDE中使用C#8編寫代碼並將其編譯為.Net Core 3.0運行時,但您將失去大量的工具,簡單性和開發人員體驗。 語法高亮,完成,代碼修復等工具依賴於Roslyn,后者提供豐富的代碼分析API。

由於框架和語言部署未完全同步,因此使用Visual Studio預覽提供(大多數)兼容的框架和語言版本,以測試兩者的新功能。

一個很好的參考是Building C#8.0博客文章中的“平台依賴關系”部分。

編輯:

回答評論問題'如何安裝C#8':語言規范是作為編譯器(Roslyn)實現和交付的。 請參閱Roslyn GitHub存儲庫 ,其中概述了如何構建,發布和安裝編譯器 - 無論是否安裝特定的Visual Studio。

有兩種方法可以讓C#8.0進行編譯:

  • 將下一個Visual Studio與能夠理解它的Roslyn編譯器一起使用。 (fe Visual Studio 2019)
  • 安裝獨立的.NET Core SDK(可用時為3.0.0)並調用'dotnet build'

現在構建.NET Core 3.0.0將需要安裝相同的SDK。

構建.NET 4.8將需要安裝.NET Full Framework 4.8 SDK。

兩個SDK都可能隨Visual Studio 2019一起提供,或者您必須稍后安裝它們才能夠定位這些框架。

所以: - C# - > Roslyn編譯器

  • 運行時 - >相應的SDK

小附錄:看看對C#中新功能的支持,顯然微軟不會使.NET Full .NET框架(4.8及更高版本)與.NET Standard 2.1兼容。 只有.NET Core將來會繼續發展。

看看C#版本的更新和C#工具 ,它提供了與Visual Studio中的項目相關的語言的良好見解。

特別是,

在此方案中選擇的默認語言版本是“ 預覽” 您可以訪問的C#8.0功能完全基於您正在使用的編譯器版本(以及.NET SDK)。 在使用將來的預覽時,您可能會獲得更多(或略微調整)的功能。 當您構建項目時,.NET SDK將發出警告,表示這一切仍處於預覽狀態。

在回答

C#8.0,.NET Core 3.0和Visual Studio之間有什么關系?

語言,SDK和Visual Studio版本之間的關系比以前更加寬松。 語言可以在任何版本中獨立於.NET而發展。 這並不意味着永遠都是真的。 Visual Studio也獨立於語言和框架。 如果您查看Visual Studio安裝程序,您將看到語言和.NET支持是可以安裝的“工作負載”。 SDK提供語言功能,VS提供工具。

如果您現在要使用VS 2017,請查看

作為后續,我也很困惑在物理部署方面新的語言版本實際上是什么

它是包含可以從C#8.0源創建程序集的編譯器的SDK。

它是作為新的Visual Studio部署的一部分部署的新程序集,還是部分網絡核心sdk安裝或其他部分?

SDK的一部分,見上文。 這意味着除了您的代碼之外,沒有任何“部署”。 無論版本如何,您的代碼都針對.NET版本。 也就是說,.NET的目標版本必須存在於機器或容器上。

是否需要將C#8添加到完整框架和.NET Core?

它“不需要添加”。 此框架(4.8)和SDK(.NET Core 3.0)的較新版本附帶C#8.0支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM