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

.NET 4.6.1的ASP.NET MVC项目GitHub Actions构建失败求助

问题背景

我们有一个基于.NET 4.6.1的ASP.NET MVC项目,依赖3个其他项目:

  • 项目1、2:多目标框架配置为 <TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
  • 项目3:升级后多目标框架配置为 <TargetFrameworks>net461;net8.0</TargetFrameworks>(原先是.NET 6)

此前构建正常,但将项目3从.NET 6升级到.NET 8后,该MVC项目的GitHub Actions构建失败,不过项目3在其他.NET 8应用的GitHub Actions中可正常构建。当前使用的GitHub Actions YAML如下:

name: MVC Devel Builder
on:
  workflow_dispatch:
    inputs:
      branch_name:
        required: false
        description: The git branch name to build
        default: "master"
  push:
    branches:
      - master
    paths:
      - 'Project1/**'
      - 'Project2/**'
      - 'Project3/**'
      - 'mvc/**'
jobs:
  Build:
    runs-on: [self-hosted, windows-2019]
    steps:
    - name: Checkout
      uses: actions/checkout@v2
      with:
        ref: ${{ github.event.inputs.branch_name || 'master' }}
        submodules: 'true'
        
    - uses: Special internal nuget repo
      with:
        package-manager: nuget
    
    - name: Nuget restore
      run: nuget restore .\mvc\mvc.sln
    
    - name: Install msbuild
      uses: microsoft/setup-msbuild@v1
    
    - name: Run msbuild
      shell: cmd
      run: msbuild mvc/mvc.sln -p:Configuration=Staging
      
    - name: Setup VSTest Path
      uses: darenm/Setup-VSTest@v1.2
    
    - name: Run VSTest
      run: vstest.console.exe mvc/mvc.Tests/bin/Staging/mvc.tests.dll
    
    - name: Copy configs
      shell: cmd
      run: |-
        mkdir "mvc/transformed-config/"
        copy mvc\mvc\bin\mvc.dll.config mvc\transformed-config\Web.config
        
    - name: Archive artifacts
      uses: actions/upload-artifact@v3
      with:
        ...
          
    - name: Alert on failure
      if: ${{ failure() }}
      ...
遇到的错误
  • 错误1:Error NETSDK1004: Assets文件'C:\image\actions-runner_work\auds\auds\project1\obj\project.assets.json'未找到,请运行NuGet包还原生成该文件。
  • 错误2:指定-p:TargetFramework=net461时出现:Error NETSDK1045: 当前.NET SDK不支持面向.NET Standard 4.6.1,请面向.NET Standard 2.1或更低版本,或使用支持该版本的.NET SDK。
解决方案

1. 配置兼容的.NET SDK版本

由于项目混合了.NET 4.6.1、.NET Standard 2.0和.NET 8,直接用.NET 8 SDK即可(它向下兼容前两者的构建需求)。在Actions中添加步骤安装.NET 8 SDK:

- name: Setup .NET SDK
  uses: actions/setup-dotnet@v3
  with:
    dotnet-version: '8.0.x'

Windows 2019默认已安装.NET Framework 4.8,完全兼容.NET 4.6.1的构建要求,无需额外安装。

2. 替换NuGet Restore为dotnet restore

传统nuget restore处理多目标框架混合项目时容易出现资产文件缺失问题,改用dotnet restore能更好地处理跨框架依赖:

- name: Dotnet Restore
  run: dotnet restore .\mvc\mvc.sln

如果有内部NuGet源,提前用dotnet nuget add source配置好,或者确保项目根目录的NuGet.Config已包含该源。

3. 调整MSBuild命令参数

错误2里的.NET Standard 4.6.1是参数误解,实际我们要指定的是.NET Framework 4.6.1。修改MSBuild命令,明确指定目标框架,同时关闭共享编译避免缓存问题:

- name: Run msbuild
  shell: cmd
  run: msbuild mvc/mvc.sln -p:Configuration=Staging -p:TargetFramework=net461 -p:UseSharedCompilation=false

4. 优化测试运行环节

改用dotnet test运行测试,比单独调用vstest.console.exe更适配跨框架项目:

- name: Run Tests
  run: dotnet test mvc/mvc.Tests/mvc.Tests.csproj -c Staging --no-restore

完整调整后的GitHub Actions YAML示例

name: MVC Devel Builder
on:
  workflow_dispatch:
    inputs:
      branch_name:
        required: false
        description: The git branch name to build
        default: "master"
  push:
    branches:
      - master
    paths:
      - 'Project1/**'
      - 'Project2/**'
      - 'Project3/**'
      - 'mvc/**'
jobs:
  Build:
    runs-on: [self-hosted, windows-2019]
    steps:
    - name: Checkout
      uses: actions/checkout@v4
      with:
        ref: ${{ github.event.inputs.branch_name || 'master' }}
        submodules: 'true'
        
    - name: Setup .NET SDK
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: '8.0.x'
    
    - name: Configure Internal NuGet Source
      run: dotnet nuget add source "https://your-internal-nuget-repo-url" --name "InternalRepo" --username ${{ secrets.NUGET_USERNAME }} --password ${{ secrets.NUGET_PASSWORD }} --store-password-in-clear-text
    
    - name: Dotnet Restore
      run: dotnet restore .\mvc\mvc.sln
    
    - name: Install msbuild
      uses: microsoft/setup-msbuild@v2
    
    - name: Run msbuild
      shell: cmd
      run: msbuild mvc/mvc.sln -p:Configuration=Staging -p:TargetFramework=net461 -p:UseSharedCompilation=false
      
    - name: Run Tests
      run: dotnet test mvc/mvc.Tests/mvc.Tests.csproj -c Staging --no-restore
    
    - name: Copy configs
      shell: cmd
      run: |-
        mkdir "mvc/transformed-config/"
        copy mvc\mvc\bin\Staging\mvc.dll.config mvc\transformed-config\Web.config
        
    - name: Archive artifacts
      uses: actions/upload-artifact@v4
      with:
        name: mvc-build-artifacts
        path: |
          mvc/mvc/bin/Staging/
          mvc/transformed-config/
          
    - name: Alert on failure
      if: ${{ failure() }}
      # 保留你的原有告警逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:45:16