Razor / MVC3を使用してAssemblyVersionをWebページに取得する際の問題


104

_Layout.cshtmlファイルのフッターで次のコードを使用して、MVC3サイトのすべてのページのフッターにAssemblyInfoバージョンデータを入れています。しかしながら:

@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()

フッターに印刷するだけです:

Revision 0.0.0.0

次のコマンドを使用して、「Executing Assembly」のすべてのアセンブリ情報を表示するようにビューを変更したとき

@System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()

これは以下を出力します:

Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

これは、「Executing Assembly」が私のメインアプリではなく、ビュー自体であることを示しています。

個々のビューだけでなく、ACTUALアプリのアセンブリ情報を取得するにはどうすればよいですか?

回答:


218

cshtml / vbhtmlは、アセンブリに動的にコンパイルされます。

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version

これはどう?


15
そして@GetType(YourApplicationNamespace.MvcApplication).Assembly.GetName.Version、すべてのVB.NETersのために。二人とも。
edhubbell

私はまた、賞賛を共有する必要があります-この「Qaのアプリでリビジョン番号を表示する」ストーリーのこのトップと[assembly:AssemblyVersion( "1.0。*")]と共に、見栄えの良いビルド番号を取得します。よく働く。
nocarrier 2014

4
WebAPIサイトの場合:@typeof(YourDefaultNamespace.WebApiApplication).Assembly.GetName().Version。それも、デフォルトの名前空間なしで動作可能性があります@typeof(WebApiApplication).Assembly.GetName().Version
クリスティアン・ダイアコネスキュー

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version.ToString(3)知りたい人がいれば、アセンブリバージョンの4つのパーツのうち3つを返します。0と4の間で変更できます
。–マフィイ

1
dotnetコア2.1では、これは私にとってはうまくいきます。@{Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;}それから<h1>Ver. @version</h1>
Leonard AB、

16

このヘルパーの使用は私にとってはうまくいきます:

    public static HtmlString ApplicationVersion(this HtmlHelper helper)
    {
        var asm = System.Reflection.Assembly.GetExecutingAssembly();
        var version = asm.GetName().Version;
        var product = asm.GetCustomAttributes(typeof(System.Reflection.AssemblyProductAttribute), true).FirstOrDefault() as System.Reflection.AssemblyProductAttribute;

        if (version != null && product != null)
        {
            return new HtmlString(string.Format("<span>{0} v{1}.{2}.{3} ({4})</span>", product.Product, version.Major, version.Minor, version.Build, version.Revision));
        }
        else
        {
            return new HtmlString("");
        }

    }

13

これでうまくいきます。タイプを明示的に言及する必要はありません。

@ViewContext.Controller.GetType().Assembly.GetName().Version

5

プロジェクトで型のアセンブリを取得する必要があります。

typeof(MyType).Assembly.Whatever

MyTypeMVCプロジェクト自体の任意のタイプ(コントローラーやモデル、MvcApplicationクラスなど)はどこにあるか


アプリケーションのアセンブリの一部であるTypeを探していることが明確になるため、これは実際には受け入れられている1つのIMOよりも良い答えです。一種の問題の原因をよりよく説明します。
ジム

4

MVC Razorビューから1つのライナーでAssemblyInformationalVersionAttributeを取得する場合は、takeparaの答えを拡張します。

@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion

1

GetCallingAssembly()を使用してみてください。それがコールスタックまで十分に高いかどうかはわかりませんが、Razorが実際に各ビューのアセンブリを作成するので、アプリがビューアセンブリの呼び出しアセンブリになるのは当然です。


Get Callingアセンブリはツリーの1つ上のレベルに移動します...それでもダメです。
ジェイスティーブンス、

0

私の問題は、後で名前空間の名前を変更していて、上記のエラーが発生したことです。問題はViews \ Web.configの古い名前空間参照でした。からに変更する必要がありProject.WebAPI17ましたCompany.Project.WebAPI17

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
        <add namespace="Company.Project.WebAPI17" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

0

APIコントローラーの場合、他の回答に基づいてこれを使用しました

Version = GetType().Assembly.GetName().Version.ToString()

-1

以下のようにNameプロパティを使用して取得できます。

  @System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;

それはあなたが探しているものですか?


-1

Home Controllerに移動して、このコードをコピーしてください:

ActionResult文字列に名前変更

public string Index()

   return typeof(Controller).Assembly.GetName().Version.ToString() ;

run view
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.