しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET MVC アプリケーションのバージョン情報を取得する

今作ってる 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();
}

ビュー

システムバージョン:
@ViewBag.Version

実行すると以下のように表示されます。

ASP.NET の仕組みを理解しておかないと悩みますね。

追記

id:ladybug さんからコメントで教えていただきました。Assembly は別に GetExecutingAssembly で取得する必要はなく、typeof を使って Assembly を取得すればビューでも関係なく取れました。

@typeof(MvcApplication1.MvcApplication).Assembly.Version.ToString()

絶対に存在してる MvcApplication クラスを指定してみました。問題なく取れているようです。