다음을 통해 공유


빌드 출력 디렉터리 변경

구성별로(디버그, 릴리스 또는 둘 다) 프로젝트에서 생성된 출력의 위치를 지정할 수 있습니다. 기본 설정을 사용하면 출력 폴더는 프로젝트 유형 및 SDK에 따라 다르며 일부 프로젝트는 플랫폼별 또는 프레임워크별 하위 폴더를 사용합니다.

Visual Studio는 프로젝트 폴더에 상대 경로를 지정하거나 파일 시스템의 아무 곳에나 절대 경로를 지정하여 중간 및 최종 출력을 배치할 수 있는 속성을 제공합니다. Visual Studio 프로젝트 속성에 지정하는 설정 외에도 프로젝트 파일을 편집하여 출력을 추가로 사용자 지정할 수도 있고, 개별 프로젝트 또는 여러 프로젝트의 솔루션 수준에서 프로젝트 출력의 모든 측면을 완벽하게 제어할 수 있는 MSBuild 및 .NET SDK의 기능을 사용하여 출력을 사용자 지정할 수도 있습니다.

빌드 출력 디렉터리 변경

  1. 프로젝트 또는 솔루션을 정리하여 기존 출력 파일(빌드>정리 솔루션)을 제거합니다.

  2. 프로젝트 속성 페이지를 열려면 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  3. 프로젝트 형식에 따라 적절한 탭을 선택합니다.

    • C#의 경우 빌드 탭을 선택합니다.
    • Visual Basic의 경우 컴파일 탭을 선택합니다.
    • C++ 또는 JavaScript의 경우 일반 탭을 선택합니다.
  4. 맨 위의 구성 드롭다운에서 출력 파일 위치를 변경하려는 구성(디버그, 릴리스 또는 둘 다)을 선택합니다.

  5. 페이지의 출력 경로 항목을 찾습니다. 경로는 프로젝트 형식에 따라 달라집니다.

    • C# 및 JavaScript 프로젝트의 출력 경로
    • Visual Basic 프로젝트의 빌드 출력 경로
    • Visual C++ 프로젝트의 출력 디렉터리

    출력을 생성할 경로를 입력하거나(절대 또는 루트 프로젝트 디렉터리를 기준으로), 찾아보기 선택하여 해당 폴더를 찾습니다.

    Visual Studio C#프로젝트의 출력 경로 속성

    참고 항목

    일부 프로젝트(.NET 및 ASP.NET Core)는 기본적으로 빌드 경로에 프레임워크 버전 또는 런타임 식별자를 포함합니다. 이 설정을 변경하려면 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 프로젝트 파일 편집을 선택하여 다음을 추가합니다.

    <PropertyGroup>
      <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
      <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
    </PropertyGroup>
    

지정한 위치에 출력이 생성되지 않는 경우 Visual Studio의 메뉴 모음에서 선택하여 해당 구성(예를 들어 디버그 또는 릴리스)을 빌드 중인지 확인합니다.

Visual Studio 2019의 빌드 구성 선택기

공통 출력 디렉터리로 빌드

기본적으로 Microsoft Visual Studio는 솔루션 내에서 고유 폴더에 있는 솔루션에서 각 프로젝트를 빌드합니다. 프로젝트의 빌드 출력 경로를 변경하여 모든 출력이 동일한 폴더에 배치되도록 할 수 있습니다.

모든 솔루션 출력을 공용 디렉터리에 배치하려면

  1. 솔루션을 정리하여 기존 출력 파일(빌드>정리 솔루션)을 제거합니다.

  2. 솔루션에서 한 프로젝트를 클릭합니다.

  3. 프로젝트 메뉴에서 속성을 클릭합니다.

  4. 각 프로젝트에서 해당 형식에 따라 컴파일 또는 빌드를 선택하고 출력 경로 또는 기본 출력 경로를 솔루션의 모든 프로젝트에 사용할 폴더입니다.

  5. 프로젝트에 대한 프로젝트 파일을 열고 첫 번째 속성 그룹에 다음 속성 선언을 추가합니다.

    <PropertyGroup>
      <!-- existing property declarations are here -->
      <UseCommonOutputDirectory>true</UseCommonOutputDirectory>
    </PropertyGroup>
    

    UseCommonOutputDirectorytrue로 설정하면 Visual Studio 및 기본 빌드 엔진(MSBuild)에 동일한 폴더에 여러 프로젝트 출력을 배치한다고 알리므로 MSBuild는 프로젝트가 다른 프로젝트에 종속될 때 일반적으로 발생하는 복사 단계를 생략합니다.

  6. 솔루션의 모든 프로젝트에 대해 2-5단계를 반복합니다. 일반적인 출력 디렉터리를 사용하지 않아야 하는 예외적인 프로젝트가 있는 경우 일부 프로젝트를 건너뛸 수 있습니다.

