はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】.asmrefはCore CLRがくると動作しなくなるよという話

はじめに

UnityはMonoからCore CLRへの移行を進めていますが、Core CLRがくると.asmrefが使えなくなるみたいです。そのあたりを軽く調べてみたので、そのまとめを書き残しておきたいと思います。

また現時点ではまだ開発中なので、今後変わるかも知れないのでご注意ください。

話題の議論

Unity DiscussionsでUnity Future .NET Development StatusというタイトルでユーザーとUnity中の人が議論している様子を見ることができます。
https://discussions.unity.com/t/unity-future-net-development-status/

そこでとあるユーザーがCoreCLRがくると.asmrefがなくなる話はどうなったの?と質問していました。

As a long time has passed since this was last talked about. How’s the latest status for .asmref and usage of [InternalsVisibleTo] attribute?
There were rumors that .asmref will be gone with CoreCLR and I’m not clear if that’s true or if it has changed by now.

Any kind of update would be appreciated. Thanks!

// DeepL翻訳
この話題からずいぶん時間が経ってしまったが、.asmrefと[InternalsVisibleTo]属性の最新状況はどうなっているのだろうか。 .asmrefと[InternalsVisibleTo]属性の使い方の最新状況はどうなっているのでしょうか? CoreCLRで.asmrefがなくなるという噂がありましたが、それが本当なのか、それとも今頃になって変わったのかよくわかりません。 何か最新情報があれば教えてください。 ありがとうございます!

Unityの中の人の回答としては、.asmrefは廃止するということみたいです。

Yes, asmref won’t be supported anymore. For now, as we can’t undisclosed more about some of the changes that we are making, It will be difficult to give more details about this, hope you understand.

// DeepL翻訳
はい、asmrefはもうサポートされません。 今のところ、私たちが行っているいくつかの変更についてこれ以上公表することができないため、これ以上の詳細をお伝えすることは難しいのですが、ご理解いただければ幸いです。

https://discussions.unity.com/t/unity-future-net-development-status/836646/2491

代替案

また中の人が代替案を提案してくれていました。

  • System.Reflection
  • IL Post Processing
  • UnsafeAccessorAttribute

We won’t have a strict substitute, but in this kind of situations (and that applies to any .NET code, not only for Unity), folks have been always able to workaround with e.g System.Reflection, IL post processing assemblies and there are also new unsafe workaround toolbox coming like the more recent [UnsafeAccessorAttribute]. But the best substitute imo would be to have closer collaboration with users, good feedback loop, and ways to add missing plugin entry points whenever possible. It might sound impossible but it is still a north star for us.

厳密な代用品はありませんが、このような状況では(Unityだけでなく、すべての.NETコードに当てはまります)、System.Reflection、ILポスト処理アセンブリなどで回避することができますし、最近の[UnsafeAccessorAttribute]のような新しい安全でない回避ツールボックスもあります。 しかし、最良の代替案は、ユーザーとの緊密なコラボレーション、良いフィードバックループ、そして可能な限り不足しているプラグインのエントリーポイントを追加する方法を持つことだと思います。 不可能に聞こえるかもしれませんが、それでも私たちにとっては北極星です。

.NET8が利用できるようになればわりとUnsafeAccessorAttributeは候補に上がってくるのかなと思ってます。

まあ.asmref程はユーザーにとって使いやすく安全なものではないですが、早くMono脱却してほしい気持ちの方がはるかに大きいです。