Problem beim Abrufen der AssemblyVersion auf einer Webseite mit Razor / MVC3


103

Ich verwende den folgenden Code in einer Fußzeile in meiner Datei _Layout.cshtml, um die Versionsdaten von AssemblyInfo in die Fußzeile jeder Seite meiner MVC3-Site einzufügen. Jedoch:

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

Druckt einfach in der Fußzeile:

Revision 0.0.0.0

Als ich die Ansicht so geändert habe, dass alle Baugruppeninformationen für die "Ausführung der Baugruppe" wie folgt angezeigt werden

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

Welches druckt das folgende:

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

Dies zeigt, dass die "Executing Assembly" nicht meine Haupt-App ist, sondern die Ansicht selbst.

Wie erhalte ich die Baugruppeninformationen für die IST-App, nicht nur die einzelnen Ansichten?

Antworten:


217

cshtml / vbhtml ist eine dynamische Kompilierung zur Assembly.

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

Wie wäre es damit?


15
Und @GetType(YourApplicationNamespace.MvcApplication).Assembly.GetName.Versionfür alle VB.NETer. Wir beide.
Edhubbell

Ich muss auch mein Lob teilen - dies oben in meiner Geschichte "Zeige die Revisionsnummer in der App für QA" zusammen mit [Assembly: AssemblyVersion ("1.0. *")] Erhalte ich eine gut aussehende Build-Nummer. Funktioniert super.
Nocarrier

4
Für WebAPI-Sites : @typeof(YourDefaultNamespace.WebApiApplication).Assembly.GetName().Version. Es kann sogar ohne den Standard-Namespace funktionieren:@typeof(WebApiApplication).Assembly.GetName().Version
Cristian Diaconescu

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version.ToString(3)Gibt 3 der 4 Teile der Baugruppenversion zurück, wenn jemand neugierig ist. Sie können zwischen 0 und 4 variieren.
Mafii

1
in dotnet core 2.1 funktioniert das bei mir: @{Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;}dann<h1>Ver. @version</h1>
Leonard AB

16

Die Verwendung dieses Helfers funktioniert für mich:

    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

Das funktioniert bei mir. Ohne den Typ explizit erwähnen zu müssen.

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

5

Sie müssen die Baugruppe eines Typs im Projekt erhalten:

typeof(MyType).Assembly.Whatever

Wo MyTypebefindet sich ein Typ im MVC-Projekt selbst (z. B. ein Controller oder Modell oder die MvcApplicationKlasse)?


Dies ist tatsächlich eine bessere Antwort als die akzeptierte IMO, da deutlich wird, dass Sie nach einem Typ suchen, der Teil der Assembly Ihrer Anwendung ist. Art erklärt die Ursache des Problems besser.
Jim

4

Erweitern Sie die Antwort von takepara, wenn Sie möchten, dass ein Einzeiler das AssemblyInformationalVersionAttribute aus einer MVC Razor-Ansicht erhält:

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

1

Sie könnten versuchen, GetCallingAssembly () zu verwenden. Ich bin nicht sicher, ob dies im Aufrufstapel hoch genug ist oder nicht, aber da Razor tatsächlich eine Assembly für jede Ansicht erstellt, liegt es nahe, dass Ihre App die aufrufende Assembly für die Ansichtsassembly ist.


Get Calling Assembly geht nur eine Ebene höher im Baum ... immer noch nicht gut.
Jay Stevens

0

Mein Problem war, dass ich den Namespace danach umbenannt hatte und den obigen Fehler bekam. Das Problem war die alte Namespace-Referenz in Views \ Web.config. Ich musste es von Project.WebAPI17auf ändernCompany.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>

-1

Sie können es mit der Name-Eigenschaft wie folgt erhalten:

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

ist es das, wonach du suchst?


-1

Gehen Sie zu Home Controller und kopieren Sie einfach diesen Code:

In ActionResultString umbenennen

public string Index()

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

run view
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.