프로젝트의 중간 출력 디렉터리(.NET 프로젝트)를 설정하려면

  1. 프로젝트를 정리하여 기존 출력 파일을 제거합니다.

  2. 프로젝트 파일을 엽니다.

  3. 첫 번째 속성 그룹에 다음 속성 선언을 추가합니다.

    <PropertyGroup>
      <!-- existing property declarations are here -->
      <IntermediateOutputPath>path</IntermediateOutputPath>
    </PropertyGroup>
    

    경로는 프로젝트 파일을 기준으로 하거나 절대 경로를 사용할 수 있습니다. 경로에 프로젝트 이름을 넣으려면 MSBuild 속성 $(MSBuildProjectName), $(MSBuildProjectDirectory)를 사용하여 참조할 수 있습니다. 사용할 수 있는 추가 속성은 MSBuild 예약 및 잘 알려진 속성을 참조하세요.

  4. MIcrosoft Visual Studio는 빌드할 때 프로젝트 폴더 아래에 여전히 obj 폴더를 만들지만 비어 있습니다. 빌드 프로세스의 일부로 삭제할 수 있습니다. 이 작업을 수행하는 한 가지 방법은 빌드 후 이벤트를 추가하여 다음 명령을 실행하는 것입니다.

    rd "$(ProjectDir)obj" /s /q
    

    사용자 지정 빌드 이벤트 지정을 참조하세요.

Visual Studio 2022에는 프로젝트 형식에 따라 다양한 프로젝트 디자이너 사용자 인터페이스가 있습니다. C# .NET Framework 및 모든 Visual Basic 프로젝트는 레거시 .NET 프로젝트 디자이너를 사용하지만 C# .NET Core(및 .NET 5 이상) 프로젝트는 현재 .NET 프로젝트 디자이너를 사용합니다. C++ 프로젝트는 고유한 속성 페이지 사용자 인터페이스를 사용합니다. 이 섹션의 단계는 사용 중인 프로젝트 디자이너에 따라 다릅니다.

빌드 출력 디렉터리 변경

이 절차는 .NET Core 또는 .NET 5 이상을 대상으로 하는 Visual Studio 2022의 C# 프로젝트에 적용됩니다.

  1. 프로젝트 또는 솔루션을 정리하여 기존 출력 파일(빌드>정리 솔루션)을 제거합니다.

  2. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다.

  3. 빌드 섹션을 확장하고 출력 하위 섹션을 스크롤 다운합니다.

  4. C#의 기본 출력 경로를 찾고 출력을 생성할 경로(루트 프로젝트 디렉터리에 대한 절대 또는 상대)를 입력하거나 찾아보기를 선택하여 대신 해당 폴더를 찾습니다. 구성 이름은 실제 출력 경로를 생성하기 위해 기본 출력 경로에 추가됩니다.

    .NET Core C# 프로젝트의 출력 경로 속성을 보여주는 스크린샷.

    참고 항목

    일부 프로젝트(.NET 및 ASP.NET Core)는 기본적으로 최종 출력 경로에 프레임워크 버전 또는 런타임 식별자를 포함합니다. 이 설정을 변경하려면 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 프로젝트 파일 편집을 선택하여 다음을 추가합니다.

    <PropertyGroup>
      <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
      <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
    </PropertyGroup>
    

공통 출력 디렉터리로 빌드

