.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
相关产品推荐
相关产品推荐

