今作ってる MVC アプリケーションにバージョンを表示しようと思って、適当にコード書いていたら ASP.NET の仕様に悩まされたのでメモとして残します。
最初はビューに以下のようなコードを書いて試しました。
@Assembly.GetExecutingAssembly().GetName().Version.ToString()
しかしこれはうまく動作しませんでした。ASP.NET は起動時にビューを C# に変換してコンパイルするからです。したがってビューに書く限り、AssemblyInfo.cs に書いた AssemblyVersion の値は取れません。
したがって、AssemblyInfo.cs と同時にコンパイルされるファイルにバージョンを取得するコードを書く必要があるわけです。つまり、ASP.NET MVC アプリケーションではコントローラです。
コントローラ
public ActionResult About() { // バージョンを取得する ViewBag.Version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); return View(); }
追記
id:ladybug さんからコメントで教えていただきました。Assembly は別に GetExecutingAssembly で取得する必要はなく、typeof を使って Assembly を取得すればビューでも関係なく取れました。
@typeof(MvcApplication1.MvcApplication).Assembly.Version.ToString()
絶対に存在してる MvcApplication クラスを指定してみました。問題なく取れているようです。