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?

Jay Stevens
fuente

Respuestas:

218

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

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

¿Qué tal esto?

tomar para
fuente
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("");
        }

    }
Arrendajo
fuente
13

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

@ViewContext.Controller.GetType().Assembly.GetName().Version
Haohmaru
fuente
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)?

SLaks
fuente
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
jslatts
fuente
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.

BAKeele
fuente
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>
florian.isopp
fuente
0

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

Version = GetType().Assembly.GetName().Version.ToString()
workabyte
fuente
-1

Puede obtenerlo usando la propiedad Name de la siguiente manera:

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

¿Es esto lo que estás buscando?

matmat
fuente
-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
prashant
fuente