web-dev-qa-db-de.com

Problem beim Einfügen der AssemblyVersion in eine Webseite mit Razor/MVC3

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

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

Nur Drucke in der Fußzeile:

Revision 0.0.0.0

Wenn ich die Ansicht geändert habe, um alle Assembly-Informationen für die "Assembly ausführen" anzuzeigen, verwenden Sie Folgendes

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

Was druckt folgendes:

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

Dies zeigt, dass die "ausführende Baugruppe" nicht meine Hauptanwendung ist, sondern die Ansicht selbst. 

Wie erhalte ich die Assembly-Informationen für die ACTUAL-App, nicht nur die einzelnen Ansichten?

97
Jay Stevens

cshtml/vbhtml ist eine dynamische Kompilierung in Assembly. 

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

wie wäre es damit?

200
takepara

Dieser Helfer 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("");
        }

    }
14
Jay

Das funktioniert für mich. Ohne den Typ explizit erwähnen zu müssen.

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

Sie müssen die Assembly eines Typs im Projekt abrufen:

typeof(MyType).Assembly.Whatever

Dabei ist MyType ein beliebiger Typ im MVC-Projekt selbst (z. B. ein Controller oder Modell oder die MvcApplication-Klasse).

5
SLaks

Die Antwort von Takepara wird erweitert, wenn Sie möchten, dass ein einziger Liner das AssemblyInformationalVersionAttribute aus einer MVC Razor-Ansicht erhält:

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

Sie könnten versuchen, GetCallingAssembly () zu verwenden. Ich bin mir nicht sicher, ob das hoch genug im Call Stack ist oder nicht, aber da Razor tatsächlich eine Assembly für jede Ansicht erstellt, ist es naheliegend, dass Ihre App die aufrufende Assembly für die View Assembly ist.

1
BAKeele

Mein Problem war, dass ich den Namespace nachträglich umbenannt hatte und oben den Fehler bekam ... Das Problem war die alte Namespacereferenz in Views\Web.config. Ich musste es von Project.WebAPI17 in Company.Project.WebAPI17 ändern

  <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
florian.isopp

GO to Home Controller und kopiere einfach diesen Code:

Benennen Sie ActionResult in String um

public string Index()

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

run view
0
prashant