2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】gRPC導入時に出たエラーと解決

Last updated at Posted at 2020-09-26

「gRPC」での通信のために、Unityに導入の際に以下の様なエラーが発生!

Error: Could not load signature of Google.Protobuf.ByteString:get_Span due to: Could not load file or assembly 'System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. assembly:System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 type:<unknown type> member:(null) signature:<none>
Unloading broken assembly Assets/Plugins/Google.Protobuf/lib/net45/Google.Protobuf.dll, this assembly can cause crashes in the runtime

その解決までを書きます。

環境

  • Unity 2019.4.10f1
  • grpc_unity_package.2.33.0-dev
  • macOS 10.14.6

gRPC導入

以下のサイトを参考にUnityでgRPCを使えるようにしました。
gRPCとProtocol Buffersによるアプリケーション間通信 / Unity

すると、Grpc.Toolsとgrpc_unity_packageを追加し、最新のGoogle.Protobuf.dllに上書きした後、
Unityを開くと、Consoleに冒頭に記載したエラーがでました。

エラー内容

同様のエラーはネット上にもあがっており、
Google.Protobuf.dllはversion4.0.1.0 (4.5.2)のSystem.Memory参照してるけど、
Grpc.Coreはversion 4.0.1.1 (4.5.3)のSystem.Memoryを参照してるぞというエラーらしい。
https://github.com/grpc/grpc/issues/21908

grpc_unity_package.2.26.0-devとUnity2019.3.9f1では上手くいくという情報もありましたが、
私のとろこでは駄目でした。

解決策

Google.Protobuf.dllも4.5.3を参照するように変更することで解決できました。

  1. dotnetコマンドを使えるようにする
    https://dotnet.microsoft.com/download

  2. google protobuf sourceを落としてくる
    https://github.com/protocolbuffers/protobuf

  3. フォルダ内の以下を開き、System.MemoryのVersionを4.5.3に変更
    csharp/src/Google.Protobuf/Google.Protobuf.csproj
    <PackageReference Include="System.Memory" Version="4.5.3" />

  4. ターミナルで以下に移動
    csharp/src/Google.Protobuf

  5. コマンド叩く
    dotnet publish -c Release -f net45

  6. 以下にGoogle.Protobuf.dllが作成される
    csharp/src/Google.Protobuf/bin/Release/net45

  7. 作成されたGoogle.Protobuf.dllをUnity内に展開したgrpc_unity_packageの以下のGoogle.Protobuf.dllと入れ替える
    Plugins/Google.Protobuf/lib/net45/Google.Protobuf.dll

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?