はなちるのマイノート

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

【C#】SourceGeneratorで実際にファイルを吐かせるようにする方法

はじめに

今回はSourceGeneratorで実際にファイル出力させる方法について紹介したいと思います。

やり方

SourceGeneratorで生成したコードが含まれる側の.csprojに対して(SourceGeneratorのコードが含まれる.csprojでないので注意)、EmitCompilerGeneratedFilesCompilerGeneratedFilesOutputPathを記述します。

  • EmitCompilerGeneratedFiles : ファイルを出力するかどうか
  • CompilerGeneratedFilesOutputPath : 出力先のフォルダへのパス
<PropertyGroup>
    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
    <CompilerGeneratedFilesOutputPath>Generated</CompilerGeneratedFilesOutputPath>
</PropertyGroup>

上記の例でdotnet buildを実行すると、.csprojと同じ階層にGeneratedというフォルダが生成され、生成されたコードが含まれるようになります。

# 一部抜粋
├── SourceGenerators.Sample
    ├── Generated
    │   └── SourceGenerators
    │       ├── SourceGenerators.Hoge
    │           └── Hoge.Generated.cs
    ├── SourceGenerators.Sample.csproj