Search code examples
azure-web-app-servicegithub-actions

Change path of GitHub build action


I have a GitHub Action that is using the default Microsoft template for building an ASP.Net Core app to an Azure App Service.

At the top of the action, you can declare some environment variables. I have these set as follows:

name: Build and deploy ASP.Net Core app to an Azure Web App

env:
  AZURE_WEBAPP_NAME: (redacted)    # set this to the name of your Azure Web App
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '3.0'                 # set this to the .NET Core version to use

My issue is that the root folder doesn't contain the .csproj or .sln files. So this line is not correct: AZURE_WEBAPP_PACKAGE_PATH: '.'

I have tried changing it to AZURE_WEBAPP_PACKAGE_PATH: './FolderName/FolderName' (and many other variations), which is where the .csproj file is located, however the build still fails due to the following error:

MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.

Edit to include entire YAML file:

name: Build and deploy ASP.Net Core app to an Azure Web App

env:
  AZURE_WEBAPP_NAME: (redacted)    # set this to the name of your Azure Web App
  AZURE_WEBAPP_PACKAGE_PATH: '../../FolderName/FolderName'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '3.0'                 # set this to the .NET Core version to use

on:
  push:
    branches:
      - "master"
  workflow_dispatch:

permissions:
  contents: read

jobs:
  build:
    runs-on: windows-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v2
        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

  deploy:
    permissions:
      contents: none
    runs-on: windows-latest
    needs: build
    environment:
      name: 'Development'
      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 }}
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

Solution

  • I ran into the same issue and found the solution on this SO answer, despite the fact that it wasn't marked as the correct.

    Taking the above into account, your yaml file should look something like this:

    name: Build and deploy ASP.Net Core app to an Azure Web App
    
    defaults:
      run:
        working-directory: ./FolderName/FolderName
        
    env:
      AZURE_WEBAPP_NAME: (redacted) # set this to the name of your Azure Web App
      AZURE_WEBAPP_PACKAGE_PATH: '../../FolderName/FolderName' # set this to the path to your web app project, defaults to the repository root
      DOTNET_VERSION: '3.0' # set this to the .NET Core version to use