VS代码:位于子文件夹

时间:2017-04-13 13:20:46

标签: c# visual-studio-code .net-core

将我的.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调试器以便能够运行位于子文件夹中的项目?

3 个答案:

答案 0 :(得分: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 :(得分: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文件,它指出了错误。

答案 2 :(得分: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>的值。