VS代码:调试项目驻留在子文件夹中的.NET Core项目

问题描述 投票:3回答:3

将我的.NET Core项目移动到解决方案中的子文件夹后,我无法再使用VS Code对其进行调试。

如果我将tasks.jsonlaunch.json移动到项目文件夹并打开VS Code,我可以调试,但我希望能够在VS Code中打开整个解决方案。

我得到的错误信息是这样的:

MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.

该错误似乎表明我的任务运行器无法再找到我的项目,所以我尝试将其添加到tasks.json

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

    // My addition
    "options": {
        "cwd": "${workspaceRoot}/myProjectFolder"
    }
}

这样做我能够启动任务,但我得到以下错误:

Exception thrown: 'System.IO.FileNotFoundException' in 
Microsoft.Extensions.Configuration.FileExtensions.dll

如何配置.NET Core调试器以便能够运行驻留在子文件夹中的项目?

c# visual-studio-code .net-core
3个回答
1
投票

由mrtedweb指向的FileNotFoundException的原因,可以在不更改程序代码的情况下解决找不到appsettings.json的程序。

只需编辑launch.json,修改cwd配置以指向项目子文件夹而不是默认的根工作区,从cwd: ${workspaceRoot}${workspaceRoot}/TheProject

// C:\Solution\.vscode\launch.json
{
    "version": "0.2.0",
    "configurations": [
           {
                "name": ".NET Core Launch (console)",
                "type": "coreclr",
                "request": "launch",
                "preLaunchTask": "build",
                "program": "${workspaceRoot}/TheProject/bin/Debug/netcoreapp1.1/TheProject.dll",
                "args": [],
                "cwd": "${workspaceRoot}/TheProject",
                "stopAtEntry": false,
                "console": "internalConsole",
                "env": {
                    "ASPNETCORE_ENVIRONMENT": "Development",
                    "ASPNETCORE_URLS": "http://localhost:5050"                
                }            
            }
    ]
}

使用此launch.json,可以从VS Code运行应用程序,从根解决方案文件夹打开它,项目位于子文件夹中。

C:\Solution>code .

它也可以从命令行运行,而无需从项目子文件夹中更改程序中的路径。

C:\Solution\TheProject>dotnet run TheProject.csproj

1
投票

问题是你的tasks.json,你应该在父目录中复制你的子文件夹.vscode/tasks.json

当你从父目录创建你的tasks.json时,它会像你的tasks.json一样制作一个tasks.json

但是如果你复制在子文件夹中创建的tasks.json它应该是这样的:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",
            "type": "process",
            "args": [
                "build",
                "${workspaceFolder}/<change to your subfolder>/<your project>.csproj"
            ],
            "problemMatcher": "$msCompile"
        }
    ]
}

所以有.csproj文件,它在错误中说。


0
投票

由于项目已移至子文件夹,因此无法再找到appsettings.json文件。通过将以下变量添加到构造函数中,可以在StartUp.cs文件中轻松修复此问题:

var filePath = Path.Combine(env.ContentRootPath, "<project folder name>", "appsettings.json");

注意:您需要指定<project folder name>的值。

然后更新读取的行

.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)

阅读:

.AddJsonFile(filePath, optional: false, reloadOnChange: true)

此外,验证launch.json文件是否针对正确的程序文件。

"program": "${workspaceRoot}/<project name>/bin/Debug/netcoreapp1.1/<program name>.dll"

注意:您需要指定<project name><program name>的值。

© www.soinside.com 2019 - 2024. All rights reserved.