기본적으로 Microsoft Visual Studio는 솔루션 내에서 고유 폴더에 있는 솔루션에서 각 프로젝트를 빌드합니다. 프로젝트의 빌드 출력 경로를 변경하여 모든 출력이 동일한 폴더에 배치되도록 할 수 있습니다.

  1. 솔루션을 정리하여 기존 출력 파일(빌드>정리 솔루션)을 제거합니다.

  2. 솔루션에서 한 프로젝트를 클릭합니다.

  3. 프로젝트 메뉴에서 속성을 클릭합니다.

  4. 각 프로젝트에서 해당 형식에 따라 컴파일 또는 빌드를 선택하고 출력 경로 또는 기본 출력 경로를 솔루션의 모든 프로젝트에 사용할 폴더입니다.

  5. 프로젝트에 대한 프로젝트 파일을 열고 첫 번째 속성 그룹에 다음 속성 선언을 추가합니다.

    <PropertyGroup>
      <!-- existing property declarations are here -->
      <UseCommonOutputDirectory>true</UseCommonOutputDirectory>
    </PropertyGroup>
    

    UseCommonOutputDirectorytrue로 설정하면 Visual Studio 및 기본 빌드 엔진(MSBuild)에 동일한 폴더에 여러 프로젝트 출력을 배치한다고 알리므로 MSBuild는 프로젝트가 다른 프로젝트에 종속될 때 일반적으로 발생하는 복사 단계를 생략합니다.

  6. 솔루션의 모든 프로젝트에 대해 2-5단계를 반복합니다. 일반적인 출력 디렉터리를 사용하지 않아야 하는 예외적인 프로젝트가 있는 경우 일부 프로젝트를 건너뛸 수 있습니다.

지정한 위치에 출력이 생성되지 않는 경우 Visual Studio의 메뉴 모음에서 선택하여 해당 구성(예를 들어 디버그 또는 릴리스)을 빌드 중인지 확인합니다.

Visual Studio 2022 빌드 구성 선택기의 스크린샷.

프로젝트의 중간 출력 디렉터리 설정

이 절차는 .NET Core 또는 .NET 5 이상을 대상으로 하는 Visual Studio 2022의 C# 프로젝트에 적용됩니다.

  1. 프로젝트를 정리하여 기존 출력 파일을 제거합니다.

  2. 프로젝트 파일을 엽니다.

  3. 첫 번째 속성 그룹에 다음 속성 선언을 추가합니다.

    <PropertyGroup>
      <!-- existing property declarations are here -->
      <IntermediateOutputPath>path</IntermediateOutputPath>
    </PropertyGroup>
    

    경로는 프로젝트 파일을 기준으로 하거나 절대 경로를 사용할 수 있습니다. 경로에 프로젝트 이름을 넣으려면 MSBuild 속성 $(MSBuildProjectName), $(MSBuildProjectDirectory)를 사용하여 참조할 수 있습니다. 사용할 수 있는 추가 속성은 MSBuild 예약 및 잘 알려진 속성을 참조하세요.

  4. MIcrosoft Visual Studio는 빌드할 때 프로젝트 폴더 아래에 여전히 obj 폴더를 만들지만 비어 있습니다. 빌드 프로세스의 일부로 삭제할 수 있습니다. 이 작업을 수행하는 한 가지 방법은 빌드 후 이벤트를 추가하여 다음 명령을 실행하는 것입니다.

    rd "$(ProjectDir)obj" /s /q
    

    사용자 지정 빌드 이벤트 지정을 참조하세요.

Directory.Build.props를 사용하여 출력 디렉터리 설정

프로젝트의 수가 많으며 모든 프로젝트에 대한 출력 폴더를 변경하려는 경우 이 문서의 앞부분에서 설명한 방법을 사용하여 각 프로젝트를 변경하는 것은 번거롭고 오류가 발생하기 쉽습니다. 이러한 경우 솔루션 폴더인 Directory.Build.props에 파일을 만들어 솔루션의 모든 프로젝트에 적용할 적절한 MSBuild 속성을 한 곳에서 설정할 수 있습니다. 영향을 받을 모든 프로젝트의 부모 폴더에 이 특정 이름을 가진 파일을 배치하면 한 곳에서 사용자 지정을 쉽게 유지 관리하고 값을 쉽게 변경할 수 있습니다. 폴더별 빌드 사용자 지정을 참조하세요.

아티팩트를 사용하여 빌드 출력 구성

.NET 8 프로젝트의 경우 아티팩트 기능을 사용하여 고도로 사용자 지정 가능하고 유연한 방식으로 출력을 정렬할 수 있습니다. 아티팩트 출력 레이아웃을 참조하세요.