こちらのつづき
.NET Core + Git の場合のベストプラクティスが知りたいです。教えて下さい。
SVN のリビジョンの AssemblyInfo への埋め込み
SVN を使った、.NET Framework プロジェクトの場合、AssemblyInfo.cs
の AssemblyVersion
の Revision
部にはビルドスクリプトなどで SVN Rev を埋める事例が多く私も行っていました。こちら .NET Core の場合は事情が異なっている模様1。
// revision = 4567 は
// SVN Rev -> `(git log --online).Length` 等により、とりあえず導出
[assembly: AssemblyVersion("1.2.3.4567")]
Git hash の AssemblyInfo 情報の埋め込み
これを Git の hash に置き換えて、
[assembly: AssemblyVersion("1.2.3.b34f896")]
としても AssemblyVersion
が数値ではないのでエラーになるはず。
ここで、 AssemblyInformationalVersion
には任意の文字列を指定できるので、
[assembly: AssemblyVersion("1.2.3.4567")]
[assembly: AssemblyInformationalVersion("1.2.3.4567-b34f896")]
などとすると、 AssemblyVersion
の要件を満たしつつ、AssemblyInformationalVersion
に Git の情報も埋め込めるので CI を行うには良さそう。
実際の製品では?
MSBuild を実行している時に SHA1 hash らしき情報が見えたなぁ、と思って調べてみると、 MSBuild など Microsoft 製品で Git 管理のものには hash 値を利用している様で GitHub で公開されているソースコードのタグと hash が一致する。
しかし、そもそも MSBuild は SVN から移行したものではないし、上記の 16.6.0.22303
の revision 部 22303
をどうやって導出しているか不明。ソースコードを見ればよいが、ちょっと追いかけられず挫折した(たぶんここら辺か?)。 Git 管理の AssemblyInfo のベストプラクティスがあれば知りたい。2
当面の移行
SVN Rev を利用していた部分 AssemblyVersion
や AssemblyFileVersion
には (git log --oneline).Length
等を利用し、余裕や必要に応じて
AssemblyInformationalVersion
には Git の SHA1 hash か short hash などを組み合わせた値を埋め込みたいと思う。私は。