J'ai installé dotnet core 2.2 dans le sous-système Windows pour Linux (WSL) et créé un nouveau projet. J'ai également installé l'extension C # pour Visual Studio Code et la coloration syntaxique et IntelliSense semblent fonctionner.
Cependant, lorsque j'essaie d'utiliser le débogueur, les choses cessent de fonctionner. Voici une étape par étape de ce que j'ai essayé de faire pour le configurer.
Voici mon launch.json:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.Microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/netcoreapp2.2/CodeCore.dll",
"args": [],
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"stopAtEntry": false,
"internalConsoleOptions": "openOnSessionStart"
},
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/netcoreapp2.2/CodeCore.dll",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"internalConsoleOptions": "openOnSessionStart",
"launchBrowser": {
"enabled": true,
"args": "${auto-detect-url}",
"windows": {
"command": "cmd.exe",
"args": "/C start ${auto-detect-url}"
},
"osx": {
"command": "open"
},
"linux": {
"command": "xdg-open"
}
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}
Et mes tâches.json:
{
// See https://go.Microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet build",
"type": "Shell",
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
]
}
Ma structure de répertoires:
Mais lorsque je clique sur le bouton "Démarrer le débogage", j'obtiens l'erreur suivante:
launch: program " does not exist
Il y a un excellent article sur github concernant le sujet - Sous-système Windows pour Linux .
Pour résumer une longue histoire, vous devez d'abord vérifier votre version après la mise à jour des créateurs de Windows 10:
~$ cat /etc/os-release | grep -i version
VERSION="16.04.2 LTS (Xenial Xerus)"
VERSION_ID="16.04"
VERSION_CODENAME=xenial
Remarquez ce qui suit :
Si vous aviez mis à niveau vers la mise à jour Windows Creators et que WSL était déjà installé, vous pourriez toujours avoir Ubuntu 14 dans le WSL. Si la version est 14, exécutez les commandes suivantes dans une invite cmd pour réinstaller et mettre à jour WSL.
lxrun /uninstall /full
lxrun /install
Téléchargez le débogueur :
Sudo apt-get install unzip
curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
Le débogueur sera installé à ~/vsdbg/vsdbg
, c'est le debuggerPath.
Exemple de configuration launch.json pour le lancement :
{
"name": ".NET Core WSL Launch",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "publish",
"program": "/mnt/c/temp/dotnetapps/wslApp/bin/publish/wslApp.dll",
"args": [],
"cwd": "/mnt/c/temp/dotnetapps/wslApp",
"stopAtEntry": false,
"console": "internalConsole",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "bash.exe",
"pipeArgs": [ "-c" ],
"debuggerPath": "~/vsdbg/vsdbg"
}
}
Notez s'il vous plaît:
Exemple de tâche 'publier' pour tasks.json (nécessaire pour le lancement) :
{
"version": "2.0.0",
"tasks": [
...,
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/wslApp.csproj",
"-o",
"${workspaceFolder}/bin/publish"
]
}
]
}
Veuillez noter :
preLaunchTask exécute la publication dotnet, qui construit le projet sur Windows. Puisque coreclr est multiplateforme, le binaire peut être exécuté sur WSL sans aucun travail supplémentaire.
pipeProgram est défini sur bash.exe.
debuggerPath pointe vers vsdbg, le débogueur coreclr.
Cela ne prendra pas en charge les programmes qui souhaitent lire à partir de la console.
Exemple de configuration launch.json pour l'attachement :
{
"name": ".NET Core WSL Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickRemoteProcess}",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "bash.exe",
"pipeArgs": [ "-c" ],
"debuggerPath": "~/vsdbg/vsdbg",
"quoteArgs": true
}
}
Veuillez noter :
"processId": "${command:pickRemoteProcess}"
répertorie les processus exécutés sur WSL à l'aide du programme pipe.quoteArgs
citera tous les arguments et commandes de débogueur avec des espaces s'ils sont définis sur true.sourceFileMap
pour mapper les sources si elles sont disponibles dans un emplacement différent de celui où elles ont été créées. Si vous construisez votre projet sous Linux, assurez-vous d'ajouter une carte à partir de /mnt
lettres de lecteur. Exemple: "sourceFileMap": { "/mnt/c/": "c:\\" }