执行版本控制时未显示的捆绑脚本文件

时间:2014-12-23 18:39:13

标签: c# asp.net-mvc-5 bundling-and-minification

我有一个奇怪的问题,mvc4捆绑包不包括扩展名为.min.js的文件

在我的BundleConfig类中,我声明了

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/Scripts/jquery")
        .Include("~/Scripts/jquery-1.8.0.js"));

    bundles.Add(new ScriptBundle("~/Scripts/mybundle")
        .Include("~/Scripts/myscript.js?v=" + DateTime.Today.ToShortDateString().Replace("/", "").Replace(" ", ""));
}

在我看来,我宣布

<html>
    <head>
    @Scripts.Render("~/Scripts/jquery")
    @Scripts.Render("~/Scripts/mybundle")
    </head><body>test</body>
</html>

当它呈现时,它只呈现

<html>
    <head>
         <script src="/Scripts/jquery-1.8.0.js"></script>
    </head>
    <body>test</body>
</html>

如果我从脚本〜/ Scripts / myscript.js中删除版本控制(并相应地更新bundle中的路径),则会正确呈现这两个脚本。

是否有一些配置设置导致其忽略&#39;版本控制&#39;文件?

2 个答案:

答案 0 :(得分:0)

MVC Bundling已经在其实现中包含了版本控制。它附加一个唯一的标记作为查询字符串。例如:

http://example.com/Scripts/mybundle?v=igXMB2ssiFEYs6OHiNIHZ080TnQY5Z997l4s1pyJMPs1

每次打开捆绑包中的脚本时,都会生成新令牌。因此,这可确保您的客户收到最新内容。

顺便说一下,为了激活捆绑,请在BundleConfig添加以下内容:

BundleTable.EnableOptimizations = true;

答案 1 :(得分:0)

我们用于捆绑的sysnax(正如您在代码中所做的那样)是

bundles.Add(new ScriptBundle("~/Scripts/urlToYourBundledJs")
    .Include("~/Scripts/yourIndividualScript.js"));

如果要强制从客户端更新脚本,可以在URL中添加版本,而不是文件名。例如,您可以在视图文件中执行以下操作

@Scripts.Render("~/Scripts//urlToYourBundledJs?v=" + DateTime.Today.ToShortDateString().Replace("/", "").Replace(" ", ""))

因此,每次你的html请求脚本时,它都会要求更新一个(每天一次,根据你的脚本)。但是,注意这将停止捆绑包的自动版本控制!哪个不值得推荐。

如果您的目的是始终获取更新的脚本,只需删除您的版本控制部件,框架将处理所有事情。优化框架生成的版本ID实际上是包含的所有文件的哈希值。因此,每次更新任何文件内容时,都会重新生成版本,以便客户端自动获取最新的脚本:)

另一方面,如果您想手动维护每个文件的版本,可以在捆绑包中使用{version}通配符

bundles.Add(new ScriptBundle("~/Scripts/urlToYourBundledJs")
    .Include("~/Scripts/yourIndividualScript-{version}.js"));

框架将自动选择最新版本。比如,如果脚本文件夹中有两个文件

yourIndividualScript-1.6.js
yourIndividualScript-2.3.js

仅使用yourIndividualScript-2.3.js。因此,您只需添加新版本3.0即可在下次使用。