자습서: Native AOT를 사용하여 ASP.NET Core 앱 게시
ASP.NET Core 8.0에서는 .NET 네이티브 AOT(Ahead-of-Time)에 대한 지원이 도입되었습니다.
메모
- 네이티브 AOT 기능은 현재 미리 보기로 제공됩니다.
- .NET 8에서는 모든 ASP.NET Core 기능이 Native AOT와 호환되는 것은 아닙니다.
- .NET CLI
및 visual Studio 지침에 탭이 제공됩니다. - VISUAL Studio는 CLI 탭을 선택한 경우에도 필수 구성 요소입니다.
- VISUAL Studio 탭을 선택한 경우에도 CLI를 사용하여 게시해야 합니다.
필수 구성 요소
Linux에서 네이티브 AOT 배포를 위한 필수 구성 요소에 대해을 참조하세요.
Visual Studio 2022 에 C++ 데스크톱 개발 워크로드가 설치된.
Visual Studio 워크로드 선택 대화 상자에서 "C++를 사용한 데스크톱 개발"이 선택되어 있습니다.
메모
Native AOT에는 link.exe 및 Visual C++ 정적 런타임 라이브러리가 필요하기 때문에 Visual Studio 2022가 필요합니다. 네이티브 AOT 를 Visual Studio 없이 지원할 계획은 없습니다.
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를 지원하려는 라이브러리 작성자는 다음과 같이 권장됩니다.
- 네이티브 AOT 호환성 요구 사항에 대해 알아봅니다.
- 자르기 위해 라이브러리를 준비합니다.
참조
ASP.NET Core