다음을 통해 공유


.NET 애플리케이션 게시 개요

.NET을 사용하여 만든 애플리케이션은 두 가지 모드로 게시할 수 있으며, 모드는 사용자가 앱을 실행하는 방식에 영향을 줍니다.

앱을 자체 포함 게시하면 .NET 런타임 및 라이브러리, 애플리케이션 및 해당 종속성이 포함된 애플리케이션이 생성됩니다. 애플리케이션 사용자는 .NET 런타임이 설치되지 않은 컴퓨터에서 실행할 수 있습니다.

앱을 프레임워크 종속 게시하면 애플리케이션 자체와 해당 종속성만 포함된 애플리케이션이 생성됩니다. 애플리케이션 사용자는 .NET 런타임을 별도로 설치해야 합니다.

두 게시 모드는 기본적으로 플랫폼별 실행 파일을 생성합니다. 프레임워크 종속 애플리케이션은 실행 파일 없이 만들 수 있으며 이러한 애플리케이션은 플랫폼 간입니다.

실행 파일이 생성되면 RID(런타임 식별자)를 사용하여 대상 플랫폼을 지정할 수 있습니다. RID에 대한 자세한 내용은 .NET RID 카탈로그참조하세요.

다음 표에서는 앱을 프레임워크 종속 또는 자체 포함으로 게시하는 데 사용되는 명령을 간략하게 설명합니다.

유형 명령
현재 플랫폼에 맞는 프레임워크 종속 실행 파일. dotnet publish
특정 플랫폼에 대한 프레임워크 종속 실행 파일 . dotnet publish -r <RID>
프레임워크 종속 이진. dotnet publish
자체 포함 실행 파일. dotnet publish -r <RID> --self-contained

자세한 내용은 .NET dotnet publish 명령참조하세요.

실행 파일 생성

실행 파일은 플랫폼 간이 아니며 운영 체제 및 CPU 아키텍처와 관련이 있습니다. 앱을 게시하고 실행 파일을 만들 때, 앱을 자체 포함 방식으로 게시하거나 프레임워크 의존 방식으로 게시할 수 있습니다. 앱을 자체 포함으로 게시하면 앱이 포함된 .NET 런타임이 포함되며, 앱 사용자는 앱을 실행하기 전에 .NET 설치에 대해 걱정할 필요가 없습니다. 프레임워크 종속으로 앱을 게시해도 .NET 런타임은 포함되지 않습니다. 앱 및 타사 종속성만 포함됩니다.

다음 명령은 실행 파일을 생성합니다.

타입 명령
현재 플랫폼에 맞는 프레임워크에 종속된 실행 파일 . dotnet publish
특정 플랫폼에 대한 프레임워크 종속 실행 파일. dotnet publish -r <RID>
자체 포함 실행 파일. dotnet publish -r <RID> --self-contained

플랫폼 간 바이너리 생성

플랫폼 간 이진 파일은 dll 파일 형식으로 앱을 프레임워크 종속게시할 때 만들어집니다. dll 파일의 이름은 프로젝트의 이름을 따서 지정됩니다. 예를 들어 word_reader라는 앱이 있는 경우, 이름이 word_reader.dll인 파일이 생성됩니다. 이러한 방식으로 게시된 앱은 dotnet <filename.dll> 명령을 사용하여 실행되며 모든 플랫폼에서 실행할 수 있습니다.

대상 .NET 런타임이 이미 설치된 경우 플랫폼 간 이진 파일을 모든 운영 체제에서 실행할 수 있습니다. 대상 .NET 런타임이 설치되지 않은 경우 앱이 롤 포워드되도록 구성된 경우 최신 런타임을 사용하여 앱이 실행될 수 있습니다. 자세한 내용은 프레임워크 종속 앱 롤 포워드을 참조하세요.

dotnet 명령을 통해 플랫폼별 실행 파일 또는 플랫폼 간 이진 파일로 앱을 실행하도록 선택할 수 있습니다. 플랫폼별 실행 파일을 통해 플랫폼 전용 실행 파일과 dotnet 명령으로 일반 서버 앱을 시작할 때 앱 동작에 차이가 없어야 합니다. 플랫폼별 실행 파일을 통해 시작하면 기본 OS와 더 나은 통합을 제공합니다. 예를 들어:

  • 프로세스 목록에 애플리케이션 실행 파일 이름이 보이고 dotnet은 보이지 않기 때문에, 만약 둘 이상이 있다면 혼동될 수 있습니다.
  • OS 관련 기능을 사용하여 플랫폼별 실행 파일을 사용자 지정할 수 있습니다. 예를 들어 Windows에서 기본 스택 크기를 구성하는 방법에 대한 토론을참조하세요.

