【问题标题】:Debugging in vscode with multiple dotnet core projects under one solution在一个解决方案下使用多个 dotnet 核心项目在 vscode 中进行调试
【发布时间】:2016-05-22 15:50:42
【问题描述】:

我已经在 vscode 中设置了我的项目,其中包含一个定义子项目的 global.json 根“解决方案”。这些目前是我的网络应用程序和类库。

效果很好,我在根目录下设置了以下 launch.json 以尝试调试我的网络应用程序:

{
"version": "0.2.0",
"configurations": [
    {
        "name": "WebApp",
        "type": "coreclr",
        "request": "launch",
        "preLaunchTask": "",
        "program": "${workspaceRoot}/WebApp/bin/Debug/netcoreapp1.0/WebApp.dll",
        "args": [],
        "cwd": "${workspaceRoot}/WebApp/",
        "stopAtEntry": false,
        "launchBrowser": {
            "enabled": true,
            "args": "${auto-detect-url}",
            "osx": {
                "command": "open"
            }
        }
    }
]

}

我有两个问题。

  1. 我不得不删除 preLaunchTask 构建,因为它试图从根目录构建。不理想,但我可以先手动构建来解决这个问题。

  2. 当调试器启动时,它无法找到源代码,因为它在根目录中查找,而不是在子项目中。这是一个显示停止器,因为如果没有加载源,我根本无法使用断点。

有没有办法解决这些问题?

更新:2016 年 8 月 9 日

我将问题直接提交给 Omnisharp 并进一步了解,能够在一个解决方案下调试应用程序和单独的库。不过,在一个解决方案下的多个可执行项目上还没有完全中奖。不幸的是,我不再从事该项目,但希望这可以帮助某人找到一个完整的解决方案。

讨论和代码示例链接:https://github.com/OmniSharp/omnisharp-vscode/issues/460#issuecomment-228392486

【问题讨论】:

标签: visual-studio-code


【解决方案1】:

我遇到了同样的问题,我的解决方案有以下结构:

global.json
|src
--|TestApp
----Program.cs
----project.json
--|ExtLib
----ExtLibClass.cs
----project.json

在 .vscode 文件夹中的 task.json 文件中,您必须像这样设置选项值:

"command": "dotnet",
"isShellCommand": true,
"options": {
    "cwd": "${workspaceRoot}/src/TestApp"
},

在 .vscode 文件夹中的 launch.json 文件中,您必须像这样更改程序属性:

"configurations": [
    {
        "name": "TestApp Debug",
        "type": "coreclr",
        "request": "launch",
        "preLaunchTask": "build",
        "program": "${workspaceRoot}/src/TestApp/bin/Debug/netcoreapp1.0/TestApp.dll",
        "args": [],
        "cwd": "${workspaceRoot}/src/TestApp",

所以我可以在 Visual Studio 代码的解决方案中调试多个项目。

【讨论】:

    【解决方案2】:

    在 vs code v1.10.2 中,如果您在根目录中有解决方案,您可以处理多个项目。解决方案应采用 Visual Studio 15 格式。

    可以使用这些新的 dotnet cli 命令定义此解决方案:

    dotnet new sln //creates a new solution in folder
    dotnet sln add <path to the csproj file>  //adds project to solution
    

    还要在项目A中添加对某个项目B的引用,你应该移动到项目A文件夹并执行:

    dotnet add reference <path to the project B csproj file>  
    

    【讨论】:

      【解决方案3】:

      例如,如果您有多个可运行项目,即客户端/服务器:

      项目结构:

      Project
      --|Server
      ----Program.cs
      ----project.json
      --|Client
      ----Program.cs
      ----project.json
      

      我在launch.json中有两种不同的配置

      "configurations": [
          {
              "name": "Server",
              "type": "coreclr",
              "request": "launch",
              "preLaunchTask": "build",
              "program": "${workspaceRoot}/Server/bin/Debug/netcoreapp1.1/Server.dll",
              "args": [],
              "cwd": "${workspaceRoot}/Server",
              "stopAtEntry": false,
              "externalConsole": false
          },
          {
              "name": "Client",
              "type": "coreclr",
              "request": "launch",
              "preLaunchTask": "build",
              "program": "${workspaceRoot}/Client/bin/Debug/netcoreapp1.1/Client.dll",
              "args": [],
              "cwd": "${workspaceRoot}/Client",
              "stopAtEntry": false,
              "externalConsole": false
          }]
      

      还有tasks.json

      {
          "version": "0.1.0",
          "command": "dotnet",
          "isShellCommand": true,
          "args": [],
          "tasks": [
            {
              "taskName": "build",
              "args": ["Server","Client"],
              "isBuildCommand": true,
              "showOutput": "silent",
              "problemMatcher": "$msCompile"
            }
         ]
      }
      

      这将设置两个可调试项目,PreBuildTask 将在开始调试之前编译tasks.jsonargs 字段中指定的项目。 (服务器和客户端项目)

      在这种情况下,我已将项目设置为绑定到不同的端口,以便能够同时调试它们,方法是在 WebHostBuilder 中指定 Program.cs

      .UseUrls("http://localhost:5002")
      

      如果您使用的是 Visual Studio,则可以在 launchsettings.json 中更改此设置,而不是 VsCode。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-01
        • 1970-01-01
        • 2017-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        相关资源
        最近更新 更多