-
서버와 클라이언트가 proto 파일을 컴파일한 결과물인 클래스 파일을 공유하는데 어떻게 역직렬화하는 과정에서 오류가 생길 수 있을까. 결론부터 말하자면 System.Runtime.CompilerServices.Unsafe의 버전 문제였다. 프로토버프를 서버와 연동하는 과정에서 System.Runtime.CompilerServices.Unsafe.dll을 csharp 환경에 있는 라이브러리에서 가져다 썼었다.
C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.12
여기에 있던 dll 버전이 낮았나 보다. 전체 오류 메시지를 보면 버전이 언급되어 있었다.
Could not resolve type with token 010000a6 from typeref (expected class 'System.Runtime.CompilerServices.Unsafe' in assembly 'System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
유니티와 연결되는 VS에서는 NuGet을 이용한 설치만으로는 안 되고 Assets 폴더 밑에 Libs나 Plugins에 직접 dll을 넣어줘야 한다. 유니티는 netstandard를 사용하기 때문에 netstandard2.0 버전을 복사 붙여넣기했다. 사용자 계정의 .nuget 폴더에서 찾을 수 있다.
.nuget\packages\system.runtime.compilerservices.unsafe\6.1.0\lib\netstandard2.0
서버에서는 딱히 설치 안 해도 되는 것 같다. 유니티에서 프로토버프를 사용할 때 Plugins에 붙여넣기 한 dll에 대한 직접적인 의존성이 생겼고 버전 문제가 있기 때문에 최신 버전으로 교체해준 것이다.
해결!
'개발 > C#' 카테고리의 다른 글
프로토버퍼 연동(feat. C# 프레임워크) (0) 2025.01.28 빌드 이벤트를 통해 자동화를 완성하자 (0) 2024.12.27 유니티 편집기에서 띄운 프로젝트가 호환되지 않을 때 (0) 2024.12.17 닷넷 프레임워크 프로젝트를 닷넷 프로젝트로 변경하기 (1) 2024.12.16