다음 명령은 플랫폼 간 바이너리를 생성합니다.

타입 명령
프레임워크 의존 플랫폼 간 호환 이진. dotnet publish

프레임워크 종속 게시

프레임워크 종속 앱으로 게시된 앱은 플랫폼 간이며 .NET 런타임을 포함하지 않습니다. 앱 사용자는 .NET 런타임을 설치해야 합니다.

앱을 프레임워크 종속으로 게시하면, 플랫폼 간 이진 결과물이 dll 파일로 생성되고, 현재 플랫폼을 대상으로 하는 플랫폼별 실행 파일가 생성됩니다. dll는 여러 플랫폼에서 사용할 수 있지만 실행 파일은 그렇지 않습니다. 예를 들어, word_reader라는 앱을 게시하고 Windows를 목표로 하는 경우, word_reader.exe 실행 파일이 word_reader.dll와 함께 생성됩니다. Linux나 macOS를 대상으로 할 때, word_reader 실행 파일이 word_reader.dll와 함께 만들어집니다. 앱에서 플랫폼별 구현이 있는 NuGet 패키지를 사용하는 경우 모든 플랫폼에 대한 종속성이 게시\runtimes\{platform} 폴더에 복사됩니다.

앱의 플랫폼 간 이진 파일은 dotnet <filename.dll> 명령을 사용하여 실행할 수 있으며 모든 플랫폼에서 실행할 수 있습니다.

플랫폼별 및 프레임워크 종속

dotnet publish 명령에 -r <RID> 매개 변수를 전달하여 플랫폼별 프레임워크 종속 앱을 게시할 수 있습니다. 이러한 방식으로 게시하는 것은 플랫폼별 종속성이 다르게 처리된다는 점을 제외하고 프레임워크 종속게시하는 동일합니다. 앱이 플랫폼별 구현이 있는 NuGet 패키지를 사용하는 경우 대상 플랫폼의 종속성만 복사됩니다. 이러한 종속성은 게시 폴더에 직접 복사됩니다.

기술적으로 생성된 이진 파일은 여러 플랫폼에서 실행될 수 있지만, 특정 플랫폼을 목표로 하는 경우, 앱이 여러 플랫폼에서 실행될 것이라고는 보장할 수 없습니다. dotnet <filename.dll>실행할 수 있지만 누락된 플랫폼별 종속성에 액세스하려고 하면 앱이 충돌할 수 있습니다.

RID에 대한 자세한 내용은 .NET RID 카탈로그참조하세요.

장점

  • 소규모 배포
    앱 및 해당 종속성만 배포됩니다. .NET 런타임 및 라이브러리는 사용자가 설치하고 모든 앱은 런타임을 공유합니다.

  • 플랫폼 간
    앱 및 모든 . NET 기반 라이브러리는 다른 운영 체제에서 실행됩니다. 앱의 대상 플랫폼을 정의할 필요가 없습니다. .NET 파일 형식에 대한 자세한 내용은 .NET 어셈블리 파일 형식참조하세요.

  • 패치된 최신 런타임 사용
    앱은 대상 시스템에 설치된 최신 런타임(.NET의 대상 주-부 제품군 내)을 사용합니다. 즉, 앱은 패치된 최신 버전의 .NET 런타임을 자동으로 사용합니다. 이 기본 동작을 재정의할 수 있습니다. 자세한 내용은 프레임워크 종속 앱 롤 포워드을 참조하세요.

단점

  • 런타임을(를) 사전 설치해야 합니다.
    앱 대상의 .NET 버전이 호스트 시스템에 이미 설치된 경우에만 앱을 실행할 수 있습니다. 특정 버전의 .NET이 필요하거나 최신 버전의 .NET을 허용하도록 앱에 대한 롤 포워드 동작을 구성할 수 있습니다. 자세한 내용은 프레임워크 종속 앱 롤 포워드을 참조하시기 바랍니다.

  • .NET은 변경할 수 있습니다.
    앱이 실행되는 컴퓨터에서 .NET 런타임 및 라이브러리를 업데이트할 수 있습니다. 드물게 .NET 라이브러리를 사용하는 경우, 대부분의 앱이 그렇듯이, 앱의 동작이 변경될 수 있습니다. 앱에서 최신 버전의 .NET을 사용하는 방법을 구성할 수 있습니다. 자세한 내용은 프레임워크 종속 앱 롤 포워드을 참조하세요.

예제

