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

如何修复Github Actions中dotnet publish工作流的NETSDK1194错误?

问题

长期使用以下YAML脚本执行GitHub Actions的.NET发布工作流,此前运行数十次均无异常:

name: Publish to staging server

env:
  AZURE_WEBAPP_NAME: 'my-dotnet-webapp'
  AZURE_SLOT_NAME: 'staging'
  GITHUB_PUBLISH_SECRET: ${{ secrets.AZURE_DEPLOYMENTSLOT_STAGING }}
  AZURE_WEBAPP_PACKAGE_PATH: '.'
  DOTNET_VERSION: '7.0.0' 

on:
  push:
    branches:
      - staging
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}

      - name: Set up dependency caching for faster builds
        uses: actions/cache@v3
        with:
          path: ~/.nuget/packages
          key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
          restore-keys: |
            ${{ runner.os }}-nuget-

      - name: Build with dotnet
        run: dotnet build --configuration Release

      - name: dotnet publish
        run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v3
        with:
          name: .net-app
          path: ${{env.DOTNET_ROOT}}/myapp
          retention-days: 1

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: .net-app

      - name: Deploy to Azure Web App
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          slot-name: ${{ env.AZURE_SLOT_NAME }}
          publish-profile: ${{ env.GITHUB_PUBLISH_SECRET }}
          package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

今日运行时,dotnet publish步骤出现如下错误:

Error: /usr/share/dotnet/sdk/7.0.200/Current/SolutionFile/ImportAfter/Microsoft.NET.Sdk.Solution.targets(36,5): error NETSDK1194: The "--output" option isn't supported when building a solution. 
原因分析
  1. 错误本质:NETSDK1194错误明确说明——针对整个**解决方案(.sln文件)**执行dotnet publish时,不允许使用--output(即-o)参数。
  2. 触发变化:你的dotnet publish命令未指定具体项目文件(如xxx.csproj),默认会在当前目录寻找解决方案文件并执行发布。之前使用的.NET SDK 7.0.0版本对这种不规范用法限制较宽松,而GitHub Actions环境自动更新到了.NET SDK 7.0.200版本,该版本严格执行SDK规则,禁止对解决方案使用--output参数。
  3. 版本偏差:虽然工作流指定了DOTNET_VERSION: '7.0.0',但actions/setup-dotnet@v3默认会安装同主版本的最新补丁版(7.0.x系列最新版),导致实际运行时使用的是7.0.200而非指定的7.0.0。
解决方案

提供三种可行修复方案:

方案1:明确指定发布的项目文件

修改dotnet publish命令,指定具体项目路径(替换为你的实际项目文件路径):

dotnet publish YourProject/YourProject.csproj -c Release -o ${{env.DOTNET_ROOT}}/myapp

这种方式直接针对单个项目发布,--output参数完全合法,也是官方推荐的规范用法。

方案2:固定使用指定的.NET SDK版本

如果需要严格使用7.0.0版本,修改actions/setup-dotnet配置,添加strict: true参数强制安装精确版本:

- name: Set up .NET Core
  uses: actions/setup-dotnet@v3
  with:
    dotnet-version: ${{ env.DOTNET_VERSION }}
    strict: true

此方案为临时规避手段,长期来看更推荐使用方案1的规范写法。

方案3:移除--output参数(针对多项目解决方案)

若需发布整个解决方案,移除--output参数,每个项目会自动发布到各自的bin/Release/net7.0/publish目录下,之后需调整上传artifact的路径以匹配这些输出目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:50:17