Jacob Jeske
Jacob Jeske

Reputation: 43

Debugging Web Project w/ Visual Studio Code + ASP.NET 5 + Mono + Kestrel + OS X

I'm pretty new to OS X (4 days with my new mac), and I am working on setting up an environment where I can debug my Asp.Net 5 web project locally with the debugger built into Visual Studio Code, specifically getting the breakpoint to work when attaching to mono.

I followed these instructions for installing asp.net 5 and visual studio code. (http://docs.asp.net/en/latest/getting-started/installing-on-mac.html)

I then installed yeoman, and scaffolded out an aspnet project.

I ran commands dnu restore, dnu build, and dnx web.

The project runs locally on Kestrel at localhost:5000 just fine. I can also attach it to mono via the VS Code debugger.

The issue arises when I try to set breakpoints in the C# code. The debugger will not hit them.

After doing some research I found that I needed to specify the Startup.cs file to mono as the one to debug. (https://code.visualstudio.com/Docs/editor/debugging)

But after running mcs -debug Startup.cs, I get these errors:

Startup.cs(5,17): error CS0234: The type or namespace name `AspNet'     does not exist in the namespace `Microsoft'. Are you missing an assembly  reference?
Startup.cs(6,17): error CS0234: The type or namespace name `AspNet' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
Startup.cs(7,17): error CS0234: The type or namespace name `AspNet' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
Startup.cs(8,17): error CS0234: The type or namespace name `Data' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
Startup.cs(9,17): error CS0234: The type or namespace name `Extensions' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
Startup.cs(10,17): error CS0234: The type or namespace name `Extensions' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
Startup.cs(11,17): error CS0234: The type or namespace name `Extensions' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
Startup.cs(12,17): error CS0234: The type or namespace name `Extensions' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
Startup.cs(13,16): error CS0234: The type or namespace name `Models' does not exist in the namespace `palmtree'. Are you missing an assembly reference?
Startup.cs(14,16): error CS0234: The type or namespace name `Services' does not exist in the namespace `palmtree'. Are you missing an assembly reference?
Startup.cs(20,24): error CS0246: The type or namespace name `IHostingEnvironment' could not be found. Are you missing an assembly reference?
Startup.cs(20,49): error CS0246: The type or namespace name `IApplicationEnvironment' could not be found. Are you missing an assembly reference?
Startup.cs(39,16): error CS0246: The type or namespace name `IConfigurationRoot' could not be found. Are you missing an assembly reference?
Startup.cs(42,39): error CS0246: The type or namespace name `IServiceCollection' could not be found. Are you missing an assembly reference?
Startup.cs(62,31): error CS0246: The type or namespace name `IApplicationBuilder' could not be found. Are you missing an assembly reference?
Startup.cs(62,56): error CS0246: The type or namespace name `IHostingEnvironment' could not be found. Are you missing an assembly reference?
Startup.cs(62,81): error CS0246: The type or namespace name `ILoggerFactory' could not be found. Are you missing an assembly reference?

It looks like mono cannot debug compile the Startup.cs properly. Is anyone else getting this error when trying to set up debugging? Or does anyone have breakpoints working with mono, asp.net 5, kestrel, vs code, and OS X?

Upvotes: 3

Views: 1907

Answers (1)

SushiHangover
SushiHangover

Reputation: 74164

Debugging Visual Studio Code and ASP.NET 5 are in preview and at this time debugging ASP.NET 5 is not supported in Visual Studio Code (on any platform). Rest assured, we are working hard to bring these experiences to you in the near future.

Ref: https://code.visualstudio.com/docs/runtimes/ASPnet5

The Mono section that you are referring to is for compiling and attaching to a mono/.Net program (not an dnx ASP.NET-based one). ASP.NET 5 applications are compiled using the Roslyn compiler, not Mono's mcs.

Debugging a Mono Application Example:

Create a directory, cd into it and type code . to start VSCode using that directory.

mkdir monoconsoletest
cd monoconsoletest
code .

Create a new file in VSCode

enter image description here

Name it program.cs

enter image description here

Enter the following code into the editor:

using System;

namespace consoleViaVSCode
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Console.WriteLine ("Hello VSCode!");
        }
    }
}

enter image description here

You could compile and run this in a shell, but let create a tasks.json file so we can do it via the Command Palette.

Create a tasks.json file:

The next step is to set up the task configuration. To do this open the Command Palette with F1 and type in Configure Task Runner, press Enter to select it.

This will create a sample tasks.json file in the .vscode folder. The initial file has a large number of examples within it. Highlight it all, delete it and add:

{
    "version": "0.1.0",
    "command": "mcs",
    "isShellCommand": true,
    "showOutput": "silent",
    "args": ["-debug", "program.cs"]
}

enter image description here

Now you have one task that you can execute via task mcs down the Command Palette and this task will build your program.cs using Mono's mcs compiler with the '-debug' option that will create a program.exe.mdb file that has the debugging symbols for the program.exe application.

So execute that task and if you have no errors, a program.exe and program.exe.mdb` will show up in the file pane:

enter image description here

If you have any errors, they will show up in the Output pane (right of the source code pane).

Now lets add a task to run your program with mono .Net runtime with the options for it to wait for a debugger to attach.

Note: I would show you a mono debugger task but running a shell process like that is broken in VSC 0.10.1. and you would be to wrap it in a glup routine... :-/ so...

In the process.cs, set a break point on the Console.Write.... line:

enter image description here

From the shell that you started VSCode from:

mono --debug --debugger-agent=transport=dt_socket,server=y,address=127.0.0.1:5858 program.exe

Back in VSCode:

Click the Bug Icon and than the Config\Gear Icon and select "C# mono" to generate the default "attach" configuration. Select "Attach" and click green Start button:

enter image description here

And you will hit your breakpoint:

enter image description here

Upvotes: 6

Related Questions