Asp.net MVC强制更新捆绑包中的javascript文件

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", 我尝试了下面的代码,但没有成功。在这种情况下,如何强制浏览器再次下载脚本

在开发网页时,每次更改.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",