다음을 통해 공유


자습서: Native AOT를 사용하여 ASP.NET Core 앱 게시

ASP.NET Core 8.0에는 .NET 네이티브 AOT(Ahead-of-Time)에 대한 지원이 도입되었습니다.

참고 항목

  • 네이티브 AOT 기능은 현재 미리 보기로 제공됩니다.
  • .NET 8에서는 모든 ASP.NET Core 기능이 Native AOT와 호환되는 것은 아닙니다.
  • .NET CLIVisual Studio 지침에 대한 탭이 제공됩니다.
    • VISUAL Studio는 CLI 탭을 선택한 경우에도 필수 구성 요소입니다.
    • VISUAL Studio 탭을 선택한 경우에도 CLI를 사용하여 게시해야 합니다.

필수 조건

참고 항목

Native AOT에는 link.exe 및 Visual C++ 정적 런타임 라이브러리가 필요하기 때문에 Visual Studio 2022 미리 보기가 필요합니다. Visual Studio 없이 네이티브 AOT를 지원할 계획은 없습니다.

Native AOT를 사용하여 웹앱 만들기

Native AOT에서 작동하도록 구성된 ASP.NET Core API 앱을 만듭니다.

다음 명령을 실행합니다.

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

다음 예제와 유사한 출력이 표시됩니다.

The template "ASP.NET Core Web API (Native AOT)" was created successfully.

Processing post-creation actions...
Restoring C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj:
  Determining projects to restore...
  Restored C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj (in 302 ms).
Restore succeeded.

네이티브 AOT 앱 게시

네이티브 AOT를 사용하여 앱을 게시할 수 있는지 확인합니다.

dotnet publish

dotnet publish 명령은 다음을 수행합니다.

  • 원본 파일을 컴파일합니다.
  • 컴파일되는 소스 코드 파일을 생성합니다.
  • 생성된 어셈블리를 네이티브 IL 컴파일러에 전달합니다. IL 컴파일러는 네이티브 실행 파일을 생성합니다. 네이티브 실행 파일에는 네이티브 머신 코드가 포함됩니다.

다음 예제와 유사한 출력이 표시됩니다.

MSBuild version 17.<version> for .NET
  Determining projects to restore...
  Restored C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj (in 241 ms).
C:\Code\dotnet\aspnetcore\.dotnet\sdk\8.0.<version>\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIde
ntifierInference.targets(287,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotne
t-support-policy [C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj]
  MyFirstAotWebApi -> C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\MyFirstAotWebApi.dll
  Generating native code
  MyFirstAotWebApi -> C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\publish\

출력은 사용된 .NET 8 버전, 사용된 디렉터리 및 기타 요인에 따라 이전 예제와 다를 수 있습니다.

출력 디렉터리의 내용을 검토합니다.

dir bin\Release\net8.0\win-x64\publish

다음 예제와 유사한 출력이 표시됩니다.

    Directory: C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\publish

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          30/03/2023  1:41 PM        9480704 MyFirstAotWebApi.exe
-a---          30/03/2023  1:41 PM       43044864 MyFirstAotWebApi.pdb

실행 파일은 자체 포함되며 .NET 런타임을 실행할 필요가 없습니다. 시작되면 개발 환경에서 실행되는 앱과 동일하게 동작합니다. AOT 앱을 실행합니다.

.\bin\Release\net8.0\win-x64\publish\MyFirstAotWebApi.exe

다음 예제와 유사한 출력이 표시됩니다.

info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\Code\Demos\MyFirstAotWebApi

라이브러리 및 네이티브 AOT

ASP.NET Core 프로젝트에 사용되는 많은 인기 라이브러리는 현재 Native AOT를 대상으로 하는 프로젝트에서 사용할 때 다음과 같은 호환성 문제가 있습니다.

  • 리플렉션을 사용하여 형식을 검사하고 검색합니다.
  • 런타임에 라이브러리를 조건부로 로드합니다.
  • 즉시 코드를 생성하여 기능을 구현합니다.

네이티브 AOT를 사용하려면 이러한 동적 기능을 사용하는 라이브러리를 업데이트해야 합니다. Roslyn 원본 생성기와 같은 도구를 사용하여 업데이트할 수 있습니다.

네이티브 AOT를 지원하려는 라이브러리 작성자는 다음을 권장합니다.

참고 항목