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 のソリューションエクスプローラーの右クリックメニューから「リビルド」実行

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