저도공부를하긴한답니다?

gitea actions 에서 Docker 기반 .NET 빌드가 가능하다고 적혀있잖아. 그러면 MSBuild와 .NET SDK 와는 무엇이 다른거야?

쟉트 2025. 3. 10. 11:26
728x90

Gitea Actions에서 Docker 기반 .NET 빌드가 가능하다고 했을 때, 여기서 사용하는 .NET SDK, MSBuild 등의 개념이 헷갈릴 수 있어.
그래서 MSBuild와 .NET SDK가 무엇이 다르고, 언제 어떤 것을 써야 하는지 설명해줄게.


📌 MSBuild vs .NET SDK 차이점

개념 설명 용도
MSBuild (Microsoft Build Engine) .NET 및 C# 프로젝트의 빌드 시스템, 프로젝트(.csproj)를 기반으로 코드 컴파일, 패키징, 배포를 수행 Visual Studio 빌드, 프로젝트 빌드 자동화
.NET SDK .NET 개발을 위한 도구 모음, MSBuild 포함 (.NET CLI 제공) dotnet build, dotnet publish, dotnet run 명령어 사용 가능
Docker 기반 .NET 빌드 컨테이너에서 실행되는 .NET SDK를 이용한 빌드 환경 CI/CD에서 독립적인 빌드 환경을 만들 때 사용

🔹 MSBuild란?

MSBuild (Microsoft Build Engine).NET 프로젝트를 빌드하는 엔진이야.
즉, .csproj 파일을 읽고, 코드 컴파일 → DLL 생성 → 패키징 → 배포 등의 작업을 수행해.

✅ MSBuild 실행 예시

MSBuild MyProject.csproj /p:Configuration=Release

Visual Studio와 연동되어 있으며, 프로젝트 파일(.csproj)을 기반으로 작동
.sln 파일을 빌드할 수도 있음
✔ CI/CD에서 많이 사용되지만, .NET SDK 없이 단독으로 실행하면 일부 기능이 제한될 수 있음


🔹 .NET SDK란?

.NET SDKMSBuild를 포함한 .NET 개발 및 실행 도구 모음이야.
즉, MSBuild도 .NET SDK 안에 포함되어 있기 때문에 .NET SDK가 설치되어 있으면 MSBuild를 따로 설치할 필요가 없어!

✅ .NET SDK 실행 예시

dotnet build
dotnet publish -c Release -o ./publish

.NET SDKMSBuild를 포함하고 있으며, CLI 기반으로 실행 가능
dotnet build, dotnet publish, dotnet run 등 다양한 명령어 제공
✔ CI/CD에서 자주 사용되며, Docker 환경에서도 기본적으로 사용됨


🔹 Docker 기반 .NET 빌드는 어떻게 다를까?

Docker에서 .NET 빌드를 수행할 때는 컨테이너 내부에 .NET SDK를 설치하고, dotnet build 명령어를 실행하는 방식이야.
이 방식은 CI/CD에서 독립적인 빌드 환경을 보장하기 때문에 Gitea Actions에서도 많이 사용돼.

✅ Docker 기반 .NET 빌드 예시 (Dockerfile)

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app

# 프로젝트 파일 복사 및 복원
COPY *.csproj .
RUN dotnet restore

# 애플리케이션 빌드
COPY . .
RUN dotnet build -c Release --no-restore
RUN dotnet publish -c Release -o /publish

mcr.microsoft.com/dotnet/sdk:8.0 → 최신 .NET SDK 이미지를 사용
dotnet build, dotnet publish 명령어로 .NET 프로젝트를 빌드
MSBuild는 내부적으로 자동 사용됨 (dotnet build 실행 시 MSBuild 호출됨)


🔹 언제 MSBuild를 사용하고, 언제 .NET SDK를 사용할까?

상황 MSBuild .NET SDK
Visual Studio에서 빌드 ✅ 사용 ✅ 사용 가능
명령어 기반 빌드 ✅ 사용 가능 (MSBuild.exe) ✅ 사용 (dotnet build)
Docker 컨테이너에서 빌드 ❌ 지원되지 않음 ✅ 사용 가능
CI/CD에서 자동화 빌드 ✅ 사용 가능 ✅ 사용 가능

📌 결론

  1. MSBuild.NET 프로젝트를 빌드하는 엔진

    • .csproj 파일을 읽어 컴파일, 패키징, 배포를 수행
    • Visual Studio, Jenkins, CI/CD에서 사용 가능
    • 하지만 Docker 환경에서는 사용하기 어려움
  2. .NET SDKMSBuild를 포함한 .NET 개발 도구 모음

    • dotnet build, dotnet publish 등의 명령어 제공
    • Docker 기반 CI/CD 환경에서 기본적으로 사용됨
    • Gitea Actions, GitHub Actions, Jenkins 등에서 가장 많이 사용됨
  3. Docker 기반 .NET 빌드는 .NET SDK를 사용

    • MSBuild 단독 사용 불가 → 대신 dotnet build 사용
    • CI/CD 환경에서 독립적인 빌드 환경 제공

📌 결론적으로, Gitea Actions에서 Docker 기반 .NET 빌드를 수행할 때는
MSBuild 대신 .NET SDK를 사용해야 한다.
.NET SDK를 포함한 Docker 컨테이너(mcr.microsoft.com/dotnet/sdk:8.0)를 사용하면 빌드 가능!