【Unity】Assembly Definitionで生成したcsprojはGitに含めない

本記事では、Assembly Definition で生成したcsproj はGitに含めないというテーマで書きます。

Assembly Definition は、Unityでドメイン駆動設計の実装で重宝します。

しかし、Assembly Definition で生成したcsproj ファイルをGitにコミットすると問題が発生します。

なので、csproj ファイルはGitに含めないようにしました。

初回起動時に、csprojファイルを生成しないとビルドが通りません。この件は運用でカバーします。

開発環境
  • Windows10 Home 64bit
  • Unity Version 2020.3.17f1 Personal
  • Visual Studio Community 2019  16.11.2
  • .NET Standard2.0
目次

Assembly Definition とは

Assembly Definitionという機能をご存知でしょうか。
これは「C#のビルドファイル(アセンブリ)を分割して出力する」ことができる機能であり、Unity 2017.3で追加されました。

https://qiita.com/toRisouP/items/d206af3029c7d80326ed

これを使用することで、Unity においてプロジェクト分割ができます。

ぼくは、Unity プロジェクトでドメイン駆動設計を実装しています。境界づけられたコンテキストで分割するために、プロジェクトの分割機能は重宝します

ずっと、Assembly-CSharp だけでやってきました。プロジェクト分割する方法はないかな?と思ってました。なので、Assembly Definition を知ったときは、まさに寝耳に水でした。

csproj をGitにコミットすることの問題

Assembly Definition を使用していると、問題が発生しました。

Assembly Definition を使用すると、csproj ファイルも生成されます。そのファイルもGitにコミットしていました。そうすると以下のような問題が発生しました。

csproj ファイルをGitにコミットすることの問題
  • 自動更新の頻度が高い
  • 絶対パスが含まれる

自動更新の頻度が高い

csprojファイルは自動更新の頻度が高いです。

更新内容はタグが変わっただけということも多いです。

csprojファイルが多くなると、Gitにコミットするときに、毎回チェックするのが大変です。

絶対パスが含まれる

Gitにコミットするうえで、これは致命的です。

HintPath タグに絶対パスが含まれます。

csproj ファイルの一部

絶対パスが含まれるものはGitにコミットしたくありません。Visual Studio のPathを参照するものもあり、相対パスに変更することもできません。

クローン時は手動でcsprojを生成する

上記理由から、csproj をGitにコミットすることをやめました。

Unityのgitnone はこちらのものを使用しています。これに以下を追記しました。

/*.csproj

プロジェクトフォルダ( csprojeが自動生成される、ソリューションがあるフォルダ )直下にあるcsproj をすべてコミットしないようにしました。

Assembly Definition以外で、プロジェクトフォルダ直下にcsproj ファイルを置くことはありません。共通クラスライブラリは作成するので、プロジェクトフォルダ直下に限定します。

ただ、ビルドを通すためには、csproj は必要です。このままだと、Unityプロジェクトをクローンした後は、ビルドが通らなくなります

なので対策として、クローン時は手動でcsprojを生成してもらう運用としました

手動で生成する方法は、2つあります。

手動でcsprojを生成する方法
  • Unityを起動し、Edit→Preferences→Regenerate project files ボタンを押す
  • Unityを起動し、任意のC# Scriptファイルをダブルクリックし、Visual Studioを起動する

ソリューションの起動で、csprojファイルを生成してほしかったのですが、その方法はわかりませんでした。

運用でカバーという条件付きですが、Assembly Definition で生成したcsproj ファイルはGitに含めないようにしました。

まとめ

本記事では、Assembly Definition で生成したcsproj はGitに含めないというテーマで書きました。

Assembly Definition は、Unityでドメイン駆動設計を実装するうえで重宝します。

しかし、Assembly Definition で生成したcsproj ファイルをGitにコミットすると問題が発生します。

なので、Assembly Definition で生成したcsproj ファイルはGitに含めないようにしました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次