You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至.NET6时TC构建机找不到Microsoft.NETCore.App.Host.win-x64

问题背景
  • 计划将所属代码仓库从.NET5迁移至.NET6,因涉及项目数量较多,拟分多阶段推进,迁移过程中会存在部分项目仍面向.NET5、其余项目已升级至.NET6的中间状态。
  • 仓库使用私有NuGet源,已禁用官方nuget.org源。
  • 迁移第一步更新了global.json配置文件,内容如下:
{
  "sdk": {
    "version": "6.0.201",
    "rollForward": "disable"
  }
}

该配置此前指定的SDK版本为5.0.201。通过dotnet --list-sdks命令确认本地环境已安装6.0.201版本SDK,输出如下:

╰─ dotnet --list-sdks
5.0.102 [C:\Program Files\dotnet\sdk]
5.0.201 [C:\Program Files\dotnet\sdk]
6.0.201 [C:\Program Files\dotnet\sdk]
6.0.300 [C:\Program Files\dotnet\sdk]
  • 随后选取仓库内部分项目,将目标框架配置从:
<TargetFramework>net5.0-windows</TargetFramework>

修改为:

<TargetFramework>net6.0-windows</TargetFramework>

修改完成后本地编译完全正常,无任何报错或警告。

  • 但TeamCity(TC)构建机无法完成该仓库构建,所有未完成迁移的net5.0项目均出现如下报错:
NU1101: Unable to find package Microsoft.NETCore.App.Host.win-x64. No packages exist with this id in source(s): Microsoft Visual Studio Offline Packages, MyLocalNuGetCache
  • 本地环境排查时未找到Microsoft.NETCore.App.Host.win-x64包,但本地构建可正常运行。同时在TC构建机上执行dotnet --list-sdks命令,确认已安装6.0.201版本SDK,输出如下:
╰─ dotnet --list-sdks
5.0.102 [C:\Program Files\dotnet\sdk]
5.0.201 [C:\Program Files\dotnet\sdk]
6.0.201 [C:\Program Files\dotnet\sdk]
咨询问题
  • Microsoft.NETCore.App.Host.win-x64包的作用是什么,如何在本地环境中定位该包?
  • 排查TC构建机上仓库构建失败问题的最优切入点是什么?
问题解答

Microsoft.NETCore.App.Host.win-x64包的作用与本地定位方法

这个包是.NET Windows x64平台的原生宿主组件,核心作用是提供.NET应用启动所需的原生引导二进制,负责在进程启动时加载CLR运行时,属于.NET SDK/运行时自带的内置组件,不会作为独立NuGet包发布到公共源供用户主动拉取。
本地不需要在NuGet缓存中查找该包,直接进入SDK安装目录即可定位:对应版本的组件存放在C:\Program Files\dotnet\sdk\<SDK版本号>\RuntimePacks\Microsoft.NETCore.App.Host.win-x64路径下。本地构建能正常运行,就是因为NuGet还原时会优先扫描SDK内置的运行时包,不会主动去配置的NuGet源查找该组件。

TC构建机构建失败的排查切入点

报错的核心原因是NuGet还原流程没有扫描到本地SDK内置的运行时包,才会转向配置的私有源查找并触发NU1101错误,按优先级从高到低排查效率最高:

  • 第一优先级检查构建还原参数:查看TC构建步骤中的dotnet还原命令是否误加了--no-restore-runtime-packs开关,或者仓库内的NuGet.Config、项目文件中是否配置了RestoreRuntimePackages=false属性,这两个配置会直接禁用本地SDK运行时包的扫描逻辑,强制NuGet从远程源拉取运行时组件。
  • 第二优先级检查TC服务运行权限:如果TC构建服务的运行账号没有C:\Program Files\dotnet目录的读取权限,NuGet就无法遍历目录下的内置运行时包,直接触发找不到包的错误。
  • 第三优先级校验TC机上.NET 5.0 SDK的安装完整性:使用6.0 SDK编译net5.0项目时,需要依赖本地已安装的5.0版本运行时组件。虽然TC机显示已安装5.0.201版本SDK,但如果使用了精简安装包、或者安装过程中RuntimePacks目录下的文件被安全软件拦截删除,就会出现组件缺失,直接对比本地开发机和TC机的C:\Program Files\dotnet\sdk\5.0.201\RuntimePacks目录文件即可确认完整性。
  • 最后可尝试清理NuGet缓存:如果之前构建留下了损坏的缓存文件,也可能导致本地包识别失败,在还原步骤前执行dotnet nuget locals all --clear清理全量缓存后再重试即可。

内容的提问来源于stack exchange,提问作者LA.27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 12:01:04