使用 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 restore
、dnu build
和 dnx 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" 然后点击绿色的开始按钮:
你将到达你的断点:
我是 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 restore
、dnu build
和 dnx 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" 然后点击绿色的开始按钮:
你将到达你的断点: