'VSCode - How to specify which project to debug - Azure Functions

My question is a noobie question.

I have an azure function app project, along with a test project. Initially, I start with just the function application project and then I just recently re-org the project folders and added the associated test.csproj The folder structure I have right now looks like this:

enter image description here

Since moving the function app into the "src" folder, when I want to just run locally, I make sure that from my powershell terminal, I do the following:

cd src
func start

And everything works really well. But if I want to step through the code / debug, hitting F5 doesn't work because it doesn't know which project I'm trying to debug.

Can you tell me how I can debug either project from the parent folder that I'm in ?

I've tried to change my launch.json from this:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to .NET Functions",
      "type": "coreclr",
      "request": "attach",
      "processId": "${command:azureFunctions.pickProcess}"
    }
  ]
}

To this:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "FunctionApp",
      "type": "coreclr",
      "request": "attach",
      "processId": "${command:azureFunctions.pickProcess}",
      "program": "${workspaceFolder}/src/bin/Debug/net6.0/bin/widgets.dll",
      "cwd": "${workspaceFolder}/src"
    }
  ]
}

And now I see a Green play button with the name "FunctionApp" in my "Run and Debug" bar across the top, but when I try to run it, I get an error that says:

Executing task: C:\Program Files\dotnet\dotnet.exe clean /property:GenerateFullPaths=true /consoleloggerparameters:NoSummary <

Microsoft (R) Build Engine version 17.0.0+c9eb9dd64 for .NET Copyright
(C) Microsoft Corporation. All rights reserved.   

MSBUILD : error MSB1003: Specify a project or solution file. The
current working directory does not contain a project or solution file.
The terminal process "C:\Program Files\dotnet\dotnet.exe 'clean',
'/property:GenerateFullPaths=true',
'/consoleloggerparameters:NoSummary'" terminated with exit code: 1.

Terminal will be reused by tasks, press any key to close it.

EDIT 1

I tried to follow this example:

https://i.stack.imgur.com/a7ZVk.png

I also changed all references in my task.json from "process" to "shell" based on this post: Debugging Azure Function with vscode

So presently, this is what the two files look like:

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to .NET Functions",
      "type": "coreclr",
      "request": "attach",
      "processId": "${command:azureFunctions.pickProcess}"
    }
  ]
}

tasks.json

Just showing what I understand is the relevant section...

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "host function",
      "command": "func host start",
      "type": "shell",
      "options": {
        "cwd": "${workspaceFolder}/src"
      }
    },

But the error I'm getting is this:

Failed to detect running Functions host within "60" seconds. You may want to adjust the "azureFunctions.pickProcessTimeout" setting.

When I try Run -> Start with debugging, the application starts, and I can trigger my API... but it doesn't stop at any of the breakpoints.



Solution 1:[1]

So the complete solution was to

a) Revert my launch.json back to the original version which looks like this:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to .NET Functions",
      "type": "coreclr",
      "request": "attach",
      "processId": "${command:azureFunctions.pickProcess}"
    }
  ]
}

b) added new section to my tasks.json:

{
  "label": "host function",
  "command": "func host start",
  "type": "shell",
  "options": {
    "cwd": "${workspaceFolder}/src"
  }
},

c) Then I changed ALL references to "process" to "shell" in the tasks.json. d) Lastly, to fix the error with azureFunctions.pickProcessTimeout, I did the following:

File -> Preferences -> Settings -> search for the specific setting and increased from 60 seconds to 180

enter image description here

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 dot