dotnet build

이 문서의 적용 대상: ✔️ .NET Core 3.1 SDK 이상 버전

이름

dotnet build - 프로젝트 및 모든 종속성을 빌드합니다.

개요

dotnet build [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
    [--artifacts-path <ARTIFACTS_DIR>]
    [-c|--configuration <CONFIGURATION>] [-f|--framework <FRAMEWORK>]
    [--disable-build-servers]
    [--force] [--interactive] [--no-dependencies] [--no-incremental]
    [--no-restore] [--nologo] [--no-self-contained] [--os <OS>]
    [-o|--output <OUTPUT_DIRECTORY>]
    [-p|--property:<PROPERTYNAME>=<VALUE>]
    [-r|--runtime <RUNTIME_IDENTIFIER>]
    [--self-contained [true|false]] [--source <SOURCE>]
    [--tl:[auto|on|off]] [--use-current-runtime, --ucr [true|false]]
    [-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]

dotnet build -h|--help

설명

dotnet build 명령은 이진 파일 집합으로 프로젝트와 해당 종속성을 빌드합니다. 이진 파일에는 확장명이 .dll인 IL(중간 언어) 파일의 프로젝트 코드가 포함됩니다. 프로젝트 형식 및 설정에 따라 다음과 같은 다른 파일이 포함될 수도 있습니다.

  • 프로젝트 형식이 .NET Core 3.0 이상을 대상으로 하는 실행 파일인 경우 애플리케이션을 실행하는 데 사용할 수 있는 실행 파일
  • 확장명이 .pdb인 디버깅에 사용되는 기호 파일
  • 애플리케이션 또는 라이브러리의 종속성을 나열하는 .deps.json 파일
  • 애플리케이션의 공유 런타임 및 해당 버전을 지정하는 .runtimeconfig.json 파일
  • 프로젝트 참조 또는 NuGet 패키지 참조를 통해 프로젝트가 종속된 다른 라이브러리

.NET Core 3.0 이전 버전을 대상으로 하는 실행 가능 프로젝트의 경우 NuGet의 라이브러리 종속성은 일반적으로 출력 폴더에 복사되지 않습니다. 런타임에 NuGet 전역 패키지 폴더에서 확인됩니다. 따라서 dotnet build의 제품을 실행하기 위해 다른 컴퓨터로 전송할 준비가 되지 않았습니다. 배포할 수 있는 애플리케이션 버전을 만들려면 dotnet publish 명령 등을 사용하여 애플리케이션을 게시해야 합니다. 자세한 내용은 .NET 애플리케이션 배포를 참조하세요.

.NET Core 3.0 이상을 대상으로 하는 실행 가능 프로젝트의 경우 라이브러리 종속성이 출력 폴더에 복사됩니다. 따라서 웹 프로젝트 등에 다른 게시 특정 논리가 없는 경우 빌드 출력을 배포할 수 있습니다.

암시적 복원

빌드하려면 애플리케이션의 종속성을 나열하는 project.assets.json 파일이 필요합니다. dotnet restore가 실행되면 파일이 만들어집니다. 자산 파일이 없으면 도구로 참조 어셈블리를 확인할 수 없으므로 오류가 발생합니다.

dotnet new, dotnet build, dotnet run, dotnet test, dotnet publishdotnet pack 등 복원이 필요한 모든 명령에 의해 암시적으로 실행되므로 dotnet restore를 실행할 필요가 없습니다. 암시적 복원을 사용하지 않으려면 --no-restore 옵션을 사용합니다.

dotnet restore 명령은 Azure DevOps Services의 연속 통합 빌드 또는 복원 발생 시점을 명시적으로 제어해야 하는 빌드 시스템과 같이 명시적으로 복원이 가능한 특정 시나리오에서 여전히 유용합니다.

NuGet 피드를 관리하는 방법에 대한 자세한 내용은 dotnet restore 설명서를 참조하세요.

이 명령은 긴 형식(예: --source)으로 전달될 때 dotnet restore 옵션을 지원합니다. -s와 같이 짧은 형식의 옵션은 지원되지 않습니다.

실행 파일 또는 라이브러리 출력

프로젝트가 실행 가능한지 아닌지 여부는 프로젝트 파일의 <OutputType> 속성으로 확인할 수 있습니다. 다음 예제에서는 실행 코드를 생성하는 프로젝트를 보여 줍니다.

<PropertyGroup>
  <OutputType>Exe</OutputType>
</PropertyGroup>

라이브러리를 생성하려면 <OutputType> 속성을 생략하거나 속성 값을 Library로 변경합니다. 라이브러리의 IL DLL은 진입점을 포함하지 않으며 실행할 수 없습니다.

MSBuild

dotnet build는 MSBuild를 사용하여 프로젝트를 빌드하므로 병렬 및 증분 빌드를 모두 지원합니다. 자세한 내용은 증분 빌드를 참조하세요.

해당 옵션 외에도, dotnet build 명령은 속성 설정에 대한 -p 또는 로거를 정의하는 -l처럼 MSBuild 옵션도 수락합니다. 이러한 옵션에 대한 자세한 내용은 MSBuild 명령줄 참조를 확인하세요. 또는 dotnet msbuild 명령을 사용할 수도 있습니다.

참고 항목

dotnet builddotnet run에 의해 자동으로 실행되면 -property:property=value와 같은 인수가 적용되지 않습니다.

dotnet build 실행은 dotnet msbuild -restore 실행과 같지만 출력의 기본 세부 정보 표시가 다릅니다.

워크로드 매니페스트 다운로드

이 명령을 실행하면 워크로드에 대한 광고 매니페스트의 비동기 백그라운드 다운로드가 시작됩니다. 이 명령이 완료될 때 다운로드가 계속 실행되면 다운로드가 중지됩니다. 자세한 내용은 광고 매니페스트를 참조하세요.

인수

PROJECT | SOLUTION

빌드할 프로젝트 또는 솔루션 파일입니다. 프로젝트 또는 솔루션 파일을 지정하지 않으면 MSBuild는 현재 작업 디렉터리에서 proj 또는 sln으로 끝나는 파일 확장명이 있는 파일을 검색하고 해당 파일을 사용합니다.

옵션

  • -a|--arch <ARCHITECTURE>

    대상 아키텍처를 지정합니다. 이는 제공된 값이 기본 RID와 결합되는 RID(런타임 식별자)를 설정하는 약식 구문입니다. 예를 들어, win-x64 머신에서 --arch x86을 지정하면 RID가 win-x86으로 설정됩니다. 이 옵션을 사용하는 경우 -r|--runtime 옵션을 사용하지 마세요. .NET 6 미리 보기 7 이후 사용 가능합니다.

  • --artifacts-path <ARTIFACTS_DIR>

    실행된 명령의 모든 빌드 출력 파일은 지정된 경로 아래의 하위 폴더에서 프로젝트로 구분됩니다. 자세한 내용은 아티팩트 출력 레이아웃을 참조 하세요. .NET 8 SDK부터 사용할 수 있습니다.

  • -c|--configuration <CONFIGURATION>

    빌드 구성을 정의합니다. 대부분의 프로젝트에 대한 기본값은 Debug이지만 프로젝트의 빌드 구성 설정을 재정의할 수 있습니다.

  • --disable-build-servers

    명령이 영구 빌드 서버를 무시하도록 합니다. 이 옵션은 처음부터 빌드하도록 하는 모든 빌드 캐싱을 사용하지 않도록 설정하는 일관된 방법을 제공합니다. 캐시에 의존하지 않는 빌드는 어떤 이유로 캐시가 손상되거나 올바르지 않을 때 유용합니다. .NET 7 SDK부터 사용할 수 있습니다.

  • -f|--framework <FRAMEWORK>

    특정 프레임워크에 대해 컴파일합니다. 프레임워크는 프로젝트 파일에 정의해야 합니다. 예: net7.0, net462.

  • --force

    마지막 복원이 성공한 경우에도 모든 종속성을 강제 확인합니다. 이 플래그를 지정하는 것은 project.assets.json 파일을 삭제하는 것과 같습니다.

  • -?|-h|--help

    명령을 사용하는 방법에 대한 설명을 출력합니다.

  • --interactive

    명령이 중지되고 사용자 입력 또는 작업을 대기할 수 있도록 허용합니다. 예를 들어 인증을 완료합니다. .NET Core 3.0 SDK 이후 사용할 수 있습니다.

  • --no-dependencies

    프로젝트 간(P2P) 참조를 무시하고 지정된 루트 프로젝트만 빌드합니다.

  • --no-incremental

    빌드를 증분 빌드에 안전하지 않은 것으로 표시합니다. 이 플래그로 증분 컴파일이 해제되고 프로젝트 종속성 그래프를 강제로 완전히 다시 빌드합니다.

  • --no-restore

    빌드하는 동안 암시적 복원을 실행하지 않습니다.

  • --nologo

    시작 배너 또는 저작권 메시지를 표시하지 않습니다.

  • --no-self-contained

    애플리케이션을 프레임워크 종속 애플리케이션으로 게시합니다. 호환되는 .NET 런타임은 애플리케이션을 실행할 대상 머신에 설치해야 합니다. .NET 6 SDK부터 사용할 수 있습니다.

  • -o|--output <OUTPUT_DIRECTORY>

    빌드된 이진 파일을 배치할 디렉터리입니다. 지정하지 않으면 기본 경로는 ./bin/<configuration>/<framework>/입니다. TargetFrameworks 속성을 통해 여러 개의 대상 프레임워크가 지정된 프로젝트의 경우 이 옵션을 지정할 때 --framework도 정의해야 합니다.

    • .NET 7.0.200 SDK 이상

      솔루션에서 이 명령을 실행할 때 --output 옵션을 지정하면 출력 경로의 의미 체계가 명확하지 않아 CLI에서 경고(오류 7.0.200)를 내보냅니다. 빌드된 모든 프로젝트의 모든 출력이 다중 대상 프로젝트와 호환되지 않는 지정된 디렉터리에 복사되고 서로 다른 버전의 직접 및 전이적 종속성이 있는 프로젝트로 복사되므로 --output 옵션이 허용되지 않습니다. 자세한 내용은 솔루션 수준 --output 옵션이 빌드 관련 명령에 더 이상 유효하지 않음을 참조하세요.

  • --os <OS>

    대상 운영 체제(OS)를 지정합니다. 이는 제공된 값이 기본 RID와 결합되는 RID(런타임 식별자)를 설정하는 약식 구문입니다. 예를 들어, win-x64 머신에서 --os linux을 지정하면 RID가 linux-x64으로 설정됩니다. 이 옵션을 사용하는 경우 -r|--runtime 옵션을 사용하지 마세요. .NET 6부터 사용할 수 있습니다.

  • -p|--property:<PROPERTYNAME>=<VALUE>

    하나 이상의 MSBuild 속성을 설정합니다. 세미콜론을 사용하거나 옵션을 반복하여 구분된 여러 속성을 지정합니다.

    --property:<NAME1>=<VALUE1>;<NAME2>=<VALUE2>
    --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>
    
  • -r|--runtime <RUNTIME_IDENTIFIER>

    대상 런타임을 지정합니다. RID(런타임 식별자) 목록은 RID 카탈로그를 참조하세요. 이 옵션을 .NET 6 SDK와 함께 사용하는 경우 --self-contained 또는 --no-self-contained도 사용해야 합니다. 지정하지 않으면 기본값은 현재 OS 및 아키텍처에 맞게 빌드하는 것입니다.

  • --self-contained [true|false]

    애플리케이션과 함께 .NET 런타임을 게시하므로 대상 머신에 런타임을 설치할 필요가 없습니다. 런타임 식별자가 지정된 경우 기본값은 true입니다. .NET 6부터 사용할 수 있습니다.

  • --source <SOURCE>

    복원 작업 중에 사용할 NuGet 패키지 소스의 URI입니다.

  • --tl:[auto|on|off]

    터미널 로거가 빌드 출력에 사용할지 여부를 지정합니다. 기본값은 auto(으)로 터미널 로깅을 사용하도록 설정하기 전에 먼저 환경을 확인하는 것입니다. 환경 검사는 터미널이 최신 출력 기능을 사용할 수 있고 새 로거를 사용하도록 설정하기 전에 리디렉션된 표준 출력을 사용하지 않는지 확인합니다. on은(는) 환경 검사를 건너뛰고 터미널 로깅을 사용하도록 설정합니다. off은(는) 환경 검사를 건너뛰고 기본 콘솔 로거를 사용합니다.

    터미널 로거에는 복원 단계와 빌드 단계가 표시됩니다. 각 단계에서 현재 빌드 프로젝트는 터미널 아래쪽에 표시됩니다. 빌드 중인 각 프로젝트는 현재 빌드 중인 MSBuild 대상과 해당 대상에 소요된 시간을 모두 출력합니다. 이 정보를 검색하여 빌드에 대해 자세히 알아볼 수 있습니다. 프로젝트 빌드가 완료되면 다음을 캡처하는 단일 "빌드 완료" 섹션이 작성됩니다.

    • 빌드된 프로젝트의 이름입니다.
    • 대상 프레임워크(다중 대상인 경우)입니다.
    • 해당 빌드의 상태입니다.
    • 해당 빌드의 기본 출력(하이퍼링크됨)입니다.
    • 해당 프로젝트에 대해 생성된 모든 진단입니다.

    이 옵션은 .NET 8부터 사용할 수 있습니다.

  • -v|--verbosity <LEVEL>

    명령의 세부 정보 표시 수준을 설정합니다. 허용되는 값은 q[uiet], m[inimal], n[ormal], d[etailed], diag[nostic]입니다. 기본값은 minimal입니다. 기본적으로 MSBuild는 모든 상세 수준에서 경고 및 오류를 표시합니다. 경고를 제외하려면 /property:WarningLevel=0을 사용합니다. 자세한 내용은 LoggerVerbosityWarningLevel을 참조하세요.

  • --use-current-runtime, --ucr [true|false]

    컴퓨터 중 하나를 기반으로 RuntimeIdentifier를 플랫폼 이식 가능한 RuntimeIdentifier로 설정합니다. 이는 SelfContained, PublishAot, PublishSelfContained, PublishSingleFilePublishReadyToRun과 같이 RuntimeIdentifier가 필요한 속성에서 암시적으로 발생합니다. 속성이 false로 설정되면 해당 암시적 해결이 더 이상 발생하지 않습니다.

  • --version-suffix <VERSION_SUFFIX>

    프로젝트를 빌드할 때 사용할 $(VersionSuffix) 속성의 값을 설정합니다. $(Version) 속성이 설정되지 않은 경우에만 작동합니다. 그런 다음, $(Version)이 대시로 구분하여 $(VersionSuffix)와 결합된 $(VersionPrefix)로 설정됩니다.

예제

  • 프로젝트 및 해당 종속성을 빌드합니다.

    dotnet build
    
  • 릴리스 구성을 사용하여 프로젝트 및 해당 종속성을 빌드합니다.

    dotnet build --configuration Release
    
  • 특정 런타임에 대한 프로젝트 및 해당 종속성을 빌드합니다(이 예제에서는 Linux).

    dotnet build --runtime linux-x64
    
  • 프로젝트를 빌드하고 복원 작업 중에 지정된 NuGet 패키지 소스를 사용합니다.

    dotnet build --source c:\packages\mypackages
    
  • -pMSBuild 옵션을 사용하여 프로젝트를 빌드하고 버전 1.2.3.4를 빌드 매개 변수로 설정합니다.

    dotnet build -p:Version=1.2.3.4