====== .NET Development ======
.NET은 ComfilePi와 같은 Linux 기반 PC에서 전문적인 .NET 런타임 환경을 제공합니다. \\
[[https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor|Blazor and Web Assembly]] 기술을 사용하면 ComfilePi의 최신 웹 브라우저에서 동작하는 GUI 애플리케이션을 개발할 수 있습니다.
Blazor는 클라이언트와 서버를 거의 모두 C#으로 개발할 수 있도록 해줍니다.
[[https://docs.microsoft.com/en-us/dotnet/api/system.device.gpio|System.Devices.Gpio]] 네임스페이스를 통해 ComfilePi에서 필요한 대부분의 IO 제어 기능을 사용할 수 있습니다.
또한 Blazor는 여러 로컬 또는 원격 클라이언트에서 동시에 화면을 확인하고 제어할 수 있는 실시간 웹 애플리케이션 기능을 제공합니다.
아래 영상은 ComfilePi에서 실행되는 프로젝트 예시로, ComfilePi 후면에 장착된
CP-IO22-A4-2 IO 보드를 제어하는 애플리케이션입니다.
이 애플리케이션은 ComfilePi 자체 화면뿐 아니라 개발용 PC나 스마트폰에서도 실시간으로 확인 및 제어가 가능합니다.
{{ :comfilepi:dotnet_development:dotnet_core_blazor.mp4?720x405 }}
ComfilePi에서 실행 중인 .NET 실시간 웹 애플리케이션
위 영상에서 사용된 애플리케이션의 {{ :comfilepi:dotnet_development:comfiletech.comfilepi.io.zip |소스 코드 다운로드}}
자세한 내용은 [[https://learn.microsoft.com/en-us/dotnet/api/?view=iot-dotnet-latest|.NET IoT Libraries API Reference]] 문서를 참고하시기 바랍니다.
===== ComfilePi에 .NET SDK 설치 =====
=== Bookworm ===
== .NET 10 SDK ==
.NET 10부터 Microsoft에서 ARM64 Linux 패키지를 공식 제공하고 있습니다.
Bookworm OS를 사용하는 ComfilePi에서는
[[https://learn.microsoft.com/en-us/dotnet/core/install/linux-debian?tabs=dotnet10#debian-12|Microsoft Debian 12 설치 가이드]]를 따라 설치할 수 있습니다.
==.NET 9 SDK==
.NET 10 이전에는 ARM64 SDK가 공식 제공되지 않았기 때문에
Bookworm OS에서는 자체 제작한 설치 패키지를 제공합니다.
sudo apt update
sudo apt install cpi-dotnet-sdk-9.0
==.NET 8 SDK==
.NET 10 이전에는 ARM64 SDK가 공식 제공되지 않았기 때문에
Bookworm OS에서는 자체 제작한 설치 패키지를 제공합니다.
sudo apt update
sudo apt install cpi-dotnet-sdk-8.0
=== Bullseye ===
2022년 7월 26일 이후 배포된 ComfilePi OS에는 .NET SDK가 기본 포함되어 있습니다.
터미널에서 ''dotnet --version'' 명령으로 확인할 수 있습니다.
더 최신 버전이 필요하면 아래 수동 설치 방법을 사용하십시오.
=== Any OS ===
다음 명령을 사용하면 원하는 버전의 .NET SDK를 수동 설치할 수 있습니다.
DOTNET_VERSION=10.0 # 원하는 버전 선택
wget https://builds.dotnet.microsoft.com/dotnet/scripts/v1/dotnet-install.sh
chmod +x dotnet-install.sh
sudo ./dotnet-install.sh --channel $DOTNET_VERSION --install-dir /opt/Microsoft/dotnet
sudo ln -s /opt/Microsoft/dotnet/dotnet /usr/local/bin/dotnet
# .NET 런타임 경로 설정 파일 생성
sudo mkdir /etc/dotnet
sudo bash -c 'echo /opt/Microsoft/dotnet/ >> /etc/dotnet/install_location'
설치 후 터미널에서 dotnet --version 명령으로 정상 설치 여부를 확인합니다.
=== ARM Linux 가비지 컬렉션 버그 대응 (.NET 8 & 9 전용) ===
**중요** - [[https://github.com/dotnet/runtime/issues/95257|.NET 런타임 버그]]로 인해
메모리가 작은 장치에서는 애플리케이션이 중단될 수 있으므로
가비지 컬렉터 메모리 제한을 설정해야 할 수 있습니다.
파일 ///etc/environment// 에 아래 항목을 추가하십시오.
DOTNET_GCHeapHardLimitPercent=32
설정 후 재부팅하십시오.
자세한 내용은
[[https://learn.microsoft.com/en-us/dotnet/core/runtime-config/garbage-collector#heap-limit-percent|Microsoft 공식 문서]]를 참고하십시오.
===== 개발용 PC에 .NET SDK 설치 =====
개발은 PC에서 진행하는 것이 더 편리합니다.
다음 방법 중 하나를 사용할 수 있습니다.
* [[https://visualstudio.microsoft.com/downloads/|Visual Studio 다운로드]] (2022 이상) 후 .NET 개발 옵션 선택
* [[https://dotnet.microsoft.com/download/dotnet/|.NET SDK 다운로드]] 후 CLI(dotnet 명령) 사용
* [[https://visualstudio.microsoft.com/downloads/|Visual Studio Code 다운로드]] 후 dotnet CLI와 함께 사용
===== .NET 프로젝트 생성 =====
.NET 프로젝트는 ''dotnet'' CLI 또는 Visual Studio 템플릿을 이용해 생성할 수 있습니다.
==== Visual Studio 사용 ====
=== 프로젝트 생성 및 빌드 ===
Visual Studio에서 .NET 서버형 Blazor 애플리케이션을 만들려면
새 프로젝트에서 //Blazor App// 을 선택하십시오.
|{{ :comfilepi:dotnet_development:blazor_app.png?nolink&450| }}|{{ :comfilepi:dotnet_development:blazor_server.png?450| }} |
다른 Visual Studio 프로젝트와 동일하게 빌드하면 됩니다.
==== .NET CLI 사용 ====
=== 프로젝트 생성 및 빌드 ===
영상 예제와 같은 서버형 Blazor 프로젝트 생성:
''dotnet new blazorserver''
프로젝트 폴더에서 빌드:
''dotnet build''
====== .NET 애플리케이션 배포 및 실행 ======
개발 환경에서 ComfilePi로 애플리케이션을 실행하려면 다음 단계를 수행합니다.
- ComfilePi CPU 아키텍처와 OS에 맞게 Publish
- 생성된 파일을 ComfilePi로 전송
- ComfilePi에서 실행
Visual Studio, dotnet CLI, Visual Studio Code를 통해 수행할 수 있습니다.
* [[.:visual_studio:index|Visual Studio 사용 방법]]
참고: [[https://learn.microsoft.com/en-us/dotnet/iot/deployment|ARM 싱글보드 컴퓨터에서 .NET 앱 배포]]
===== 프로젝트 디버깅 =====
Visual Studio에서 ComfilePi로 원격 배포 및 디버깅하려면
[[:comfilepi:dotnet_core_development:remote_debugger:index|Remote .NET Debugger Visual Studio Extension]]을 사용하십시오.
참고: [[https://docs.microsoft.com/en-us/dotnet/iot/debugging|Raspberry Pi에서 .NET 앱 디버깅]]