본문 바로가기
ASP.NET Core

.NET CLI] 사용법 - 빌드, 실행, 게시(self-contained, framework-dependent) (3)

by Fastlane 2022. 6. 24.
728x90
반응형

 

 

.NET CLI] 사용법 - 솔루션 생성, 프로젝트 생성, 참조 추가 (2)

프로젝트 솔루션 만들기 Visual Studio를 사용하지 않고 .NET CLI를 사용해서 2개의 projects를 포함하는 solution을 생성하고 building, cleaning, running, packaging, publishing을 해보자. 가벼운 사양의 프로..

bigexecution.tistory.com

이전 게시글에 이어서 프로젝트를 빌드해보자. 

C:\Project\CliDemo\DemoApp>dotnet build
.NET용 Microsoft (R) Build Engine 버전 17.1.1+a02f73656
Copyright (C) Microsoft Corporation. All rights reserved.

  복원할 프로젝트를 확인하는 중...
  C:\Project\CliDemo\DemoApp\DemoApp.csproj을(를) 233 ms 동안 복원했습니다.
  복원할 2 프로젝트의 1이(가) 최신 상태입니다.
  DemoLib -> C:\Project\CliDemo\DemoLib\bin\Debug\net6.0\DemoLib.dll
  DemoApp -> C:\Project\CliDemo\DemoApp\bin\Debug\net6.0\DemoApp.dll

빌드했습니다.
    경고 0개
    오류 0개

경과 시간: 00:00:09.21

DemoApp 콘솔 애플리케이션을 실행해보자. 

C:\Project\CliDemo\DemoApp>dotnet run
Hello, World!

.NET 애플리케이션은 2가지 모드로 게시할 수 있다. 

  1. self-contained : .NET 런타임, 라이브러리, 애플리케이션 및 종속성을 포함하는 애플리케이션이 생성된다. .NET 런타임이 설치되지 않은 머신에서 실행파일을 실행할 수 있다.
    • 게시생성파일 : platform 지정 실행파일, output publishing folder에 모든 app, .NET 라이브러리, 대상 런타임 포함한 앱의 모든 구성 요소가 포함된다. 로컬에 설치된 공유 런타임을 사용하지 않는다. 
    • 명령어
      • dotnet publish -r <RID> : RID 실행파일이 생성된다. 
    • 장점 : 앱과 함께 배포되는 .NET 버전을 제어할 수 있다. Target Platform을 지정한다.
    • 단점 : 게시파일 용량이 크다. .NET 버전을 업데이트하기 어렵다. 
  2. framework-dependent : 애플리케이션과 종속성만 포함하는 애플리케이션이 생성된다. 머신에 .NET 런타임을 설치해야 한다.
    • 게시생성파일 : cross-platform binary dll file(eg. helloworld.dll), platform지정 실행파일(eg. helloworld.exe) 
    • 명령어
      • dotnet publish : cross-platform framework-dependent app을 게시한다. 현재 플랫폼을 대상으로 하는 실행파일이 dll과 함께 만들어진다. 
      • dotnet publish -r <RID> --self-contained false : cross-platform framework-depent app을 게시한다. RID 실행파일이 dll 파일과 함께 만들어진다. 
    • 장점 : 게시파일 용량이 적다. Cross-platform
    • 단점 : .NET 업데이트가 일어나면 앱의 동작이 변경될 수 있다. 

두 게시 모두, 플랫폼별 실행파일을 생성한다. RID로 대상 플랫폼을 지정한다. 

.NET RID 카탈로그 : https://docs.microsoft.com/ko-kr/dotnet/core/rid-catalog

 

.NET RID(런타임 식별자) 카탈로그

RID(런타임 식별자)에 대해 알아보고 .NET에서 RID를 사용하는 방법에 대해 알아봅니다.

docs.microsoft.com

DemoApp 콘솔 애플리케이션을 framework-dependent 모드로 게시해보자.

C:\Project\CliDemo\DemoApp>dotnet publish -p:PublishSingleFile=true -r win-x64 --self-contained false
.NET용 Microsoft (R) Build Engine 버전 17.1.1+a02f73656
Copyright (C) Microsoft Corporation. All rights reserved.

  복원할 프로젝트를 확인하는 중...
  C:\Project\CliDemo\DemoLib\DemoLib.csproj을(를) 250 ms 동안 복원했습니다.
  C:\Project\CliDemo\DemoApp\DemoApp.csproj을(를) 250 ms 동안 복원했습니다.
  DemoLib -> C:\Project\CliDemo\DemoLib\bin\Debug\net6.0\DemoLib.dll
  DemoApp -> C:\Project\CliDemo\DemoApp\bin\Debug\net6.0\win-x64\DemoApp.dll
  DemoApp -> C:\Project\CliDemo\DemoApp\bin\Debug\net6.0\win-x64\publish\

C:\Project\CliDemo\DemoApp\bin\Debug\net6.0\win-x64\publish 경로에 아래 파일들이 생성되었다. 

DemoApp.exe 파일만 있으면 애플리케이션 실행이 가능하다. 353KB 용량이다. 

 

DemoApp 콘솔 애플리케이션을 self-contained 모드로 게시해보자.

C:\Project\CliDemo\DemoApp>dotnet publish -p:PublishSingleFile=true -r win-x64 --self-contained true
.NET용 Microsoft (R) Build Engine 버전 17.1.1+a02f73656
Copyright (C) Microsoft Corporation. All rights reserved.

  복원할 프로젝트를 확인하는 중...
  C:\Project\CliDemo\DemoLib\DemoLib.csproj을(를) 51.29 sec 동안 복원했습니다.
  C:\Project\CliDemo\DemoApp\DemoApp.csproj을(를) 51.29 sec 동안 복원했습니다.
  DemoLib -> C:\Project\CliDemo\DemoLib\bin\Debug\net6.0\DemoLib.dll
  DemoApp -> C:\Project\CliDemo\DemoApp\bin\Debug\net6.0\win-x64\DemoApp.dll
  DemoApp -> C:\Project\CliDemo\DemoApp\bin\Debug\net6.0\win-x64\publish\

첫번째 게시보다 시간이 오래걸린다. 용량은 62MB이다. 

DemoApp.exe 파일만 있으면 어느 Window 기기에서도 동작한다. exe파일을 더블클릭해서 실행하면 console이 떴다가 바로 닫혀진다. 

 

아래 경로에서 호출하면 console창 닫힘 없이 결과를 확인할 수 있다. 

C:\Project\CliDemo\DemoApp\bin\Debug\net6.0\win-x64\publish> .\DemoApp.exe
Hello, World!

 

728x90
반응형

댓글