簡體   English   中英

.NET 5如何構建netcoreapp3.1?

[英]How can netcoreapp3.1 be built by .NET 5?

我正在構建一個 Azure Function 項目,所以我無法定位 .NET 5。相反,我的項目是netcoreapp3.1 但是,當我的項目構建時,只要打印一些信息,我就會看到 dotnet 5 被提及。 例子:

##[警告]/usr/share/dotnet/sdk/5.0.101/Microsoft.Common.CurrentVersion.targets(2123,5):警告 MSB3245:無法解析此引用。 找不到程序集“System.Text.Json,版本=4.0.1.0,文化=中性,PublicKeyToken=cc7b13ffcd2ddd51”。 檢查以確保該程序集存在於磁盤上。 如果您的代碼需要此引用,您可能會遇到編譯錯誤。

(我遇到的 System.Text.Json 問題本身就是一個問題,在這篇文章中,我想了解 .NET 5 如何構建 netcoreapp3.1)。

我在 .NET 5 旁邊的系統上安裝了 .NET Core 3.1。為什么構建系統不使用 3.1? 我相信 .NET 5 與 3.1 相比有一些重大變化,所以我不確定是否可以使用 .NET 5 來構建項目。

同樣的事情發生在 Azure DevOps Pipeline 構建和本地。 在本地,在 Rider 中,我在構建時也看到了這一點:

控制台:使用構建工具:/usr/share/dotnet/sdk/5.0.102/MSBuild.dll

這是ll /usr/share/dotnet/sdk的結果:

drwxr-xr-x 28 root root  12K sty 13 08:24 3.1.405/
drwxr-xr-x 28 root root  12K sty 13 08:24 5.0.102/

如您所見,我有 3.1 和 5。

你需要分開三件事:

  • 用於執行構建步驟的構建 SDK
  • 定義核心包中可用的 API 功能的目標平台(由構建 SDK 使用)
  • 用於實際執行應用程序的運行時平台,預計將支持目標平台的 API 功能

在這種情況下,構建SDK 為 5,目標平台為 3.1; 很好 - 構建 SDK 5 在目標功能方面了解 .NET Core 3.1 的所有信息,因此它知道該怎么做。 只要運行時至少是 .NET Core 3.1,就應該沒問題(如果我們假設在未來的運行時環境中沒有人對核心庫進行重大更改)。

構建SDK 是 v5 的事實很有趣,但在很大程度上無關緊要 - 他們可以為構建 SDK 提供完全不同的版本號,一切仍然有效。 讓它們保持同步很有用,所以你知道什么是什么。

如果您真的想使用特定版本SDK 而不是默認版本(這在很大程度上意味着:最高):這就是global.json可以為您啟用的。

Visual Studio(或 Rider)用於構建項目的 .NET Core 版本與用於運行目標應用程序的版本之間存在差異。 默認情況下,最新安裝的版本用於構建,它針對 .csproj 文件中的<TargetFramework>條目指定的版本運行。 如果構建在 .NET Core 5.0 上運行良好,我會堅持這樣做,因為即使針對舊運行時,它也允許使用一些高級功能。

如果您對 5.0 有問題(甚至在構建基礎架構中也有一些重大更改),您可以在項目根目錄中創建一個名為global.json的文件,告訴構建系統使用哪個 SDK。

這個global.json文件確保構建使用最新的 .NET Core 3.1 版本:

{
  "sdk": {
    "version": "3.1.101",
    "rollForward": "minor"
  }
}

暫無
暫無

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

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