ACTUALIZACIÓN: La versión anterior no funcionaba en Azure, he simplificado y corregido a continuación. (Tenga en cuenta que para que esto funcione en modo de desarrollo con IIS Express, necesitará instalar URL Rewrite 2.0 desde Microsoft http://www.iis.net/downloads/microsoft/url-rewrite - usa el instalador WebPi, asegúrese de cerrar Visual Studio primero)
Si desea cambiar los nombres reales de los archivos, en lugar de agregar una cadena de consulta (que es ignorada por algunos proxies/navegadores para archivos estáticos) Puede seguir los siguientes pasos: (Sé que esta es una publicación anterior, pero la encontré mientras desarrollaba una solución :
Cómo hacerlo: Auto-incremento de la versión de montaje cada vez que se genere el proyecto, y usar ese número para un archivo estático enrutado en la re específica fuentes que le gustaría mantener actualizado. (Así que something.js se incluye como algo.v1234.js con 1234 cambiando automáticamente cada vez que se construye el proyecto) - También agregué algunas funcionalidades adicionales para asegurar que los archivos .min.js se usen en producción y se usen archivos regulares.js al depurar (estoy usando WebGrease para automatizar el proceso de minify) Una cosa buena de esta solución es que funciona tanto en modo local/dev como en producción. (Estoy usando Visual Studio 2015/Net 4.6, pero creo que esto va a funcionar en las versiones anteriores, así
. Paso 1: Habilitar incremento automático en el conjunto cuando se construyó En el archivo AssemblyInfo.cs (que se encuentra en la sección "propiedades" de su proyecto de cambiar las siguientes líneas:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
a
[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
Paso 2: Configurar rew url rito en el web.config para los archivos con las babosas versión incrustada (ver paso 3)
En web.config (el principal para el proyecto) añadir las siguientes reglas en la sección <system.webServer>
lo pongo directamente después de la etiqueta </httpProtocol>
final.
<rewrite>
<rules>
<rule name="static-autoversion">
<match url="^(.*)([.]v[0-9]+)([.](js|css))$" />
<action type="Rewrite" url="{R:1}{R:3}" />
</rule>
<rule name="static-autoversion-min">
<match url="^(.*)([.]v[0-9]+)([.]min[.](js|css))$" />
<action type="Rewrite" url="{R:1}{R:3}" />
</rule>
</rules>
</rewrite>
Paso 3: variables de aplicación de configuración para leer su versión actual asamblea y crean babosas versión en sus js y css.
en Global.asax.cs (que se encuentra en la raíz del proyecto) añadir el siguiente código a Application_Start protegida vacío() (después de las líneas de Registro)
// setup application variables to write versions in razor (including .min extension when not debugging)
string addMin = ".min";
if (System.Diagnostics.Debugger.IsAttached) { addMin = ""; } // don't use minified files when executing locally
Application["JSVer"] = "v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString().Replace('.','0') + addMin + ".js";
Application["CSSVer"] = "v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString().Replace('.', '0') + addMin + ".css";
Paso 4: Cambiar enlaces src en la maquinilla de afeitar considera que el uso de las variables de la aplicación que creó en Global.asax.cs
@HttpContext.Current.Application["CSSVer"]
@HttpContext.Current.Application["JSVer"]
por ejemplo, en mi _Layout.cshtml, en mi sección de la cabeza, tengo el siguiente bloque de código de hojas de estilo:
<!-- Load all stylesheets -->
<link rel='stylesheet' href='https://fontastic.s3.amazonaws.com/8NNKTYdfdJLQS3D4kHqhLT/icons.css' />
<link rel='stylesheet' href='/Content/css/[email protected]["CSSVer"]' />
<link rel='stylesheet' media='(min-width: 700px)' href='/Content/css/[email protected]["CSSVer"]' />
<link rel='stylesheet' media='(min-width: 700px)' href='/Content/css/[email protected]["CSSVer"]' />
@RenderSection("PageCSS", required: false)
un par de cosas de aviso aquí: 1) no hay ninguna extensión en el archivo. 2) tampoco hay .min. Ambos son manejados por el código en Global.asax.cs
Del mismo modo, (también en _Layout.cs) en mi sección javascript: Tengo el siguiente código:
<script src="~/Scripts/all3bnd100.min.js" type="text/javascript"></script>
<script src="~/Scripts/[email protected]["JSVer"]" type="text/javascript"></script>
@RenderSection("scripts", required: false)
El primer archivo es una paquete de todas las bibliotecas de terceros que he creado manualmente con WebGrease. Si agrego o cambio alguno de los archivos en el paquete (lo que es raro), renombro manualmente el archivo a all3bnd101.min.js, all3bnd102.min.js, etc ... Este archivo no coincide con el controlador de reescritura, por lo que permanecerá almacenado en caché en el navegador del cliente hasta que vuelva a agrupar/cambiar el nombre manualmente.
El segundo archivo es ui.js (que se escribirá como ui.v12345123.js o ui.v12345123.min.js dependiendo de si se está ejecutando en modo de depuración o no) Esto se manejará/reescribirá. (Se puede establecer un punto de interrupción en Application_OnBeginRequest de Global.asax.cs para ver que funcione)
discusión completa sobre este tema en: Simplified Auto-Versioning of Javascript/CSS in ASP.NET MVC 5 to stop caching issues (works in Azure and Locally) With or Without URL Rewrite(incluyendo una forma de hacerlo sin reescritura de URL)
Honestamente, Si está agrupando, CADA archivo individual significaría entre 2 y 5 archivos minified + bundled. Creo que es una buena solución. – Worthy7