Native DLL, Native 라이브러리 만들기 (feat. File-based App + .NET 10)

소개하려는 주제는 이미 .NET 7에 들어와서 기본적인 인프라가 모두 갖추어진 영역이지만, File-based App을 만나서 매우 매력적으로 진화한 기능이라 소개해보고 싶어 추가로 이야기해보려 합니다.

현재 File-based App 관련 샘플을 보면, 주로 EXE 파일과 Native AOT를 만드는 것에 초점을 두고 있지만, 네이티브 라이브러리를 프로듀싱하는 것도 가능합니다. 예를 들어 다음과 같이 C# 코드 파일을 작성하고, dotnet publish File.cs 명령을 실행하면 64비트 Windows용 DLL을 만들 수 있습니다.

#:property OutputType=Library
#:property RuntimeIdentifier=windows-x64

using System.Runtime.InteropServices;

internal static class NativeEntryPoints
{
    [UnmanagedCallersOnly(EntryPoint = "mymethod")]
    public static void MyMethod(nint ptrText)
    {
        if (ptrText == default)
            return;

        string? text = Marshal.PtrToStringUni(ptrText);
        Console.WriteLine($"{DateTime.Now} {text}");
    }
}

그 후 실제로 만들어진 DLL 파일이 정상적으로 Signature Export를 가지고 있는지 Depdency Walker 류의 툴로 DLL을 열어보면 잘 만들어져있는 것을 확인할 수 있습니다. 그리고 당연한 이야기이지만, .NET 런타임과 관련해서는 어디에도 종속된 내용 없이 순수한 네이티브 DLL로 만들어진 것도 확인할 수 있습니다.

File-based App은 이 뿐 아니라 필요하면 언제든 csproj로 스케일 업 할 수 있는 것도 장점입니다.

개인적으로는 이제 Visual Studio 다음 버전, 그리고 다음 C# Dev Kit 릴리스에서 File-based App에 대한 지원이 충실히 이루어지기만 한다면 더할 나위 없이 좋겠다는 생각을 해봅니다. :smiley:

6개의 좋아요