Asp.net MVC强制更新捆绑包中的javascript文件
在开发网页时,每次更改.js引用后,我通常都会包含一个参数,以强制浏览器获取新版本,并防止其与旧版本保持一致 例如,如果我的参考是这样的:Asp.net MVC强制更新捆绑包中的javascript文件,asp.net,asp.net-mvc,bundle,Asp.net,Asp.net Mvc,Bundle,在开发网页时,每次更改.js引用后,我通常都会包含一个参数,以强制浏览器获取新版本,并防止其与旧版本保持一致 例如,如果我的参考是这样的: <script src="myfile.js" /> bundles.Add(new ScriptBundle("~/bundles/global").Include( "~/Scripts/jquery-{version}.js", 我尝试了下面的代码,但没有成功。在这种情况下,如何强制浏览器再次下载脚本
<script src="myfile.js" />
bundles.Add(new ScriptBundle("~/bundles/global").Include(
"~/Scripts/jquery-{version}.js",
我尝试了下面的代码,但没有成功。在这种情况下,如何强制浏览器再次下载脚本
bundles.Add(new ScriptBundle("~/bundles/global").Include(
"~/Scripts/my/global.js?ver=2",
就我个人而言,我无法忍受捆绑程序,而且总是手动管理我的脚本。 因此,这个答案可能不是您想要的,但有助于解决每次手动更新
?ver=#
的问题
创建一个类,可能是FileVersionRepo
,该类在应用程序启动时(在Global.asax
内部)将包含一个私有静态字典,其中键是一个文件名,值是FileInfo.LastWriteTime.ToFileTime().ToString()
值。当应用程序池重新启动或应用程序发布时,这将仅读取文件的lastWriteTime一次
这对于CSS文件也很方便
public static class FileVersionRepo {
private static Object _lock = new Object();
private static Dictionary<string,string> fileVals = new Dictionary<string,string>();
public string GetVal(string key) { return fileVals[key]; }
public string SetVal(string key, string path) {
lock (_lock)
{
var fileInfo = new FileInfo(path);
if (fileInfo.Exists)
FileWriteTimes[key] = fileInfo.LastWriteTime.ToFileTime().ToString();
else
return;// maybe throw exception here?
}
}
}
那么在你看来,
using FileVersionRepo;
<script src="global.js?ver=@FileVersionRepo.GetVal("global.js")"><script>
使用FileVersionRepo;
默认的MVC项目创建一个jquery包,如下所示
我想你的包裹应该是这样的:
<script src="myfile.js" />
bundles.Add(new ScriptBundle("~/bundles/global").Include(
"~/Scripts/jquery-{version}.js",
希望有帮助
bundles.Add(new ScriptBundle("~/bundles/global").Include(
"~/Scripts/jquery-{version}.js",