繁体   English   中英

nuget restore 启动 dotnetcore SDK 3.1.420 时未找到 Microsoft.NETCore.App.Host.win-x64

[英]Microsoft.NETCore.App.Host.win-x64 not found while nuget restore starting dotnetcore SDK 3.1.420

语境

迁移到 dotnetcore SDK 版本 3.1.420(由 Windows 更新自动安装)后,我们面临的问题是(在构建服务器上)构建解决方案失败,因为 nuget restore 无法恢复包Microsoft.NETCore.App.Host.win-x64

我们在 nuget.config 中配置了本地包提要,源nuget.org没有也不能直接访问!

现在我得到以下输出:

c:\> nuget.exe restore ***.sln -NoCache -NonInteractive -ConfigFile .nuget\NuGet.config
[...]
Errors in C:\build\_work\313\s\***.csproj
    NU1101: Unable to find package Microsoft.NETCore.App.Host.win-x64. No packages exist with this id in source(s): ***, ***, ***

NuGet Config files used:
    C:\build\_work\313\s\.nuget\NuGet.config

Feeds used:
    https://***.com/tfs/***/_packaging/A***/nuget/v3/index.json
    https://***.com/tfs/***/_packaging/B***/nuget/v3/index.json
    https://***.com/tfs/***/_packaging/C***/nuget/v3/index.json

环境:

C:\build\_work\313\s>dotnet --list-sdks
3.1.420 [C:\Program Files\dotnet\sdk]
5.0.400 [C:\Program Files\dotnet\sdk]
5.0.408 [C:\Program Files\dotnet\sdk]

问题

为什么在内容已经是安装的 SDK 的一部分时,还原过程会尝试获取 nuget 包?

我试过什么?

我已经使用 Process Monitor (Sysinternals) 分析了 nuget.exe 的行为。 我发现文件夹c:\Program Files\dotnet\packs\Microsoft.NETCore.App.Host.win-x64\3.1.25\被访问但没有找到,更新SDK后只存在文件夹3.1.26

为什么在安装“3.1.26”时还原过程会尝试访问“3.1.25”?

在我的本地计算机上,还原按预期工作。 该包在我的本地 NuGet 缓存中不可用。 此处文件夹c:\Program Files\dotnet\packs\Microsoft.NETCore.App.Host.win-x64\3.1.26\按预期访问。

我还尝试重新安装 SDK 版本。 没有效果。

首先,我强烈建议避免nuget.exe restore 如果可以的话,更喜欢dotnet restore ,否则msbuild -t:restore 它与您在这里遇到的问题无关,但您可以通过迁移来避免不同类型的问题。

无论如何,.NET Core SDK 3.1.419 将具有 3.1.25 版本的运行时主机,而 .NET Core SDK 3.1.420 具有 3.1.26 版本的运行时主机。 因此,当 SDK 从 419 升级到 420 时,旧版本的运行时主机被移除,并安装了新版本。

但是,正如您的dotnet --list-sdks输出所示,您已经安装了 .NET 5 SDK。 .NET 5 现已停止支持,因此在本月的星期二补丁中没有收到任何更新。 5 月,即 .NET 5 SDK 更新的最后一个月,.NET 3.1 托管应用程序包的最新版本是 3.1.25,因此当您使用 .NET 5 SDK 恢复/构建面向 .NET Core 3.1 的应用程序时,SDK 检查它知道的运行时托管包的版本,发现它在本地不可用,然后告诉 NuGet 下载它。

您可以使用 global.json 将该目录的 dotnet 命令固定到 .NET 3.1 SDK,也可以安装 2022 年 6 月的 .NET 6 SDK (6.0.301),然后他们都会知道 .NET 3.1运行时托管包的版本为 3.1.26,因此不应要求 NuGet 下载它。 好吧,除非您完全卸载 .NET 3.1 SDK 并使用 .NET 6 SDK 来构建它。

我知道这很混乱。 .NET 营销人员选择了无助于理解差异的名称,但 .NET SDK 是可以构建任何版本的 .NET 相同或更低版本的构建工具,并且 .NET 运行时是完全独立的。 如本答案前面所述,您可以使用 .NET 6 SDK 构建 .NET Core 3.1 应用程序,不需要 .NET Core 3.1 SDK(但运行时将需要,除非您发布“自包含”应用程序)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM