しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Unity で Roslyn を使って特定のアセンブリ向けにコード生成する

※ これは 2023/09/14 時点の Unity 2023.1.13f1 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回で Unity の Roslyn を使ったコード生成をしてみたが何やら下記のような警告が出ていた

Constants が重複して定義されているみたいな警告を解消する

この警告は複数のアセンブリに同じコードが生成されたために起こるらしい

というわけで前回の自動生成コードの下記の部分を

        /// <inheritdoc/>
        public void Execute(GeneratorExecutionContext context)
        {
            context.AddSource("Constants.g.cs", SourceText.From(Code, Encoding.UTF8));
        }

次のように変更する

        /// <inheritdoc/>
        public void Execute(GeneratorExecutionContext context)
        {
            if (context.Compilation.AssemblyName.Equals("Assembly-CSharp"))
            {
                context.AddSource("Constants.g.cs", SourceText.From(Code, Encoding.UTF8));
            }
        }

やることは context から出力先のアセンブリ名を読み取り、デフォルトのアセンブリ名だった場合のみコードを追加するようにしただけ

アセンブリ名を任意の名前にしたりソースごとに分割した場合、対象のアセンブリ名だけに出力するようにすればよさそう

あとは VSCode のソリューションエクスプローラーの右クリックメニューから「リビルド」実行

これで先述の警告は出なくなった