플랫폼 간 및 프레임워크 종속으로 앱을 게시합니다. 현재 플랫폼을 대상으로 하는 실행 파일은 dll 파일과 함께 만들어집니다. 모든 플랫폼별 종속성은 앱과 함께 게시됩니다.

dotnet publish

앱을 플랫폼별 및 프레임워크 종속 앱으로 게시합니다. Linux 64비트 실행 파일은 dll 파일과 함께 만들어집니다. 대상 플랫폼의 종속성만 앱과 함께 게시됩니다.

dotnet publish -r linux-x64

자체 포함 게시

앱을 자체 포함으로 게시하면 플랫폼별 실행 파일이 생성됩니다. 출력 게시 폴더에는 .NET 라이브러리 및 대상 런타임을 포함하여 앱의 모든 구성 요소가 포함됩니다. 앱은 다른 .NET 앱과 격리되며 로컬로 설치된 공유 런타임을 사용하지 않습니다. 앱 사용자는 .NET을 다운로드하고 설치할 필요가 없습니다.

--self-contained 매개 변수를 dotnet publish 명령에 전달하여 자체 포함 앱을 게시할 수 있습니다. 실행 파일 이진 파일은 지정된 대상 플랫폼에 대해 생성됩니다. 예를 들어 word_reader이라는 앱이 있고 Windows용 자체 포함 실행 파일을 게시하는 경우 word_reader.exe 파일이 만들어집니다. Linux 또는 macOS로 게시하면 word_reader 파일이 만들어집니다. 대상 플랫폼 및 아키텍처는 dotnet publish 명령에 대한 -r <RID> 매개 변수로 지정됩니다. RID에 대한 자세한 내용은 .NET RID 카탈로그참조하세요.

앱에 플랫폼별 종속성이 포함된 NuGet 패키지와 같은 플랫폼별 종속성이 있는 경우 앱과 함께 게시 폴더에 복사됩니다.

장점

  • .NET 버전 제어
    앱과 함께 배포되는 .NET 버전을 제어합니다.

  • 플랫폼별 대상 지정
    각 플랫폼에 대해 앱을 게시해야 하므로 앱이 실행되는 위치를 알 수 있습니다. .NET에서 새 플랫폼을 도입하는 경우 사용자는 해당 플랫폼을 대상으로 하는 버전을 릴리스할 때까지 해당 플랫폼에서 앱을 실행할 수 없습니다. 사용자가 새 플랫폼에서 앱을 실행하기 전에 앱에서 호환성 문제를 테스트할 수 있습니다.

단점

  • 대규모 배포
    앱에 .NET 런타임 및 모든 앱 종속성이 포함되어 있으므로 필요한 다운로드 크기와 하드 드라이브 공간이 프레임워크 종속 버전보다 큽니다.

    .NET 세계화 고정 모드사용하여 Linux 시스템의 배포 크기를 약 28MB 줄일 수 있습니다. 이는 강제로 앱이 모든 문화권을 불변 문화권처럼 처리하도록 합니다.

    IL 트리밍은 배포 크기를 더 줄일 수 있습니다.

  • .NET 버전 업데이트하기가 더 어렵습니다.
    .NET 런타임(앱과 함께 배포됨)은 새 버전의 앱을 릴리스해야만 업그레이드할 수 있습니다.

예제

독립적으로 구성된 앱을 게시합니다. macOS 64비트 실행 파일이 만들어집니다.

dotnet publish -r osx-x64 --self-contained

자체 포함된 독립 실행형 앱을 게시합니다. Windows 64비트 실행 파일이 만들어집니다.

dotnet publish -r win-x64 --self-contained

ReadyToRun 이미지를 사용하여 게시

ReadyToRun 이미지를 사용하여 게시하면 애플리케이션 크기를 늘리는 비용으로 애플리케이션의 시작 시간이 향상됩니다. 자세한 내용은 ReadyToRun참조하세요.

장점

  • 개선된 시작 시간
    애플리케이션은 JIT를 실행하는 데 더 적은 시간을 소비합니다.

단점

  • 더 큰 크기
    애플리케이션은 디스크 공간 상 더 큽니다.

예제

앱을 필요한 모든 종속성을 포함하여 자체 포함 및 ReadyToRun 형식으로 게시합니다. macOS 64비트 실행 파일이 만들어집니다.

dotnet publish -c Release -r osx-x64 --self-contained -p:PublishReadyToRun=true

자체 포함 및 ReadyToRun 방식으로 앱을 게시합니다. Windows 64비트 실행 파일이 만들어집니다.

dotnet publish -c Release -r win-x64 --self-contained -p:PublishReadyToRun=true

참조