Problema al introducir AssemblyVersion en una página web con Razor / MVC3


104

Estoy usando el siguiente código en un pie de página en mi archivo _Layout.cshtml para poner los datos de la versión de AssemblyInfo en el pie de página de cada página de mi sitio MVC3. Sin embargo:

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

Solo se imprime en el pie de página:

Revision 0.0.0.0

Cuando modifiqué la vista para mostrar toda la información del ensamblaje para el "Ensamblaje en ejecución" usando lo siguiente

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

Que imprime lo siguiente:

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

Esto muestra que el "Ensamblado en ejecución" no es mi aplicación principal, es la vista en sí.

¿Cómo obtengo la información de montaje para la aplicación ACTUAL, no solo las vistas individuales?

Respuestas:


218

cshtml / vbhtml es una compilación dinámica para ensamblar.

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

¿Qué tal esto?


15
Y @GetType(YourApplicationNamespace.MvcApplication).Assembly.GetName.Versionpara todos los VB.NETers. Nosotros dos.
edhubbell

También debo compartir mi elogio: esta parte superior de mi historia "muestre el número de revisión en la aplicación para qa" junto con [assembly: AssemblyVersion ("1.0. *")] Obtengo un buen número de compilación. Funciona genial.
nocarrier

4
Para los sitios del API web: @typeof(YourDefaultNamespace.WebApiApplication).Assembly.GetName().Version. Incluso puede funcionar sin el espacio de nombres predeterminado:@typeof(WebApiApplication).Assembly.GetName().Version
Cristian Diaconescu

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version.ToString(3)devuelve 3 de las 4 partes de la versión de montaje si alguien tiene curiosidad. Puede variar entre 0 y 4.
Mafii

1
en dotnet core 2.1 esto funciona para mí: @{Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;}entonces<h1>Ver. @version</h1>
Leonard AB

16

Usar este ayudante funciona para mí:

    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

Esto funciona para mi. Sin necesidad de mencionar explícitamente el tipo.

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

5

Necesita obtener el ensamblaje de un tipo en el proyecto:

typeof(MyType).Assembly.Whatever

¿Dónde MyTypeestá cualquier tipo en el propio proyecto MVC (por ejemplo, un controlador o modelo, o la MvcApplicationclase)?


Esta es en realidad una mejor respuesta que la aceptada en mi opinión, ya que deja en claro que está buscando un tipo que sea parte del ensamblaje de su aplicación. Más o menos explica mejor la causa del problema.
Jim

4

Ampliando la respuesta de takepara, si desea un trazador de líneas para obtener el atributo AssemblyInformationalVersionAttribute de una vista MVC Razor:

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

1

Puede intentar utilizar GetCallingAssembly (). No estoy seguro de si eso es lo suficientemente alto en la pila de llamadas o no, pero dado que Razor en realidad crea un ensamblado para cada vista, es lógico que su aplicación sea el ensamblado de llamada para el ensamblaje de la vista.


La asamblea Get Calling solo sube un nivel en el árbol ... todavía no es bueno
Jay Stevens

0

Mi problema fue que después había cambiado el nombre del espacio de nombres y recibí el error anterior. El problema era la antigua referencia al espacio de nombres en Views \ Web.config. Tuve que cambiarlo de Project.WebAPI17aCompany.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

para un controlador de API utilicé esto en función de otras respuestas

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

-1

Puede obtenerlo usando la propiedad Name de la siguiente manera:

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

¿Es esto lo que estás buscando?


-1

Vaya a Home Controller y simplemente copie este código:

Cambiar nombre ActionResulta String

public string Index()

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

run view
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.