将我的.NET Core项目移动到解决方案的子文件夹后,我无法再使用VS Code对其进行调试。
如果我将tasks.json
和launch.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调试器以便能够运行位于子文件夹中的项目?
答案 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>
的值。