如何修复 Github Actions dotnet 发布工作流程错误:构建解决方案时不支持“--output”选项

Jif*_*ueb 5 asp.net-core github-actions

dotnet 发布工作流任务的工作方式发生了一些变化。我们使用这个非常简单的 yaml 脚本已经有一段时间了。

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 }}

Run Code Online (Sandbox Code Playgroud)

今天,我尝试使用工作流程运行,并在 dotnet 发布步骤中收到以下错误:

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. 
Run Code Online (Sandbox Code Playgroud)

我希望工作流程能够正常运行,就像之前已经执行过数十次一样。

这里究竟发生了什么?

Jif*_*ueb 4

经过大量研究和一些尝试和错误后,我意识到我必须明确指定 webapp 项目文件作为命令的参数。这是因为我仍然需要使用输出选项,因此 Github 知道在后续部署工作流程中在哪里可以找到文件。

然后就是确定项目文件的文件路径。对于其他人来说,这可能会有所不同,具体取决于其特定的 Visual Studio 解决方案文件结构。

以下是解决此问题的修复程序(假设当我在 VS 中创建项目时,我将其命名为MyWebApp

- name: dotnet publish
  run: dotnet publish ~/work/MyWebApp/MyWebApp/MyWebApp/MyWebApp.csproj -c Release -o ${{env.DOTNET_ROOT}}/myapp
Run Code Online (Sandbox Code Playgroud)

是的,有 3 个目录深。我的 Windows 文件资源管理器中的项目文件只有 2 个目录深。

希望这对某人有帮助。

更新 2023 年 3 月 30 日

感谢所有其他答案和评论!他们帮助我的构建工作并发布到 Azure,但是它仍然给我留下了关于 -output 不受支持的警告。

这就是我的 dotnetpublish 命令现在的样子。没有错误,没有警告

dotnet publish -c Release -property:PublishDir=${{env.DOTNET_ROOT}}/myapp
Run Code Online (Sandbox Code Playgroud)

  • 使用 `${{ github.workspace }}` 代替,如果他们更改工作目录,或者您需要使用 Windows 构建,则会更安全。 (3认同)