질문)
WSL에서 c# 프로젝트 생성및 코드실행

답변)
>WSL에서 [sudo apt install -y dotnet-sdk-8.0] 설치 모습


WSL(예: Ubuntu) 환경에서 dotnet 명령어가 없어서 콘솔 앱을 만들 수 없다는 메시지입니다. 해결을 위해서는 WSL 내에 .NET SDK를 설치해야 합니다.

✅ 해결 방법: WSL에 .NET 8 SDK 설치하기

아래는 Ubuntu WSL 환경에서 .NET 8 SDK를 설치하는 절차입니다.


🔧 1. Microsoft 패키지 저장소 등록

wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

⚠️ 위의 명령어는 Ubuntu 22.04 기준입니다. lsb_release -a 명령어로 Ubuntu 버전을 먼저 확인해보세요.


🔧 2. 필수 패키지 업데이트 및 설치

sudo apt update
sudo apt install -y dotnet-sdk-8.0

🔍 3. 설치 확인

 
dotnet --version

결과:

8.0.xxx

이제 dotnet new console -o RECV 명령이 정상 동작할 것입니다.


⛔️ 참고: apt install dotnet-host-8.0 만 설치하면 안 되는 이유

  • dotnet-host는 실행을 위한 런타임만 설치하고, dotnet new, dotnet build 등 개발 명령은 사용할 수 없습니다.
  • dotnet-sdk-8.0 패키지를 설치해야 SDK 전체 기능을 쓸 수 있습니다.

🔄 WSL에서 자주 쓰는 .NET 명령

dotnet new console -o MyApp   # 새 콘솔 프로젝트 생성
cd MyApp
dotnet run                    # 실행
dotnet build                  # 빌드


프로젝트 코드 실행예제)
1. TCP/IP 수신프로그램 프로젝트 생성

root@DESKTOP-QNNUCER:/mnt/c/Users/B210145_BK/ubuntu/distributed# dotnet new console -o RECV

Welcome to .NET 8.0!
---------------------
SDK Version: 8.0.412

Telemetry
---------
The .NET tools collect usage data in order to help us improve your experience. It is collected by Microsoft and shared with the community. You can opt-out of telemetry by setting the DOTNET_CLI_TELEMETRY_OPTOUT environment variable to '1' or 'true' using your favorite shell.

Read more about .NET CLI Tools telemetry: https://aka.ms/dotnet-cli-telemetry

----------------
Installed an ASP.NET Core HTTPS development certificate.
To trust the certificate, view the instructions: https://aka.ms/dotnet-https-linux

----------------
Write your first app: https://aka.ms/dotnet-hello-world
Find out what's new: https://aka.ms/dotnet-whats-new
Explore documentation: https://aka.ms/dotnet-docs
Report issues and find source on GitHub: https://github.com/dotnet/core
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli
--------------------------------------------------------------------------------------
The template "Console App" was created successfully.

Processing post-creation actions...
Restoring /mnt/c/Users/B210145_BK/ubuntu/distributed/RECV/RECV.csproj:
  Determining projects to restore...
  Restored /mnt/c/Users/B210145_BK/ubuntu/distributed/RECV/RECV.csproj (in 120 ms).
Restore succeeded.


root@DESKTOP-QNNUCER:/mnt/c/Users/B210145_BK/ubuntu/distributed#

2. TCP/IP 송신프로그램 프로젝트 생성

root@DESKTOP-QNNUCER:/mnt/c/Users/B210145_BK/ubuntu/distributed# dotnet new console -o SEND
The template "Console App" was created successfully.

Processing post-creation actions...
Restoring /mnt/c/Users/B210145_BK/ubuntu/distributed/SEND/SEND.csproj:
  Determining projects to restore...
  Restored /mnt/c/Users/B210145_BK/ubuntu/distributed/SEND/SEND.csproj (in 117 ms).
Restore succeeded.


