Assembly Definition Filesについて詳しく

Assembly Definition Filesについて質問を受けたので、私も曖昧な部分をちょっと調べついでに備忘録にしておきますね。

概要の方は安定のテラシュールですが、↓を参考にしてください。

Assembly Definition Files の有効範囲

で、Assembly Definition Files の有効範囲はどこまで?という問題があります。つまり直下だけなのか、子フォルダまで伝搬するのか、ということです。

では試してみました。

まずARKit のルートに Assembly Definition Files (この場合UnityARKit)を置いてみます。

その子フォルダ(この場合、ARKitRemote)のソースを見ると、Inspectorに「UnityARKit.dll」と出ていますね

その孫フォルダExampleの中身とかもやはり伝搬していてくれるわけです。

というわけで全部有効範囲ということになりますね。

じゃあ子フォルダにもう1個おくとどうなるか。例えばExampleに Assembly Definition Files を置くとどうなるか?

Example の方で別の Assembly Definition Files を作られるわけです。そうなると先ほど作ったARKit のルートの Assembly Definition Files とは別のnamespace となるので、エラーが出てしまうわけです。

これを回避するにはReferences機能の出番となるのです。

References機能

これは依存関係が生じる時に(この場合ARKitExample が UnityARKit に依存している)、それを解消するために明示的にそれをUnityに教えてあげる機能です。

依存している側の Assembly Definition Files (この場合はARKitExample)の設定で、References というところがあるので、そこの+をポチっと押して、

依存先の Assembly Definition Files (この場合UnityARKit)を割り当ててやるのです。

そうすると、先ほどエラーはなくなる、ということですね。

(ちなみにこのARKitExample の Assembly Definition Files は本来必要ないものなので、消しておきましょう)

そんな感じです。