.NET 6부터 AOT를 통해 네이티브 코드로 Blazor Webassembly로 게시할 수 있게 되었습니다. .NET 5의 인터프린터 방식보다 당연히 많이 빠르고요, .NET 6의 AOT 기능을 이용해 웹브라우저에서 C# 코드를 동적으로 실행하는 방법은 아직까지는 없겠다… 는 이야기였습니다.
그런데 위의 글은 자료 조사 없이 제가 가진 개념과 기존 정보를 가지고 전개한거라… 참고용입니다. 자료조사할 때 정확하게 확인하고 댓글 달아볼께요.
아… 아닙니다. 제가 만드려고 하는 슬로그라는 서비스에서 코드를 웹페이지에서 실행하는 기능은 단지 하나의 기능일 뿐입니다. 이 기능 때문에 서비스를 AOT로 배포하지 못하는 건 사용할 수 없는 무엇으로 보여져서요. (서비스를 Blazor Server로 제공하느냐 Webassembly로 게시하느냐는 것은 좀 더 고민할 내용이지만서도…)
.NET Try 대신 .NET Interactive를 이용할 수 있습니다. (.NET Try GitHub 가보니 .NET 6을 적용하려고 하는 흔적이 보이기는 하네요. 문서등에서 아직은 계획이라던가 어떠한 이야기는 없습니다.) .NET Interactive를 사용하기 위한 학습 방법으로 dotnet-repl의 소스코드를 리뷰하는 방법이 있습니다. 이 프로젝트는 .NET Interactive 및 콘솔 출력을 위해 Spectre.Console을 이용한 프로젝트 입니다.
사실 AOT가 아닌 Blazor Webassembly 환경은 완벽한 .NET의 Playgound 입니다. Blazor WASM 환경에서 필요시 마다 .NET dll을 웹브라우저로 불러다가 쓸 수 있거든요. 즉, 어떻게 dll을 불러다 쓸것이냐의 약간의 차이만 있을 뿐이지 Microsoft.CodeAnalysis.CSharp.Scripting을 이용해서 코드를 실행하는 과정은 완전히 동일합니다.
현재는 필수 dll을 MetadataReference로 어떻게 포함할 것인가 찾고 있습니다. 구글 검색으로 확인되는 방식은 현재 도메인의 어셈블리 목록의 Location으로 읽어야 할 dll을 찾아 등록하는 방식인데요, 해보니 Location이 빈 문자열이라 동작하지 않습니다.
생각하고 있는 방식은 blazor.boot.json의 resources/assembly의 목록으로 dll을 읽는 것인데요 이 방법이 가장 유망해 보입니다.
그런데 사실 가장 좋은 방법은 이미 로딩된 dll의 어셈블리를 이용해 MetadataReference을 구성해 참조하도록 하는것인데요, 이 방법은 아직은 찾질 못했습니다.