다음을 통해 공유


Visual Studio를 사용하여 WSL에서 .NET 앱 디버그

WSL(Linux용 Windows 하위 시스템)을 사용하여 Visual Studio를 종료하지 않고도 Linux에서 .NET Core 및 .NET 5+ 앱을 쉽게 실행하고 디버그할 수 있습니다. 플랫폼 간 개발자인 경우 이 방법을 더 많은 대상 환경을 테스트하는 간단한 방법으로 사용할 수 있습니다.

Linux를 대상으로 하는 Windows .NET 사용자의 경우 WSL은 프로덕션 리얼리즘과 생산성 사이에 적합한 위치에 있습니다. Visual Studio에서는 원격 디버거사용하거나 Container Tools사용하는 컨테이너를 사용하여 원격 Linux 환경에서 이미 디버그할 수 있습니다. 프로덕션 리얼리즘이 주요 관심사인 경우 이러한 옵션 중 하나를 사용해야 합니다. 쉽고 빠른 내부 루프가 더 중요한 경우 WSL은 훌륭한 옵션입니다.

하나의 방법만 선택할 필요는 없습니다. 동일한 프로젝트에서 Docker 및 WSL에 대한 시작 프로필을 만들고 특정 실행에 적합한 항목을 선택할 수 있습니다. 앱이 배포된 후 문제가 발생하면 언제든지 원격 디버거를 사용하여 연결할 수 있습니다. WSL에서 실행되는 Linux Docker 컨테이너를 디버그하려면 Docker 컨테이너에서 실행 중인 프로세스에 연결하는 방법을 보려면 을 참조하세요.

메모

Visual Studio 2019 버전 16.11 미리 보기 3부터 WSL 2 디버그 대상의 이름이 WSL로 바뀌었습니다.

필수 구성 요소

  • WSL 선택적 구성 요소를 사용하여 .NET 디버깅을 사용하는 Visual Studio 2019 v16.9 미리 보기 1 이상 버전

    WSL 구성 요소를 확인하려면 도구>도구 및 기능 가져오기선택합니다. Visual Studio 설치 관리자에서 개별 구성 요소 탭을 선택하고 WSL 검색어로 입력하여 구성 요소가 설치되어 있는지 확인합니다.

    Visual Studio의 일부 버전에서는 선택적 구성 요소가 기본적으로 일부 .NET 워크로드에 포함됩니다.

  • WSL설치합니다.

  • 원하는 배포 설치합니다.

WSL로 디버깅 시작

  1. 필요한 구성 요소를 설치한 후 Visual Studio에서 ASP.NET Core 웹앱 또는 .NET Core 콘솔 앱을 엽니다. WSL이라는 새 시작 프로필이 표시됩니다.

    시작 프로필 목록

  2. 이 프로필을 선택하여 launchSettings.json에 추가하세요.

    파일의 일부 주요 특성은 다음 예제에 나와 있습니다.

    메모

    Visual Studio 2022 미리 보기 3부터 시작 프로필의 명령 이름이 WSL2에서 WSL로 변경되었습니다.

    "WSL": {
        "commandName": "WSL",
        "launchBrowser": true,
        "launchUrl": "https://localhost:5001",
        "environmentVariables": {
            "ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000",
            "ASPNETCORE_ENVIRONMENT": "Development"
        },
        "distributionName": ""
    }
    
    "WSL": {
        "commandName": "WSL2",
        "launchBrowser": true,
        "launchUrl": "https://localhost:5001",
        "environmentVariables": {
            "ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000",
            "ASPNETCORE_ENVIRONMENT": "Development"
        },
        "distributionName": ""
    }
    

    새 프로필을 선택하면 확장에서 WSL 배포가 .NET 앱을 실행하도록 구성되어 있는지 확인하고 누락된 종속성을 설치하는 데 도움이 됩니다. 이러한 종속성을 설치하면 WSL에서 디버그할 준비가 된 것입니다.

  3. 정상적으로 디버깅을 시작하면 앱이 기본 WSL 배포판에서 실행됩니다.

    Linux에서 실행 중인지 확인하는 쉬운 방법은 Environment.OSVersion값을 확인하는 것입니다.

메모

Ubuntu 및 Debian만 테스트되었으며 지원됩니다. 다른 배포판도 .NET에서 사용할 수 있지만, .NET 런타임 과 Curl 을 수동으로 설치할 필요가 있습니다.

특정 배포 선택

