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

好久不见. 提交于 2019-12-06 08:41:20

问题


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?


回答1:


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

Name it program.cs

Enter the following code into the editor:

using System;

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

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

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:

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:

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:

And you will hit your breakpoint:



来源:https://stackoverflow.com/questions/33859894/debugging-web-project-w-visual-studio-code-asp-net-5-mono-kestrel-os-x

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!