U# assembly definition が定義されていない旨のエラー対処
公開用に Packages/
側で U# のアプリケーションを作っているときに、以下でビルドエラーになったのでの備忘録。
'/Packages/XXX/XXX.cs' does not belong to a U# assembly, have you made a U# assembly definition for the assembly the script is a part of?
エラーメッセージの通りで書き残すほどでもない気はするが、U# Assembly Definition についてあまり情報がなかったので書き残す
記事を書いている途中に公式ドキュメントを見つけました。 https://udonsharp.docs.vrchat.com/migration/#does-not-belong-to-u-assembly
Assembly Definition (asmdef) について
asmdef は定義済アセンブリを明示するための設定ファイル。
Unity C#で記述した Script がコンパイルされる際、 asmdef で定義を明示しない場合は Assembly-CSharp*
にまとめられる。
自分の書いた Script とその他無関係の Script が同一のアセンブリにビルドされるため、クラス名の衝突であったりコンパイルの時間増加等の問題につながるため、特別な理由がなければ定義しておくほうが無難。
参考: 特殊フォルダーとスクリプトのコンパイル順 - Unity Documentation 2022.3
今回のエラーについて
今回の話は Unity C#ではなく、UdonSharp (U#) で発生した内容。同様に asmdef を配置していたが、掲題のエラーが発生した。 エラーメッセージにある通り、 U# の asmdef を作成しましたか? というもの。asmdef だけでは U# 向けのアセンブリなのか判断できなかったと思われる。
asmdef は以下
対処
U# Assembly Definition を追加する。右クリックで asmdef の下辺りにある。
このファイルの設定には asmdef を指定する項目があるが、もともと定義してある asmdef を設定する。
もし asmdef がなければ作成する。定義名や配置については公式ドキュメントに規則がある。U# Script そのものであれば Runtime 下になると思われる。
参考: アセンブリ定義とパッケージ - Unity Documentation 2022.3
これで無事にビルドできた。
推測だが、これまで/Package
側で U# Script を書いたことがなかったので引っかからなかったと思われる。