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

升级Umbraco至13.x后DevOps构建报错:project.assets.json无net8.0目标

Umbraco 13 (.NET 8) 升级后流水线构建异常问题解决思路

问题概述

将Umbraco从10.x(.NET 6)升级到13.x(.NET 8)后,流水线构建未提示失败,但产物中的myproj.deps.json和myproj.runtimeconfig.json仍指向.NETCoreApp,Version=v6.0,本地构建/发布则正常使用.NET 8。添加.NET 8 SDK指定任务后,构建时出现NETSDK1005错误:

##[error]C:\hostedtoolcache\windows\dotnet\sdk\8.0.204\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(266,5): Error NETSDK1005: Assets file 'D:\a\8\s\Dev\Main\myproj\obj\project.assets.json' doesn't have a target for 'net8.0'. Ensure that restore has run and that you have included 'net8.0' in the TargetFrameworks for your project.

已尝试的方案包括:指定.NET 8 SDK、确认.NET 8环境、安装NuGet 5.8、切换构建主机、修改项目文件的TargetFramework节点,但均未解决问题。

解决建议

1. 拆分Build与Restore任务,移除--no-restore参数

构建时使用--no-restore会跳过依赖还原步骤,流水线中残留的旧project.assets.json(对应.NET 6)未被更新。需先执行还原,再执行构建,且还原步骤必须使用.NET 8 SDK:

# 先执行依赖还原
- task: DotNetCoreCLI@2
  displayName: 'Dotnet Restore (NET 8)'
  inputs:
    command: 'restore'
    projects: '**/myproj.csproj'
    arguments: '--configuration $(BuildConfiguration) --framework net8.0'

# 再执行构建
- task: DotNetCoreCLI@2
  displayName: 'Build Project'
  inputs:
    projects: '**/myproj.csproj'
    arguments: '--configuration $(BuildConfiguration) --framework net8.0'

2. 清理流水线缓存的旧构建产物

流水线可能缓存了旧的obj/bin目录,导致新的还原和构建无法覆盖旧文件。在还原前添加清理步骤:

# 清理旧的obj和bin目录
- task: DotNetCoreCLI@2
  displayName: 'Dotnet Clean'
  inputs:
    command: 'clean'
    projects: '**/myproj.csproj'
    arguments: '--configuration $(BuildConfiguration)'

或者直接用命令行删除目录:

- task: CmdLine@2
  displayName: 'Clean obj/bin Folders'
  inputs:
    script: |
      rd /s /q "$(Build.SourcesDirectory)/Dev/Main/myproj/obj"
      rd /s /q "$(Build.SourcesDirectory)/Dev/Main/myproj/bin"

3. 彻底检查项目文件的.NET版本配置

确保项目文件(myproj.csproj)中无残留的.NET 6配置:

  • 单目标框架使用<TargetFramework>net8.0</TargetFramework>,多目标框架使用<TargetFrameworks>net8.0</TargetFrameworks>(无需保留net6.0)
  • 检查是否存在<RuntimeFrameworkVersion>节点,确保值为8.0.x(如8.0.5)
  • 移除任何针对.NET 6的条件编译节点(如Condition="'$(TargetFramework)' == 'net6.0'")

4. 调整任务顺序,确保.NET 8 SDK优先加载

将UseDotNet@2任务放在所有dotnet命令和NuGet安装任务之前,避免后续命令使用默认的.NET 6 SDK:

# 第一步:安装并启用.NET 8 SDK
- task: UseDotNet@2
  displayName: 'Use .NET Core SDK 8.x'
  inputs:
    version: 8.x
    includePreviewVersions: false

# 第二步:安装适配.NET 8的NuGet版本(建议6.x及以上)
- task: NuGetToolInstaller@1
  displayName: 'Use NuGet 6.x'
  inputs:
    versionSpec: 6.x

# 后续执行Clean、Restore、Build任务...

5. 检查流水线环境变量

确认流水线中未设置强制使用.NET 6的环境变量,例如DOTNET_ROLL_FORWARD、MSBuildSDKsPath等,这些变量可能会覆盖SDK版本选择逻辑。

内容的提问来源于stack exchange,提问作者user3447577

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:51:23