다음을 통해 공유


.NET CLI를 사용하여 .NET 앱 게시

이 문서에서는 명령줄에서 .NET 애플리케이션을 게시하는 방법을 보여줍니다. .NET은 애플리케이션을 게시하는 세 가지 방법을 제공합니다. 프레임워크 종속 배포는 로컬에 설치된 .NET 런타임을 사용하는 플랫폼 간 .dll 파일을 생성합니다. 프레임워크 종속 실행 파일은 로컬에 설치된 .NET 런타임을 사용하는 플랫폼별 실행 파일을 생성합니다. 자체 포함 실행 파일은 플랫폼별 실행 파일을 생성하고 .NET 런타임의 로컬 복사본을 포함합니다.

이러한 게시 모드에 대한 개요는 .NET 애플리케이션 배포를 참조하세요.

CLI 사용에 대한 빠른 도움말을 찾나요? 다음 표는 앱을 게시하는 방법의 몇 가지 예를 보여줍니다. -f <TFM> 매개 변수를 사용하거나 프로젝트 파일을 편집하여 대상 프레임워크를 지정할 수 있습니다. 자세한 내용은 기본 사항 게시를 참조하세요.

게시 모드 명령
프레임워크 종속 배포 dotnet publish -c Release -p:UseAppHost=false
프레임워크 종속 실행 파일 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
자체 포함 배포 dotnet publish -c Release -r <RID> --self-contained true

참고 항목

  • -c Release 매개 변수는 필수가 아닙니다. 앱의 릴리스 빌드를 게시하는 미리 알림으로 제공됩니다.
  • .NET SDK 3.1 이상에서는 기본 dotnet publish 명령을 실행할 때 프레임워크 종속 실행 파일이 기본 게시 모드입니다.

게시 기본 사항

프로젝트 파일의 <TargetFramework> 설정은 앱을 게시할 때 기본 대상 프레임워크를 지정합니다. 대상 프레임워크를 유효한 TFM(대상 프레임워크 모니커)으로 변경할 수 있습니다. 예를 들어, 프로젝트에서 <TargetFramework>net8.0</TargetFramework>를 사용하는 경우 .NET 8을 대상으로 하는 이진 파일이 만들어집니다. 이 설정에 지정된 TFM은 dotnet publish 명령에서 사용되는 기본 대상입니다.

둘 이상의 프레임워크를 대상으로 하려는 경우 <TargetFrameworks> 설정을 세미콜론으로 구분된 여러 TFM 값으로 설정할 수 있습니다. 앱을 빌드하면 각 대상 프레임워크에 대해 빌드가 생성됩니다. 그러나 앱을 게시할 때 dotnet publish -f <TFM> 명령을 사용하여 대상 프레임워크를 지정해야 합니다.

-c 매개 변수를 사용하여 변경하지 않는 한 기본 BUILD-CONFIGURATION 모드는 디버그입니다.

dotnet publish 명령의 기본 출력 디렉터리는 ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/입니다. 예를 들어 dotnet publish -c Release -f net8.0./bin/Release/net8.0/publish/에 게시합니다. 그러나 모든 빌드 출력에 대해 간소화된 출력 경로와 폴더 구조를 옵트인할 수 있습니다. 자세한 내용은 Artifacts 출력 레이아웃을 참조하세요.

네이티브 종속성

앱에 네이티브 종속성이 있는 경우 다른 운영 체제에서 실행되지 않을 수 있습니다. 예를 들어 앱이 네이티브 Windows API를 사용하는 경우 macOS 또는 Linux에서 실행되지 않습니다. 플랫폼별 코드를 제공하고 각 플랫폼에 대해 실행 파일을 컴파일해야 합니다.

또한 참조한 라이브러리에 네이티브 종속성이 있는 경우 모든 플랫폼에서 앱이 실행되지 않을 수 있습니다. 그러나 참조하는 NuGet 패키지에 플랫폼별 버전이 포함되어 있어 사용자의 필수 네이티브 종속성을 처리할 수 있습니다.

네이티브 종속성이 있는 앱을 배포할 때 dotnet publish -r <RID> 스위치를 사용하여 게시할 대상 플랫폼을 지정해야 할 수 있습니다. 런타임 식별자 목록은 런타임 식별자(RID) 카탈로그를 참조하세요.

