renderbody página plantillas para net método mvc mezclar llamado diseño bootstrap asp agregar asp.net-mvc visual-studio-2010 asp.net-mvc-2 versioning

asp.net-mvc - página - plantillas bootstrap para asp net



No se puede obtener la versión de montaje para el pie de página (4)

Estoy usando la versión de compilación automática mencionada en esta pregunta (no la respuesta seleccionada, sino la respuesta que usa la técnica [assembly: AssemblyVersion("1.0.*")] ). Hago esto en el pie de página de mi archivo Site.Master en MVC 2. Mi código para hacer esto es el siguiente:

<div id="footer"> <a href="emailto:[email protected]">[email protected]</a> - Copyright © 2005-<%= DateTime.Today.Year.ToString() %>, foo LLC. All Rights Reserved. - Version: <%= Assembly.GetEntryAssembly().GetName().Version.ToString() %> </div>

La excepción que recibo es una Object reference not set to an instance of an object porque GetEntryAssembly() devuelve NULL . Mis otras opciones tampoco funcionan. GetCallingAssembly() siempre devuelve "4.0.0.0" y GetExecutingAssembly() siempre devuelve "0.0.0.0". Cuando voy a ver mi DLL, todo está versionando como es de esperar. ¡¡Pero no puedo entender cómo acceder a él para mostrar en mi pie de página !!


Al igual que otra solución que puede interesar a la gente, he inventado a estos ayudantes para ayudar con este problema:

public static class HtmlHelperExtensions { private static string _CachedCurrentVersionDate; /// <summary> /// Return the Current Version from the AssemblyInfo.cs file. /// </summary> public static string CurrentVersion(this HtmlHelper helper) { try { var version = Assembly.GetExecutingAssembly().GetName().Version; return version.ToString(); } catch { return "?.?.?.?"; } } public static string CurrentVersionDate(this HtmlHelper helper) { try { if (_CachedCurrentVersionDate == null) { // Ignores concurrency issues - assuming not locking this is faster than // locking it, and we don''t care if it''s set twice to the same value. var version = Assembly.GetExecutingAssembly().GetName().Version; var ticksForDays = TimeSpan.TicksPerDay * version.Build; // days since 1 January 2000 var ticksForSeconds = TimeSpan.TicksPerSecond * 2 * version.Revision; // seconds since midnight, (multiply by 2 to get original) _CachedCurrentVersionDate = new DateTime(2000, 1, 1).Add(new TimeSpan(ticksForDays + ticksForSeconds)).ToString(); } return _CachedCurrentVersionDate; } catch { return "Unknown Version Date"; } } }

Esto permite el consumo de la siguiente manera en su pie de página:

Version: <%= Html.CurrentVersion() %> from <%= Html.CurrentVersionDate() %>


Esto se debe a que Assembly.GetEntryAssembly() devuelve un valor nulo: no hay un ensamblaje de "entrada" en un sitio ASP.NET (porque el marco .NET está alojado en el proceso w3wp.exe). Assembly.GetEntryAssembly() se usa para obtener el ensamblado .exe que ejecutó (generalmente en una consola o aplicación de Windows)

La razón por la que Assembly.GetAssembly(this.GetType()) está devolviendo un ensamblaje con la versión "0.0.0.0" es porque ASP.NET compila su archivo Site.Master en un ensamblaje temporal bajo su carpeta "Archivos Temporales ASP.NET". this es una referencia a la clase "generada".

Assembly.GetExecutingAssembly() es básicamente lo mismo que Assembly.GetAssembly(this.GetType()) (excepto que también funciona cuando no hay "this" (por ejemplo, en métodos estáticos).

La mejor manera sería usar explícitamente un tipo que sepa que existe en el ensamblaje que está buscando. Como ejemplo, asumo que su "Site.Master" tiene un archivo de código subyacente que se compila en el ensamblaje. Puedes usar eso en su lugar:

Assembly.GetAssembly(typeof(Site)).GetName().Version.ToString()

(asumiendo que el nombre de la clase es Site )


Si ya tiene Global.asax en su lugar, podría ser un buen lugar para almacenar la versión global una vez.

Global.asax.cs:

public class Global : HttpApplication { public static readonly Version Version = Assembly.GetExecutingAssembly().GetName().Version; }

Tu vista:

<div>- Version: @YourNamespace.Global.Version</div>


Usted puede:

por ejemplo, en su método Application_Start en Global.asax agregar archivo

protected void Application_Start(object sender, EventArgs e) { HttpContext.Current.Application.Add("Version", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()); }

en HTML mostrarlo por

<div><% =HttpContext.Current.Application["Version"].ToString() %></div>

TAMBIÉN Cambie la versión de ensamblaje a 1.0.0. * Accediendo a - Propiedades del proyecto> Aplicación> Información de ensamblaje y la versión de ensamblaje se muestra como 1.0.0.0 - cámbiela a 1.0.0. *

esto te dará algunas versiones