GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Remotedebuggen einer .NET Core-Linux-App in WSL2 von Visual Studio unter Windows

Mit Visual Studio Code und WSL (Windows Subsystem for Linux) können Sie sich in einer echten Linux-Umgebung befinden und „code“ ausführen. von der Linux-Eingabeaufforderung und Visual Studio Code wird in Windows gestartet und effektiv in zwei Hälften geteilt. Ein VSCode-Server wird unter Linux ausgeführt und verwaltet die Sprachdienste, den Debugger usw., während Windows Ihre VS Code-Instanz ausführt. Sie können VS Code auch verwenden, um auf Remote-Computern über SSH zu entwickeln, und es funktioniert hervorragend. Tatsächlich gibt es hier eine ganze Reihe von Remote-Tutorials zum Ausprobieren.

VS Code ist ein großartiger Code-Editor, aber keine vollständige IDE (Integrated Development Environment), daher gibt es für mich immer noch viele Gründe, Visual Studio unter Windows (oder Mac) zu verwenden und zu genießen.

Ich wollte sehen, ob es möglich ist, „Remote“-Debugging mit WSL und Visual Studio (nicht Code) durchzuführen, und wenn ja, ist es etwas, woran SIE interessiert sind, lieber Leser.

  • Zunächst habe ich WSL (insbesondere WSL2) auf meinem Windows 10-Computer. Sie können WSL1 heute unter Windows über „Windows-Features“ erhalten, indem Sie es einfach hinzufügen. Sie können WSL2 heute im „Slow Ring“ von Windows Insiders herunterladen.
  • Dann habe ich das neue Windows Terminal. Nicht erforderlich, aber es ist großartig, wenn Sie die Befehlszeile mögen.
  • Ich habe die Visual Studio 2019-Community

Ich verwende auch .NET Core mit C# für meine bevorzugte Plattform und Sprache. Ich habe von https://dot.net/ in Ubuntu 18.04 unter Windows installiert. Ich habe eine Web-App (dotnet new razor ), das jetzt großartig unter Linux läuft.

An der WSL-Eingabeaufforderung im Terminal kann ich „explorer.exe“ ausführen. und Windows Explorer wird unter dem Pfad \\wsl$\Ubuntu-18.04\home\scott\remotewebapp gestartet, aber VS hat derzeit einige Probleme beim Öffnen von Projekten über diese Netzwerkgrenze hinweg. Ich lege meine Sachen stattdessen unter c:\temp\remotewebapp ab und greife unter Linux als /mnt/c/temp/remotewebapp.

darauf zu

In einer perfekten Welt – dies ist zukünftige Spekulation/Brainstorming, würde Visual Studio erkennen, wenn Sie ein Projekt aus einem Linux-Pfad öffnen und „das Richtige tun“ (tm).

Ich muss zuerst sicherstellen, dass VSDbg in WSL/Linux installiert ist. Das geschieht automatisch mit VS Code, aber ich mache es manuell in einer Zeile wie dieser:

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

Wir benötigen eine launch.json-Datei mit genügend Informationen, um das Projekt zu starten, es mit dem Debugger anzuhängen und zu bemerken, wann die Dinge begonnen haben. VS Code macht das für Sie. In einer theoretischen Zukunft würde Visual Studio auch den Kontext erkennen und diese Datei für Sie generieren. Hier ist meins, ich habe es in .vs/launch.json im Projektordner abgelegt.

VS erstellt auch eine launch.json, aber Sie müssen die beiden wichtigsten Teile hinzufügen, den $adapter- und den $adapterArgs-Teil, wie ich es hier habe.

{
// 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 }
}
]
}

Diese launch.json-Dateien werden von VS und VS Code und anderen Dingen verwendet und geben dem System und dem Debugger genug, um weiterzumachen. Mir ist keine Möglichkeit bekannt, diesen nächsten Schritt zu automatisieren und an eine Schaltfläche wie „Start Debugging“ anzuhängen – das wäre neue Arbeit in VS – aber Sie können es so starten, indem Sie einen VS2019-Automatisierungsbefehl aus dem „Befehlsfenster“ aufrufen. Sie können mit Ansicht | darauf zugreifen Andere Fenster | Befehlsfenster oder Strg-Alt-A.

Nachdem ich dies einmal in das Befehlsfenster eingegeben habe, kann ich die nächste Debug-Sitzung starten, indem ich einfach den Aufwärtspfeil drücke, um den Befehl aus dem Verlauf zu erhalten, und die Eingabetaste drücke. Wieder nicht perfekt, aber ein Anfang.

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

Hier ist ein Screenshot von mir beim Debuggen einer .NET Core-App, die unter Linux unter WSL von Windows Visual Studio 2019 ausgeführt wird.

Danke an Andy Sterland, der mir geholfen hat, das zum Laufen zu bringen.

Es ist also möglich, aber es fällt nicht automatisch von einem Baumstamm ab. Soll diese Einrichtung und Vorbereitung automatisch erfolgen? Ist die Entwicklung in WSL aus Visual Studio (nicht Code) etwas, das Sie möchten? Es gibt bereits großartige Unterstützung für die Docker-Entwicklung innerhalb eines Containers, einschließlich interaktivem Debugging. Wo sehen Sie das also, wenn es überhaupt passt? Bringt das etwas oder ist es bequemer? Möchten Sie „F5“-Debugging für WSL-Apps in VS wie in VS Code?

Sponsor: Wie C#? Wir auch! Aus diesem Grund haben wir eine schnelle, intelligente, plattformübergreifende .NET-IDE entwickelt, die Ihnen noch mehr Programmierleistung bietet. Clevere Codeanalyse, umfassende Codevervollständigung, sofortige Suche und Navigation, ein fortschrittlicher Debugger ... Mit JetBrains Rider haben Sie alles, was Sie brauchen, immer zur Hand. Programmieren Sie C# in Gedankengeschwindigkeit unter Linux, Mac oder Windows. Probieren Sie JetBrains Rider noch heute aus!


Linux
  1. Remote-Desktop von Windows auf Linux-Desktop mit XRDP

  2. Zugriff auf ein Remote-Osx-System von Osx, Linux, Windows?

  3. Visual Basic .Net unter Linux

  4. Datei von Linux auf Windows Share mit C# (.NET Core) kopieren

  5. Wie verwende ich rsync vom Windows-PC zum Remote-Linux-Server?

Verwenden von Tailscale unter Windows für eine einfachere Vernetzung mit WSL2 und Visual Studio Code

Klassische Path.DirectorySeparatorChar-Probleme beim Wechsel von .NET Core unter Windows zu Linux

Offizieller Support für das Remotedebuggen einer .NET Core-Linux-App in WSL2 von Visual Studio unter Windows

Verschieben eines ASP.NET Core von Azure App Service unter Windows zu Linux, indem zuerst in WSL und Docker getestet wird

Schreiben und Debuggen von Linux-C++-Anwendungen aus Visual Studio mit dem Windows-Subsystem für Linux

So kompilieren Sie die .NET Core-App für Linux auf einem Windows-Computer