기본적으로 WSL 2 시작 프로필은 wsl.exe설정된 기본 배포를 사용합니다. 시작 프로필이 해당 기본값에 관계없이 특정 배포를 대상으로 지정하도록 하려면 시작 프로필을 수정할 수 있습니다. 예를 들어 웹앱을 디버깅하고 Ubuntu 20.04에서 테스트하려는 경우 시작 프로필은 다음과 같습니다.

"WSL": {
    "commandName": "WSL",
    "launchBrowser": true,
    "launchUrl": "https://localhost:5001",
    "environmentVariables": {
        "ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000",
        "ASPNETCORE_ENVIRONMENT": "Development"
    },
    "distributionName": "Ubuntu-20.04"
}
"WSL": {
    "commandName": "WSL2",
    "launchBrowser": true,
    "launchUrl": "https://localhost:5001",
    "environmentVariables": {
        "ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000",
        "ASPNETCORE_ENVIRONMENT": "Development"
    },
    "distributionName": "Ubuntu-20.04"
}

여러 배포를 대상으로 하다

한 단계 더 나아가, 여러 배포에서 실행해야 하는 애플리케이션을 작업 중이고 각 배포를 빠르게 테스트하려는 경우 여러 시작 프로필을 사용할 수 있습니다. 예를 들어 Debian, Ubuntu 18.04 및 Ubuntu 20.04에서 콘솔 앱을 테스트해야 하는 경우 다음 시작 프로필을 사용할 수 있습니다.

"WSL : Debian": {
    "commandName": "WSL",
    "distributionName": "Debian"
},
"WSL : Ubuntu 18.04": {
    "commandName": "WSL",
    "distributionName": "Ubuntu-18.04"
},
"WSL : Ubuntu 20.04": {
    "commandName": "WSL",
    "distributionName": "Ubuntu-20.04"
}
"WSL : Debian": {
    "commandName": "WSL2",
    "distributionName": "Debian"
},
"WSL : Ubuntu 18.04": {
    "commandName": "WSL2",
    "distributionName": "Ubuntu-18.04"
},
"WSL : Ubuntu 20.04": {
    "commandName": "WSL2",
    "distributionName": "Ubuntu-20.04"
}

이러한 시작 프로필을 사용하면 Visual Studio의 편안함을 벗어나지 않고도 대상 배포 간에 쉽게 전환할 수 있습니다.

시작 프로필 목록

실행 중인 WSL 프로세스에 연결

F5를 사용하여 앱 시작에서 디버깅하는 것 외에도 프로세스에 연결 기능을 사용하여 실행 중인 WSL 프로세스에 연결하여 디버그할 수 있습니다.

  1. 앱이 실행 중일 때, 디버그>Attach to Process 프로세스를 선택합니다.

  2. 연결 유형경우 WSL(Linux용 Windows 하위 시스템) 선택한 다음 연결 대상대한 Linux 배포를 선택합니다.

  3. 선택 후연결합니다.

    프로세스에 연결하는 대화 상자에서 WSL 프로세스의 스크린샷

    프로세스 연결 대화 상자에서의 WSL 프로세스 스크린샷

시작 프로필의 WSL 설정

다음 표에서는 시작 프로필에서 지원되는 설정을 보여줍니다.

이름 기본값 목적 토큰을 지원합니까?
실행 파일 경로 dotnet 실행할 실행 파일
commandLineArgs WSL 환경에 매핑된 MSBuild 속성 TargetPath의 값입니다. executablePath에 전달된 명령줄 인수
작업 디렉터리 콘솔 앱의 경우: {OutDir}
웹앱: {ProjectDir}
디버깅을 시작할 작업 디렉터리
환경 변수 디버그된 프로세스에 대해 설정할 환경 변수의 키 값 쌍입니다.
setupScriptPath 디버깅하기 전에 실행할 스크립트입니다. ~/.bash_profile 같은 스크립트를 실행하는 데 유용합니다.
배포명 사용할 WSL 배포의 이름입니다. 아니요
브라우저실행 거짓 브라우저를 시작할지 여부 아니요
launchUrl launchBrowser가 true인 경우 시작할 URL 아니요

지원되는 토큰:

{ProjectDir} - 프로젝트 디렉터리의 경로

{OutDir} - MSBuild 속성 OutDir

메모

모든 경로는 Windows가 아닌 WSL용입니다.

명령줄 인수 전달

commandLineArgs 설정을 사용하여 시작 프로필에서 WSL에 명령줄 인수를 전달합니다.

다음 예제에서는 ConsoleApp이라는 DLL 프로젝트에 두 개의 인수를 전달합니다.

"WSL": {
  "commandName": "WSL",
  "commandLineArgs": "\"{OutDir}/ConsoleApp.dll\" arg1 arg2"
}