1. 程式人生 > >.NET Core 2.1 Preview 2釋出

.NET Core 2.1 Preview 2釋出

我們今天宣佈釋出 .NET Core 2.1 Preview 2。這也是我們在接下來的兩到三個月內接近最終釋出的版本,該版本現已準備好進行廣泛的測試。我們希望您有任何反饋意見。

您可以在Windows,MacOS和Linux上下載並開始使用.NET Core 2.1 Preview 2:

您可以使用Visual Studio 2017 15.7 Preview 1或更高版本或Visual Studio Code 開發.NET Core 2.1應用程式。我們期望Visual Studio for Mac將在.NET Core 2.1 RTM 釋出時增加支援。

非常感謝你一直以來參與我們的測試工作,直到我們釋出.NET Core 2.1 RTM,我們將繼續需要你的幫助。

構建效能優化

.NET Core 2.1 中的構建時效能得到了很大的提升,特別是對於增量構建。這些改進同時適用於命令列上的dotnet build 和 Visual Studio 中的構建。 我們對 CLI 工具和 MSBuild 進行了改進,以使這些工具提供更快的體驗。

下面的圖表提供了您可以從.NET Core 2.0 以來所獲得的改進的具體數字。 我們專注於大型專案。

增量構建效能

這些改進來自許多變化,包括以下幾點:

如果您沒有看到使用.NET Core 2.1 Preview 2的顯著改進,我們很高興看看您的專案。

長時間執行的SDK構建伺服器

我們將長時間執行的伺服器新增到.NET Core SDK中,以提高常見開發操作的效能。 其中一些是移植自.NET Framework,另一些是新的。

已經新增以下SDK構建伺服器:

    • VBCSCompiler
    • MSBuild worker processes
    • Razor server

這些伺服器的主要優勢是,它們可以避免在每次dotnet build呼叫時都需要JIT編譯大量程式碼。它們會在一段時間後自動終止。

您可以通過以下命令手動終止構建伺服器程序:

dotnet buildserver shutdown

這個命令可可以在CI指令碼中使用,以便在完成構建之後終止工作程序。您也可以執行構建dotnet build -nodeReuse:false以阻止建立MSBuild工作程序。

新的SDK命令

以下工具已新增到SDK中:

  • dotnet watch
  • dotnet dev-certs
  • dotnet user-secrets
  • dotnet sql-cache
  • dotnet ef

我們發現這些工具非常受歡迎行,不把它們新增到單個專案中似乎不是正確的設計,所以我們將它們作為SDK的一部分。

這些工具以前是DotNetCliToolReference工具。他們不再以這種方式交付。當您採用.NET Core 2.1時,您可以刪除專案檔案中DotNetCliToolReference的條目。

全域性工具

.NET Core 現在有一個新部署和擴充套件機制。這種新體驗與 NPM 全域性工具非常相似,並且受到 NPM 全域性工具的啟發。

對於預覽版2,全域性工具的語法已更改,如以下示例中所示:

dotnet tool install -g dotnetsay 
dotnetsay

您可以通過檢視 donetsay 工具示例 來建立自己的全域性工具,(在安裝.NET Core 2.1 Preview 2之後)。

新工具引數

所有工具操作現在都使用該dotnet tool命令。Preview 2中添加了以下新功能:

  • dotnet tool install - 安裝一個工具
  • dotnet tool update - 解除安裝並重新安裝工具,並對其進行有效更新
  • dotnet tool uninstall - 解除安裝一個工具
  • dotnet tool list - 列出當前安裝的工具
  • --tool-path - 為每個呼叫指定一個特定的位置以(un)安裝和列出工具

次要版本前滾

從2.0開始可以在相同主要版本範圍內較新執行時版本上執行 .NET Core 應用程式。您可以在.NET Core 2.1 Preview 1文章中瞭解有關該行為的更多資訊

但是,.NET Core對於預覽版具有相反的行為。包括全域性工具在內的應用程式不會從一個預覽轉到另一個預覽,或從預覽到RTM。這意味著您需要釋出全域性工具的新版本以支援後期預覽和RTM。

預覽策略有點爭議。背後的原因是我們可能會在給定的預覽版和最終的RTM版之間做出破壞性的變更。這一策略使我們能夠做到這一點,同時儘量減少生態系統的破損。還有一種可能的情況是,為預覽而構建的軟體沒有使用RTM構建進行測試,但是,這種基本原理不太引人注目。

自.NET Core專案啟動以來,該策略已經實施。全域性工具使其更具挑戰性。我們非常感謝您對此的反饋和洞察力。

Sockets 效能和 SocketsHttpHandler

我們對.NET Core 2.1中的Sockets 進行了重大改進。Sockets 是傳出和傳入網路通訊的基礎。.NET Core 2.1中的更高層級網路 API(包括HttpClient和Kestrel)現在基於.NET sockets.。在早期版本中,這些更高級別的API基於原生網路實現。