root@DESKTOP-QNNUCER:/mnt/c/Users/B210145_BK/ubuntu/distributed/SEND# ls -lrt
total 0
-rwxrwxrwx 1 root root 252 Jul 18 11:10 SEND.csproj
-rwxrwxrwx 1 root root 105 Jul 18 11:10 Program.cs
drwxrwxrwx 1 root root 512 Jul 18 11:10 obj
root@DESKTOP-QNNUCER:/mnt/c/Users/B210145_BK/ubuntu/distributed/SEND#
WSL>RECV(수신)
WSL>SEND(송신)


결론)
Windows에서의 결과와 똑같은 결과를 나타냄을 알수 있다.

질문)
windows 에 wsl 설정을 하고, wsl 에서 dotnet new console -o NMM 프로젝트를 생성하면, 리눅스 os에서 실행되는것과 같은 실행결과를 얻을수 있나요?

답변)

Windows에서 WSL(Windows Subsystem for Linux) 을 설정한 후, 그 안에서 dotnet new console -o NMM 명령으로 콘솔 프로젝트를 생성하면, 리눅스 환경에서 실행되는 것과 거의 동일한 실행 결과를 얻을 수 있습니다.

하지만 정확히 어떤 점에서 "같은 실행 결과"를 기대하시는지에 따라 조금씩 차이가 있을 수 있습니다. 주요 포인트들을 정리해 드리면 다음과 같습니다:


✅ WSL에서 .NET Console 앱 실행 시 리눅스와 동일한 점

  1. OS 환경:
    • WSL은 리눅스 커널을 직접 사용하는 리눅스 환경입니다 (예: Ubuntu, Debian 등).
    • 따라서 System.Environment.OSVersion, System.Runtime.InteropServices.RuntimeInformation.OSDescription 등의 출력은 리눅스로 인식됩니다.
  2. 파일 경로:
    • /home/username/... 형태의 리눅스 경로를 사용합니다.
    • 대소문자 구분 있음.
  3. 기본 .NET 동작:
    • dotnet run을 실행하면 리눅스용 .NET 런타임으로 실행됩니다.
    • 파일 입출력, 콘솔 출력, 스레딩 등 대부분의 기능은 리눅스와 동일하게 동작합니다.

⚠️ 차이점이 있을 수 있는 부분

항목WSL vs 순수 리눅스의 차이점
파일 시스템 성능 WSL2에서는 /mnt/c/... 등 Windows 드라이브 접근 시 성능 저하 발생 가능
네트워크 관련 WSL에서 네트워크 인터페이스 이름, 로컬 주소가 다를 수 있음 (ex: eth0 대신 eth1 등)
GUI 관련 WSL에서 Console.ReadKey() 등의 GUI 의존 코드가 일부 다르게 작동할 수 있음 (WSLg, X Server 설정 여부에 따라)
시스템 API 접근 일부 저수준 Linux native API는 WSL에서 제한됨 (예: 특정 ioctl 호출 등)
시스템 시간 WSL은 Windows와 시간을 공유하지만, locale 또는 timezone 차이로 약간 다르게 보일 수 있음
 

🔍 예시 코드로 확인

using System;
using System.Runtime.InteropServices;

class Program
{
    static void Main()
    {
        Console.WriteLine($"OS: {RuntimeInformation.OSDescription}");
        Console.WriteLine($"Arch: {RuntimeInformation.OSArchitecture}");
        Console.WriteLine($"Framework: {RuntimeInformation.FrameworkDescription}");
    }
}

실행 결과 (WSL 예: Ubuntu)

OS: Linux 5.15.90.1-microsoft-standard-WSL2
Arch: X64
Framework: .NET 8.0.0

순수 Ubuntu에서 실행해도 거의 동일한 출력:

OS: Linux 5.15.0-89-generic
Arch: X64
Framework: .NET 8.0.0

결론

WSL에서 생성한 .NET 콘솔 프로젝트는 리눅스에서 실행한 것과 거의 동일한 결과를 제공합니다.
운영체제 감지, 파일 시스템, 표준 입출력 등 대부분의 상황에서 차이가 없습니다.
다만 WSL2의 특성과 Windows와의 연동 환경 때문에 성능이나 경계 케이스에서는 약간의 차이가 있을 수 있습니다.

윈도우 10을 설치한 후에 윈도우 11로 자동 업그레이드되지 않도록 설정하려면 다음 단계를 따르세요:


1. 윈도우 업데이트 일시 중지

