使用 Visual Studio 代码调试 Web 项目 + ASP.NET 5 + Mono + Kestrel + OS X

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

我是 OS X 的新手(使用新的 mac 4 天),我正在努力设置一个可以调试我的 Asp.Net 5 的环境使用 Visual Studio 代码中内置调试器的本地 web 项目,特别是在附加到单声道时让断点工作。

我按照这些说明安装了 asp.net 5 和 visual studio 代码。 (http://docs.asp.net/en/latest/getting-started/installing-on-mac.html)

然后我安装了 yeoman,搭建了一个 aspnet 项目。

我 运行 命令 dnu restorednu builddnx web

该项目在 localhost:5000 的 Kestrel 上本地运行很好。我还可以通过 VS Code 调试器将它附加到单声道。

当我尝试在 C# 代码中设置断点时出现问题。调试器不会命中它们。

经过一些研究后,我发现我需要将 Startup.cs 文件指定为单声道作为要调试的文件。 (https://code.visualstudio.com/Docs/editor/debugging)

但是在 运行 mcs -debug Startup.cs 之后,我得到了这些错误:

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?

看起来单声道无法正确调试编译Startup.cs。尝试设置调试时是否有其他人遇到此错误?或者有人在使用 mono、asp.net 5、kestrel、vs code 和 OS X 时有断点吗?

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.

参考:https://code.visualstudio.com/docs/runtimes/ASPnet5

您所指的 Mono 部分用于编译和附加到 mono/.Net 程序(不是基于 dnx ASP.NET 的程序)。 ASP.NET 5 个应用程序是使用 Roslyn 编译器编译的,而不是 Mono 的 mcs

调试 Mono 应用程序示例:

创建一个目录,cd 进入该目录并键入 code . 以使用该目录启动 VSCode。

mkdir monoconsoletest
cd monoconsoletest
code .

在 VSCode

中创建一个新文件

命名为program.cs

在编辑器中输入以下代码:

using System;

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

您可以在 shell 中编译并 运行 这个,但是让我们创建一个 tasks.json 文件,这样我们就可以通过 Command Palette .

创建一个tasks.json文件:

下一步是设置任务配置。为此,使用 F1 打开命令面板并输入 Configure Task Runner,按 Enter 键 select 它。

这将在 .vscode 文件夹中创建一个示例 tasks.json 文件。初始文件中包含大量示例。全部突出显示,删除它并添加:

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

现在您有一项任务可以通过 task mcs 向下执行 Command Palette 并且该任务将使用带有“-debug”选项的 Mono 的 mcs 编译器构建您的 program.cs将创建一个 program.exe.mdb 文件,其中包含 program.exe 应用程序的调试符号。

因此执行该任务,如果没有错误,program.exe 和 program.exe.mdb` 将显示在文件窗格中:

如果您有任何错误,它们将显示在 Output 窗格中(源代码窗格右侧)。

现在让我们使用 mono .Net 运行time 将 task 添加到 运行 您的程序,并提供等待调试器附加的选项。

注意:我会向您展示一个 mono debugger task 但 运行 宁一个 shell 这样的过程在 VSC 0.10.1 中被破坏了。你会把它包装在一个 glup 例程中......:-/ 所以......

process.cs中,在Console.Write....行设置断点:

从您开始 VSCode 的 shell 来自:

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

返回 VSCode:

单击 Bug Icon 然后单击 Config\Gear Icon 和 select "C# mono" 以生成默认的 "attach" 配置。 Select "Attach" 然后点击绿色的开始按钮:

你将到达你的断点: