所以我正在使用C#.NET构建一个Web应用程序,并希望为文件引用添加一个版本号.例如:
<script src="mysite/scripts/default.123.js"></script>
Run Code Online (Sandbox Code Playgroud)
每次我修改Web应用程序中的文件,包括cshtml,CSS,JS或图像时,是否可以动态增加该版本号?换句话说,我如何首先获得[或创建]版本号?可能吗?
这是为了避免在客户端浏览器上缓存旧副本,尤其是在通过XHR提供服务时.由于我不想花时间解释的原因,我不是要求其他方法,例如dummmy参数,no-cache元标记,datetimestamps,CDN等.
我希望这个数字对应于被修改的文件的最新版本 - 也许"构建版本"不是正确的单词.作为Kyle Trauberman,装配可能会起作用.但是,这是否适用于静态资源的更改,例如HTML或CSS?有什么好方法呢?
为了解决这个问题,我采用了略微不同的方法.我只是附加最后修改日期,而不是使用"版本号".为方便起见,我写了一个帮助方法:
public static HtmlString Script<T>(this HtmlHelper<T> html, string path)
{
var file = html.ViewContext.HttpContext.Server.MapPath(path);
DateTime lastModified = File.GetLastWriteTime(file);
TagBuilder builder = new TagBuilder("script");
builder.Attributes["src"] = path + "?modified=" + lastModified.ToString("yyyyMMddhhmmss");
return new HtmlString(builder.ToString());
}
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中(不确定您是否使用MVC,但在任何一种情况下解决方案都类似),您可以使用:
@Html.Script("/Scripts/common.js")
Run Code Online (Sandbox Code Playgroud)
哪个会输出:
<script src="/Scripts/common.js?modified=20120129025804"></script>
Run Code Online (Sandbox Code Playgroud)
注意: Page Speed对使用查询字符串不满意.但是,我尝试将其更改为使用"/",这导致MVC接管文件的路由,并阻止IIS处理它.不知道如何解决这个问题.