윈도우 업데이트를 일시 중지하면, 일정 기간 동안 자동 업그레이드가 진행되지 않습니다.

  • 방법:
    1. 설정 > 업데이트 및 보안 > Windows 업데이트로 이동.
    2. "업데이트 일시 중지" 옵션을 클릭하고 최대 35일까지 중지.

2. 업그레이드 차단을 위한 레지스트리 수정

윈도우 11로의 업그레이드를 영구적으로 차단하려면 레지스트리를 수정해야 합니다. 주의: 레지스트리를 잘못 수정하면 시스템에 문제가 생길 수 있으니 주의하세요.

  • 방법:
    1. Win + R 키를 눌러 regedit 입력 후 실행.
    2. 다음 경로로 이동:
      복사편집
      HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate
    3. 오른쪽 빈 공간에서 마우스 오른쪽 버튼 클릭 > 새로 만들기 > DWORD (32비트) 값 선택.
    4. 새 값을 TargetReleaseVersion으로 이름 지정.
    5. 더블 클릭하고 값 데이터를 1로 설정.
    6. 같은 경로에서 또 다른 키를 생성:
      • 이름: TargetReleaseVersionInfo
      • 값 데이터: 21H2 (윈도우 10의 마지막 안정 버전)

3. 그룹 정책 설정 (Pro/Enterprise 에디션 전용)

윈도우 10 Pro 이상 사용자라면 그룹 정책 편집기를 사용하여 업그레이드를 차단할 수 있습니다.

  • 방법:
    1. Win + R 키를 누르고 gpedit.msc 입력 후 실행.
    2. 다음 경로로 이동:
      rust
      복사편집
      컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows 업데이트 > Windows 업데이트 for Business
    3. 대상 기능 업데이트 버전 설정 더블 클릭.
    4. "사용"을 선택한 후, 버전을 21H2로 입력.
    5. 적용 후 확인.

4. 업데이트 도우미 비활성화

마이크로소프트의 "Windows 11 설치 도우미"가 설치되어 있다면 이를 제거하세요.

  • 방법:
    1. 제어판 > 프로그램 및 기능으로 이동.
    2. 설치된 목록에서 "Windows 11 설치 도우미"를 찾아 제거.

5. 타사 도구 사용

Shutup10++ 같은 타사 소프트웨어를 사용하면, 윈도우 업데이트 및 특정 기능 업그레이드를 간단히 차단할 수 있습니다.

  • 공식 사이트에서 다운로드하여 "윈도우 11 업그레이드 차단" 옵션을 활성화하세요.

Windows 작업 관리자에서 CPU와 GPU 부분이 나뉘어져 있는 이유는 이 두 장치가 서로 다른 역할을 수행하기 때문입니다. CPU와 GPU는 각각 컴퓨터의 계산 작업을 처리하지만, 구조와 용도가 다르기 때문에 별도로 관리하고 모니터링할 필요가 있습니다.

1. CPU와 GPU의 역할 차이

  • CPU (Central Processing Unit): 컴퓨터의 중앙 처리 장치로, 일반적으로 직렬 처리에 적합합니다. 운영 체제, 애플리케이션 실행, 논리적 연산, 입출력(I/O) 처리 등 다양한 작업을 수행합니다. 보통 4~16개의 코어를 가지고 있으며, 다양한 작업을 수행하도록 최적화되어 있습니다.
  • GPU (Graphics Processing Unit): 그래픽 카드의 주요 부품으로, 다수의 코어를 가지고 병렬 작업에 최적화되어 있습니다. 이미지 렌더링, 영상 처리, 게임 그래픽 등과 같은 대규모 데이터를 동시에 처리하는 데 유리하며, 최근에는 인공지능(AI) 및 머신러닝 작업에도 많이 활용됩니다.

2. 자원 사용 모니터링의 필요성

  • CPU와 GPU는 각기 다른 작업을 수행하면서 시스템 자원을 소비하므로, 사용자가 두 장치의 상태를 개별적으로 모니터링할 수 있도록 작업 관리자가 나누어 보여줍니다.
  • CPU 부분에서는 시스템 전반에서 발생하는 프로세스, 스레드, 메모리 사용량을 주로 확인할 수 있고, GPU 부분에서는 그래픽 렌더링이나 GPU 가속이 필요한 작업에 사용된 자원을 모니터링할 수 있습니다.

