![](/img/trans.png)
[英]Can't enable CORS for specific API controllers in ASP.NET Core WebApp targeting 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 為 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.