我正在构建一个Azure函数项目,所以我不能以.NET 5为目标,相反,我的项目是一个netcoreapp3.1。然而,当我的项目被构建时,只要有一些信息被打印出来,我就会看到dotnet 5被提到。示例:
##warning/usr/share/dotnet/sdk/5.0.101/Microsoft.Common.CurrentVersion.targets(2123,5):警告
MSB3245:无法解析此引用。无法找到程序集"System.Text.Json、Version=4.0.1.0、Culture=neutral、PublicKeyToken=cc7b13ffcd2ddd51“。检查以确保程序集存在于磁盘上。如果代码需要此引用,则可能会出现编译错误。
(我对System.Text.Json的问题本身就是一个问题,在这篇文章中,我想了解.NET 5如何构建netcoreapp3.1)。
我在.NET 5旁边的系统上安装了.NET Core3.1。为什么构建系统不使用.NET 5?我相信.NET 5与3.1相比有一些重大变化,所以我不确定使用.NET 5构建这个项目是否可以。
同样的事情发生在Azure DevOps管道构建中,也发生在本地。在本地,在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。
发布于 2021-01-19 14:55:46
你需要分开三件事:
。
在本例中,build为5,目标平台为3.1;这很好-- build 5在目标特性方面完全了解.NET Core3.1,所以它知道该做什么。只要运行时至少是.NET Core3.1,就应该没有问题(如果我们假设在未来的运行时环境中没有人对核心库进行破坏性的更改)。
build是v5这一事实很有趣,但在很大程度上是无关紧要的--他们可以给build提供完全不同的版本号,而且一切都会正常工作。保持它们的同步是很有用的,所以你知道什么是什么。
如果您真的想使用特定的build,而不是默认的(这主要意味着:最高的):这就是global.json可以为您启用的。
发布于 2021-01-19 14:54:25
用于构建项目的.NET核心版本Visual (或Rider)与用于运行目标应用程序的版本有区别。默认情况下,最新安装的版本用于构建,并且它运行在使用<TargetFramework>文件中的.csproj条目指定的版本上。如果构建在.NET Core5.0中运行良好,我会坚持这样做,因为它允许使用一些高级特性,即使使用旧的运行时也是如此。
如果您对5.0有问题(即使在构建基础结构中也有一些改变),您可以在项目根目录中创建一个名为global.json的文件,告诉build系统使用哪个SDK。
这个global.json文件确保构建使用最新的.NET核心3.1版本:
{
"sdk": {
"version": "3.1.101",
"rollForward": "minor"
}
}https://stackoverflow.com/questions/65793800
复制相似问题