3. 성능 최적화와 문제 해결에 도움

  • CPU와 GPU 자원을 분리하여 표시하면 사용자가 각 장치의 자원 사용량을 독립적으로 모니터링할 수 있어, 어떤 장치가 과부하 상태인지, 특정 프로그램이 CPU나 GPU 자원을 과도하게 사용하고 있는지 쉽게 확인할 수 있습니다.
  • 예를 들어, 게임을 실행할 때 GPU 사용량이 높아지고 CPU 사용량은 상대적으로 낮다면, 게임의 그래픽 처리에 GPU가 적절히 활용되고 있음을 알 수 있습니다. 반대로 CPU 사용량이 과도하게 높다면, 프로그램 최적화 문제를 의심할 수 있습니다.

이처럼, CPU와 GPU 부분을 분리해 보여주는 작업 관리자는 시스템 성능 모니터링과 문제 해결에 있어 사용자에게 중요한 정보를 제공합니다.

1. GPU 드라이버가 설치되지 않음 또는 오래된 경우
  • 문제: GPU가 제대로 인식되지 않으면 작업 관리자가 해당 정보를 표시할 수 없습니다.
  • 해결 방법: GPU 제조사(NVIDIA, AMD, Intel 등)의 최신 드라이버를 설치하거나 업데이트합니다. Windows 업데이트에서도 기본적인 GPU 드라이버가 제공될 수 있으므로 확인해 보세요.

2. 작업 관리자 업데이트 미지원 (Windows 버전 문제)

  • 문제: Windows 10 버전 1709(2017년 출시) 이전 버전에서는 GPU 사용량을 작업 관리자에서 표시하지 않습니다.
  • 해결 방법: Windows 버전을 최신 상태로 업데이트하세요. 현재 지원되는 Windows 10 또는 Windows 11을 사용 중인지 확인해 보세요.

3. 내장 그래픽만 활성화된 경우 (외장 GPU 비활성화)

  • 문제: 데스크탑이나 랩톱에서 외장 GPU가 비활성화되면 GPU 정보가 작업 관리자에 나타나지 않을 수 있습니다.
  • 해결 방법: BIOS 설정에서 외장 GPU가 활성화되어 있는지 확인하거나, 장치 관리자를 열어 GPU가 비활성화되었는지 확인한 후, 필요한 경우 활성화합니다.

4. 장치 관리자에서 GPU 인식 문제

  • 문제: 장치 관리자에 GPU가 나타나지 않으면, 작업 관리자에서도 GPU 정보가 표시되지 않습니다.
  • 해결 방법: Windows 장치 관리자(Device Manager)를 열고 "디스플레이 어댑터" 항목에서 GPU가 제대로 인식되고 있는지 확인합니다. 표시되지 않거나 오류가 있는 경우, 드라이버 재설치 또는 하드웨어 점검이 필요할 수 있습니다.

5. 원격 데스크톱 사용 시 제한

  • 문제: 원격 데스크톱 연결을 통해 컴퓨터에 접속할 경우, GPU 정보가 작업 관리자에 표시되지 않을 수 있습니다. 이는 원격 세션에서 GPU 사용량을 표시하는 것이 제한되기 때문입니다.
  • 해결 방법: GPU 사용량을 확인하려면 물리적으로 컴퓨터에 직접 접속하거나, GPU 모니터링 프로그램(예: GPU-Z)을 사용해 보세요.

6. Windows 작업 관리자 문제

  • 문제: Windows의 작업 관리자에 일시적인 버그가 발생했을 수 있습니다.
  • 해결 방법: 작업 관리자를 재시작하거나, 컴퓨터를 재부팅하여 문제를 해결할 수 있는지 확인해보세요.

이 외에도 GPU 사용량을 확인할 수 있는 프로그램(예: GPU-Z, MSI Afterburner, HWMonitor)을 활용하면 GPU가 제대로 작동하는지 확인할 수 있습니다.

+ Recent posts