플랫폼별 이진 파일에 대한 자세한 내용은 프레임워크 종속 실행 파일자체 포함 배포 섹션을 참조하세요.

샘플 앱

다음 앱을 사용하여 게시 명령을 살펴볼 수 있습니다. 이 앱은 터미널에서 다음 명령을 실행하여 만듭니다.

mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle

콘솔 템플릿에 의해 생성된 Program.cs 또는 Program.vb 파일을 다음과 같이 변경해야 합니다.

using System;

namespace apptest1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"));
        }
    }
}
Module Program
    Sub Main(args As String())
        Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"))
    End Sub
End Module

앱(dotnet run)을 실행하면 다음 출력이 표시됩니다.

  _   _      _ _         __        __         _     _ _
 | | | | ___| | | ___    \ \      / /__  _ __| | __| | |
 | |_| |/ _ \ | |/ _ \    \ \ /\ / / _ \| '__| |/ _` | |
 |  _  |  __/ | | (_) |    \ V  V / (_) | |  | | (_| |_|
 |_| |_|\___|_|_|\___( )    \_/\_/ \___/|_|  |_|\__,_(_)
                     |/

프레임워크 종속 배포

앱을 FDD로 게시하면 <PROJECT-NAME>.dll 파일이 ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/ 폴더에 생성됩니다. 앱을 실행하려면 출력 폴더로 이동하여 dotnet <PROJECT-NAME>.dll 명령을 사용합니다.

앱이 특정 버전의 .NET을 대상으로 구성되어 있습니다. 대상으로 하는 .NET 런타임이 앱을 실행하는 컴퓨터에 있어야 합니다. 예를 들어, 앱이 .NET Core 8을 대상으로 하는 경우 앱이 실행되는 모든 컴퓨터에는 .NET Core 8 런타임이 설치되어 있어야 합니다. 기본 사항 게시 섹션에서 설명된 대로 프로젝트 파일을 편집하여 기본 대상 프레임워크를 변경하거나 둘 이상의 프레임워크를 대상으로 할 수 있습니다.

FDD를 게시하면 앱을 실행하는 시스템에서 사용할 수 있는 최신 .NET 보안 패치로 자동으로 롤포워드하는 앱이 만들어집니다. 컴파일 시 버전 바인딩에 대한 자세한 내용은 사용할 .NET 버전 선택을 참조하세요.

게시 모드 명령
프레임워크 종속 배포 dotnet publish -c Release -p:UseAppHost=false

프레임워크 종속 실행 파일

FDE(프레임워크 종속 실행 파일)가 기본 dotnet publish 명령의 기본 모드입니다. 현재 운영 체제를 대상으로 하는 한 다른 매개 변수를 지정할 필요가 없습니다.

이 모드에서는 플랫폼별 실행 파일 호스트가 만들어져 플랫폼 간 앱을 호스트합니다. 이 모드는 FDD에 dotnet 명령 형식의 호스트가 필요함으로 FDD와 유사합니다. 호스트 실행 파일 이름은 플랫폼마다 다르며 <PROJECT-FILE>.exe와 유사한 이름이 지정됩니다. dotnet <PROJECT-FILE>.dll을 호출하는 대신 이 실행 파일을 직접 실행하여 앱을 실행할 수 있습니다.

앱이 특정 버전의 .NET을 대상으로 구성되어 있습니다. 대상으로 하는 .NET 런타임이 앱을 실행하는 컴퓨터에 있어야 합니다. 예를 들어, 앱이 .NET 8을 대상으로 하는 경우 앱이 실행되는 모든 컴퓨터에는 .NET 8 런타임이 설치되어 있어야 합니다. 기본 사항 게시 섹션에서 설명된 대로 프로젝트 파일을 편집하여 기본 대상 프레임워크를 변경하거나 둘 이상의 프레임워크를 대상으로 할 수 있습니다.

FDE를 게시하면 앱을 실행하는 시스템에서 사용할 수 있는 최신 .NET 보안 패치로 자동으로 롤포워드하는 앱이 만들어집니다. 컴파일 시 버전 바인딩에 대한 자세한 내용은 사용할 .NET 버전 선택을 참조하세요.

게시 모드 명령
프레임워크 종속 실행 파일 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release

-r 스위치를 사용할 때마다 출력 폴더 경로가 ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/로 변경됩니다.

예제 앱을 사용하는 경우 dotnet publish -f net6.0 -r win-x64 --self-contained false를 실행합니다. 이 명령은 ./bin/Debug/net6.0/win-x64/publish/apptest1.exe 실행 파일을 만듭니다.

참고 항목

세계화 고정 모드를 사용하여 배포의 전체 크기를 줄일 수 있습니다. 이 모드는 전역적으로 인식되지 않는 서식 지정 규칙, 대/소문자 규칙 및 문자열 비교와 고정 문화권의 정렬 순서를 사용할 수 있는 애플리케이션에 유용합니다. 세계화 고정 모드와 이 모드를 사용하는 방법에 대한 자세한 내용은 .NET 세계화 고정 모드를 참조하세요.

.NET 설치 검색 동작 구성

.NET 9 이상 버전에서는 AppHostDotNetSearchAppHostRelativeDotNet 속성을 통해 게시된 실행 파일의 .NET 설치 검색 경로를 구성할 수 있습니다.

AppHostDotNetSearch를 사용하여 실행 파일이 .NET 설치를 찾을 위치를 하나 이상 지정할 수 있습니다.

  • AppLocal: 앱 실행 파일의 폴더
  • AppRelative: 앱 실행 파일 기준 경로
  • EnvironmentVariables: DOTNET_ROOT[_<arch>] 환경 변수의 값
  • Global: 등록된기본 전역 설치 위치

AppHostRelativeDotNetAppHostDotNetSearchAppRelative가 포함될 경우에 검색될 실행 파일을 기준으로 경로를 지정합니다.

자세한 내용은 apphost의 AppHostDotNetSearch, AppHostRelativeDotNet설치 위치 옵션을 참조하세요.

자체 포함 배포

SCD(자체 포함 배포)를 게시하면 .NET SDK는 플랫폼별 실행 파일을 만듭니다. SCD 게시에는 앱을 실행하는 데 필요한 모든 .NET 파일이 포함되지만 .NET의 네이티브 종속성은 포함되지 않습니다(예: Linux의 .NET 6 또는 Linux의 .NET 8). 이러한 종속성은 앱을 실행하기 전에 시스템에 있어야 합니다.

SCD를 게시하면 사용 가능한 최신 .NET 보안 패치로 롤포워드되지 않는 앱이 만들어집니다. 컴파일 시 버전 바인딩에 대한 자세한 내용은 사용할 .NET 버전 선택을 참조하세요.

SCD를 게시하려면 dotnet publish 명령과 함께 다음 스위치를 사용해야 합니다.

  • -r <RID>

    이 스위치는 식별자(RID)를 사용하여 대상 플랫폼을 지정합니다. 런타임 식별자 목록은 런타임 식별자(RID) 카탈로그를 참조하세요.

  • --self-contained true

    이 스위치는 .NET SDK에 실행 파일을 SCD로 생성하도록 지시합니다.

게시 모드 명령
자체 포함 배포 dotnet publish -c Release -r <RID> --self-contained true

  • .NET 6 이상 버전에서는 잘린 항목을 게시하여 호환되는 자체 포함 앱의 전체 크기를 줄일 수 있습니다. 이를 통해 트리머는 코드 경로에 없거나 잠재적으로 런타임 리플렉션에서 참조되는 프레임워크 및 참조 어셈블리의 일부를 제거할 수 있습니다. 트리밍이 애플리케이션에 적합한지 확인하려면 비호환성 자르기를 참조하세요.
  • 세계화 고정 모드를 사용하여 배포의 전체 크기를 줄일 수 있습니다. 이 모드는 전역적으로 인식되지 않는 서식 지정 규칙, 대/소문자 규칙 및 문자열 비교와 고정 문화권의 정렬 순서를 사용할 수 있는 애플리케이션에 유용합니다. 세계화 고정 모드와 이 모드를 사용하는 방법에 대한 자세한 내용은 .NET Core 세계화 고정 모드를 참조하세요.

참고 항목