yotiky Tech Blog

とあるエンジニアの備忘録

Unity Editor の MessagePack CodeGen が動かない原因と一時対処

原因

最新の MessagePack for C# (執筆時のバージョンは 2.2.60 ) の MessagePack CodeGen ウィンドウでは、ジェネレートが動かなくなっています。中でdotnet tool コマンドを使っていますが、.NET Core ツールについては前回の記事を参照してください。

yotiky.hatenablog.com

ツールの ToolCommandName に設定する名前は、プレフィックス dotnet- で実行するコマンドが変わってきます。

最新の MessagePack for C#プレフィックス dotnet- が取れています。

    <ToolCommandName>mpc</ToolCommandName>

以前はプレフィックスが付いていました。

    <ToolCommandName>dotnet-mpc</ToolCommandName>

最新のものをグローバルツールとして実行するには、dotnet mpc ではなく、mpcで実行する必要があります。

一方で、エディタ拡張のコマンドは以下のままであるため、ジェネレートが動かなくなっています。

var log = await ProcessHelper.InvokeProcessStartAsync("dotnet", "mpc " + commnadLineArguments);

一時対処

エディタ拡張自体がグローバルツールを使うようにできています。MessagePack for C# 自体はローカルツールに舵取りするようなので、ここでは一時対処だけ記載しておきます。

Assets/Scripts/MessagePack/Unity/MessagePackWindow.cs の150行目付近にある以下のコードの部分を。

var log = await ProcessHelper.InvokeProcessStartAsync("dotnet", "mpc " + commnadLineArguments);

以下の要領で書き換えます。

UnityEngine.Debug.Log("try local tool");
var log = await ProcessHelper.InvokeProcessStartAsync("dotnet", "mpc " + commnadLineArguments);
if (string.IsNullOrEmpty(log))
{
    UnityEngine.Debug.Log("try global tool");
    log = await ProcessHelper.InvokeProcessStartAsync("mpc", commnadLineArguments);
}

参考

blog.yumineko.com

原因を教えて頂いた記事に感謝。