GNU/Linux >> Tutoriels Linux >  >> Linux

Débogage à distance d'une application .NET Core Linux dans WSL2 à partir de Visual Studio sous Windows

Avec Visual Studio Code et WSL (Windows Subsystem for Linux), vous pouvez être dans un environnement Linux réel et exécuter "code". à partir de l'invite Linux et Visual Studio Code se lancera dans Windows et sera effectivement divisé en deux. Un serveur VSCode fonctionnera sous Linux et gérera les services linguistiques, le débogueur, etc., tandis que Windows exécute votre instance VS Code. Vous pouvez également utiliser VS Code pour développer sur des machines distantes via SSH et cela fonctionne très bien. En fait, il y a toute une série de didacticiels à distance à découvrir ici.

VS Code est un excellent éditeur de code, mais ce n'est pas un IDE (environnement de développement intégré) complet, il y a donc encore de nombreuses raisons pour moi d'utiliser et d'apprécier Visual Studio sur Windows (ou Mac).

Je voulais voir s'il était possible de faire du débogage "à distance" avec WSL et Visual Studio (pas Code) et si oui, est-ce quelque chose qui VOUS intéresse, cher lecteur.

  • Pour commencer, j'ai WSL (en particulier WSL2) sur ma machine Windows 10. Vous pouvez obtenir WSL1 aujourd'hui sur Windows à partir des "fonctionnalités Windows" simplement en l'ajoutant. Vous pouvez obtenir WSL2 aujourd'hui dans la "Sonnerie lente" de Windows Insiders.
  • Ensuite, j'ai le nouveau terminal Windows. Pas nécessaire pour cela, mais c'est génial si vous aimez la ligne de commande.
  • J'ai la communauté Visual Studio 2019

J'utilise également .NET Core avec C# pour ma plate-forme et le langage de mon choix. J'ai installé depuis https://dot.net/ dans Ubuntu 18.04, sous Windows. J'ai une application Web (dotnet new razor ) qui fonctionne très bien sous Linux maintenant.

À partir de l'invite WSL dans le terminal, je peux exécuter "explorer.exe". et il lancera l'Explorateur Windows sur le chemin \\wsl$\Ubuntu-18.04\home\scott\remotewebapp, mais VS a actuellement des problèmes pour ouvrir des projets à travers cette limite de réseau. Je vais plutôt mettre mes affaires dans c:\temp\remotewebapp et y accéder depuis Linux en tant que /mnt/c/temp/remotewebapp.

Dans un monde parfait - c'est une future spéculation/brainstorming, Visual Studio détecterait quand vous avez ouvert un projet à partir d'un chemin Linux et "Do The Right Thing(tm)".

Je dois d'abord m'assurer que le VSDbg est installé dans WSL/Linux. Cela se fait automatiquement avec VS Code mais je le ferai manuellement en une seule ligne comme ceci :

curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l ~/vsdbg

Nous aurons besoin d'un fichier launch.json contenant suffisamment d'informations pour lancer le projet, l'attacher avec le débogueur et remarquer quand les choses ont commencé. VS Code le fera pour vous. Dans un avenir théorique, Visual Studio détecterait également le contexte et générerait ce fichier pour vous. Voici le mien, je l'ai mis dans .vs/launch.json dans le dossier du projet.

VS fera également un launch.json mais vous devrez ajouter les deux parties les plus importantes, la partie $adapter et $adapterArgs comme je l'ai ici.

{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"version": "0.2.0",
"configurations": [
{
"$adapter": "C:\\windows\\sysnative\\bash.exe",
"$adapterArgs": "-c ~/vsdbg/vsdbg",
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "/mnt/c/temp/remotewebapp/bin/Debug/netcoreapp3.0/remotewebapp.dll",
"args": [],
"cwd": "/mnt/c/temp/remotewebapp",
"stopAtEntry": false,
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
"serverReadyAction": {
"action": "openExternally",
"pattern": "^\\s*Now listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
},
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "bash.exe",
"pipeArgs": [ "-c" ],
"debuggerPath": "~/vsdbg/vsdbg"
},
"logging": { "engineLogging": true }
}
]
}

Ces fichiers launch.json sont utilisés par VS et VS Code et d'autres éléments et donnent suffisamment au système et au débogueur pour continuer. Je ne connais aucun moyen d'automatiser cette prochaine étape et de l'attacher à un bouton comme "Démarrer le débogage" - ce serait un nouveau travail dans VS - mais vous pouvez le démarrer comme ça en appelant une commande d'automatisation VS2019 à partir de la "Fenêtre de commande" vous pouvez accéder avec Afficher | Autres fenêtres | Fenêtre de commande ou Ctrl-Alt-A.

Une fois que j'ai tapé ceci une fois dans la fenêtre de commande, je peux démarrer la prochaine session de débogage en appuyant simplement sur la flèche vers le haut pour obtenir la commande de l'historique et en appuyant sur Entrée. Encore une fois, pas parfait, mais un début.

DebugAdapterHost.Launch /LaunchJson:C:\temp\remotewebapp\.vs\launch.json  

Voici une capture d'écran de moi en train de déboguer une application .NET Core exécutée sous Linux sous WSL à partir de Windows Visual Studio 2019.

Merci à Andy Sterland de m'avoir aidé à le faire fonctionner.

Donc, c'est possible, mais ce n'est pas automatique. Cette configuration et cette préparation devraient-elles être automatiques ? Le développement dans WSL à partir de Visual Studio (et non de Code) est-il quelque chose que vous voulez ? Il existe un excellent support pour le développement Docker dans un conteneur, y compris le débogage interactif déjà, alors où voyez-vous cela s'intégrer... le cas échéant ? Est-ce que cela ajoute quelque chose ou est-ce plus pratique ? Souhaitez-vous un débogage "F5" pour les applications WSL dans VS comme vous le pouvez dans VS Code ?

Parrain : Vous aimez C# ? Nous aussi ! C'est pourquoi nous avons développé un IDE .NET rapide, intelligent et multiplateforme qui vous donne encore plus de puissance de codage. Analyse de code intelligente, complétion de code enrichie, recherche et navigation instantanées, débogueur avancé... Avec JetBrains Rider, tout ce dont vous avez besoin est à portée de main. Codez C# à la vitesse de la pensée sur Linux, Mac ou Windows. Essayez JetBrains Rider dès aujourd'hui !


Linux
  1. Comment effectuer un bureau à distance de Windows vers un bureau Linux à l'aide de XRDP

  2. Visual Basic .Net sous Linux

  3. Visual Basic est-il pris en charge par .NET Core sous Linux ?

  4. Comment compiler du code Windows Visual C++ sous Linux

  5. Copier le fichier de Linux vers le partage Windows avec C # (noyau .NET)

Utilisation de Tailscale sur Windows pour réseauter plus facilement avec WSL2 et Visual Studio Code

Classic Path.DirectorySeparatorChar gotchas lors du passage de .NET Core sous Windows à Linux

Prise en charge officielle du débogage à distance d'une application .NET Core Linux dans WSL2 à partir de Visual Studio sous Windows

Déplacement d'un ASP.NET Core d'Azure App Service sur Windows vers Linux en testant d'abord dans WSL et Docker

Écriture et débogage d'applications Linux C++ à partir de Visual Studio à l'aide du sous-système Windows pour Linux

Comment compiler l'application .NET Core pour Linux sur une machine Windows