C# VS代码:位于子文件夹中的调试项目.NET核心项目

C# VS代码:位于子文件夹中的调试项目.NET核心项目,c#,visual-studio-code,.net-core,C#,Visual Studio Code,.net Core,将.NET核心项目移动到解决方案中的子文件夹后,我无法再使用VS代码对其进行调试 如果我将tasks.json和launch.json移动到项目文件夹中并在那里打开VS代码,我可以调试,但我希望能够在VS代码中打开整个解决方案 我收到的错误消息如下: MSBUILD:错误MSB1003:指定项目或解决方案文件。当前工作目录不包含项目或解决方案文件。 该错误似乎表明我的任务运行程序无法再找到我的项目,因此我尝试将其添加到tasks.json: { "version": "0.1.0

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

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

我收到的错误消息如下:

MSBUILD:错误MSB1003:指定项目或解决方案文件。当前工作目录不包含项目或解决方案文件。

该错误似乎表明我的任务运行程序无法再找到我的项目,因此我尝试将其添加到
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调试器,使其能够运行驻留在子文件夹中的项目?

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

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

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

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

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

注意:您需要指定
的值,以及

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代码运行应用程序,从根解决方案文件夹打开应用程序,将项目放在子文件夹中

C:\Solution>code .
它也可以从命令行运行,而无需从项目子文件夹更改程序中的路径

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

问题是您的
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"
        }
    ]
}
{
“版本”:“2.0.0”,
“任务”:[
{
“标签”:“构建”,
“命令”:“dotnet”,
“类型”:“过程”,
“args”:[
“建造”,
“${workspaceFolder}/.csproj”
],
“问题匹配器”:“$msCompile”
}
]
}

因此有
.csproj
文件,它在错误中说。

我也有同样的问题。你找到解决方案了吗?没有,我已经决定在需要调试时从项目文件夹打开VS代码
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",
            "type": "process",
            "args": [
                "build",
                "${workspaceFolder}/<change to your subfolder>/<your project>.csproj"
            ],
            "problemMatcher": "$msCompile"
        }
    ]
}