SocketsHttpHandler現在是HttpClient的預設實現。SocketsHttpHandler最大的成就就是效能。它比現有的實現快得多。還有其他好處,例如:

  • 消除了libcurl(用於Linux和MacOS)和WinHTTP(用於Windows)的平臺依賴關係- 簡化了開發,部署和服務。
  • 跨平臺和平臺/依賴版本的一致行為。

您可以使用以下某種機制來配置程序以使用舊版本HttpClientHandler

從程式碼中,使用AppContext類:

AppContext.SetSwitch(“System.Net.Http.UseSocketsHttpHandler”,false);

AppContext開關也可以通過配置檔案進行設定。

通過環境變數也可以達到同樣的效果DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER。要退出,請將該值設定為false或0。

在Windows上,您可以選擇使用WinHttpHandlerSocketsHttpHandler以逐個呼叫為基礎。為此,請例項化其中一種型別,然後在例項化時將其傳遞給HttpClient

在Linux和MacOS上,您只能在程序基礎上配置HttpClient。在Linux上,如果您想使用舊的HttpClient實現,則需要自己部署libcurl。如果您的計算機上安裝了.NET Core 2.0,則libcurl已安裝。

自包含的應用程式服務

dotnet publish 現在用服務執行時版本釋出自包含應用程式。當您使用新SDK釋出自包含應用程式時,您的應用程式將包含該SDK已知的最新服務執行時版本。當您升級到最新的SDK時,您將使用最新的.NET Core執行時版本進行釋出。這適用於.NET Core 1.0執行時和更高版本。

自包含釋出依賴於NuGet.org上的執行時版本。你不需要在你的機器上有服務執行時。

使用.NET Core 2.0 SDK,自包含應用程式將與.NET Core 2.0.0 Runtime一起釋出,除非通過RuntimeFrameworkVersion屬性指定了不同的版本。有了這種新行為,您將不再需要設定此屬性來為自包含應用程式選擇更高的執行時版本。最簡單的方法是始終使用最新的SDK釋出。

Docker

我們正在整合我們用於.NET Core和ASP.NET Core的一系列Docker Hub儲存庫。我們將使用microsoft / dotnet作為我們唯一的.NET Core資源庫。

公開可用的統計資料表明,大多數使用者已經在使用dotnet回購,正如您通過以下泊塢扣拉取徽章所看到的那樣:

    • microsoft/dotnet ->
    • microsoft/aspnetcore ->
    • microsoft/aspnetcore-build ->

我們還為.NET Core Docker映象添加了一組環境變數,適用於2.0及更高版本。這些環境變數可以讓更多方案無需其他配置即可工作,例如在容器中開發ASP.NET Core應用程式

    • To sdk images (example)
      • ASPNETCORE_URLS=http://+:80
      • DOTNET_RUNNING_IN_CONTAINER=true
      • DOTNET_USE_POLLING_FILE_WATCHER=true
    • To Linux runtime-deps images (example)
      • ASPNETCORE_URLS=http://+:80
      • DOTNET_RUNNING_IN_CONTAINER=true
    • To Windows runtime images (example)
      • ASPNETCORE_URLS=http://+:80
      • DOTNET_RUNNING_IN_CONTAINER=true

注意:這些環境變數將在本月晚些時候新增到2.0 映象中。

支援的作業系統和晶片架構

最大的補充是支援Ubuntu 18.04並增加了官方的ARM32支援。

我們將支援 .NET Core 2.1 的以下作業系統版本

  • Windows客戶端:7,8.1,10(1607+)
  • Windows Server:2008 R2 SP1 +
  • macOS:10.12+
  • RHEL:7+
  • Fedora:26+
  • openSUSE:42.3+
  • Debian:8+
  • Ubuntu:14.04+
  • SLES:12+

Alpine 支援仍在預覽中。

我們將支援以下晶片架構:

  • 在Windows上:x64和x86
  • 在Linux上:x64和ARM32
  • 在macOS上:x64

Azure應用服務和VSTS部署

ASP.NET Core 2.1預覽不會自動部署到Azure App Service。相反,您可以選擇僅使用一點點配置來使用.NET Core預覽。有關更多資訊,請參閱在Azure應用程式服務上使用ASP.NET Core預覽

Visual Studio Team Service對.NET Core 2.1的支援將更接近RTM。

.NET Core 2.1 Preview 1 的關鍵改進

有一些重要的改進對於從.NET Core 2.1 Preview 1中重述很重要。有關更多詳細資訊,請參閱.NET Core 2.1 Preview 1 Announcement

  • 次要版本前滾
  • Span, Memory and friends
  • Windows Compatibility Pack

結束

請使用.NET Core 2.1 Preview 2測試您的現有應用程式。預先感謝您嘗試一下。我們需要您的反饋,在最終的2.1版本中通過線上的這些新功能測試到達終點。

.NET Core 2.1是.NET Core 2.0向前邁進的一大步。我們希望您找到能夠讓您升級的多項改進。

再一次感謝所有為釋出做出貢獻的人。我們非常感謝您貢獻的所有問題和PR,幫助您製作此預覽版。