21

我不知道我是否做错了什么,但这可能是 MVC4 中的一个错误。我想知道我该如何解决这个问题?

工作场景

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        ScriptBundle scriptBundle = new ScriptBundle("~/js");
        string[] scriptArray =
        {
            "~/content/plugins/jquery/jquery-1.8.2.min.js",
            "~/content/plugins/jquery/jquery-ui-1.9.0.min.js",
            "~/content/plugins/jquery/jquery.validate.min.js",
            "~/content/plugins/jquery/jquery.validate.unobtrusive.min.js",
            "~/content/plugins/bootstrap/js/bootstrap.min.js",
        };
        scriptBundle.Include(scriptArray);
        scriptBundle.IncludeDirectory("~/content/js", "*.js");
        bundles.Add(scriptBundle);

        BundleTable.EnableOptimizations = true;
    }
}

@Scripts.Render("~/js")
转换为(例如 IT WORKS!)
<script src="/js?v=VeCPNK561DZp34yjmWbLrNM35Kf6gaNDl0xsMMC25BQ1"></script>

没有那么多工作场景

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        ScriptBundle scriptBundle = new ScriptBundle("~/js");
        string[] scriptArray =
        {
            "~/content/plugins/jquery/jquery-1.8.2.min.js",
            "~/content/plugins/jquery/jquery-ui-1.9.0.min.js",
            "~/content/plugins/jquery/jquery.validate.min.js",
            "~/content/plugins/jquery/jquery.validate.unobtrusive.min.js",
            "~/content/plugins/bootstrap/js/bootstrap.min.js",
        };
        scriptBundle.Include(scriptArray);
        scriptBundle.IncludeDirectory("~/content/js", "*.js");
        bundles.Add(scriptBundle);

        // BundleTable.EnableOptimizations = true; // I could set it to 'false' for same result, it's false by default
    }
}

@Scripts.Render("~/js")
转换为(例如它不起作用!)
(nothing, couple of empty break lines)

4

2 回答 2

30

如果我的理解是正确的,您应该使用“非最小”JavaScript 文件定义您的捆绑包。当您启用优化时,它将为您交换非最小文件为最小文件:

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        ScriptBundle scriptBundle = new ScriptBundle("~/js");
        string[] scriptArray =
        {
            "~/content/plugins/jquery/jquery-1.8.2.js",
            "~/content/plugins/jquery/jquery-ui-1.9.0.js",
            "~/content/plugins/jquery/jquery.validate.js",
            "~/content/plugins/jquery/jquery.validate.unobtrusive.js",
            "~/content/plugins/bootstrap/js/bootstrap.js",
        };
        scriptBundle.Include(scriptArray);
        scriptBundle.IncludeDirectory("~/content/js", "*.js");
        bundles.Add(scriptBundle);
    }
}

调试时优化设置为 false,但在发布模式下默认为 true。

于 2012-11-19T17:07:11.417 回答
8

是的,它不适用于 *.min.js 之类的文件。

“如果您将一个文件添加到您的包中,该文件的名称以 .min.js 结尾(就像我所做的那样)并且未启用优化(例如,在 web.config 中将调试设置为 true,并且尚未设置 BundleTable.EnableOptimizations为真),此文件将被忽略(即不会在您的 html 中为其生成脚本包含)。”

在这里您可以阅读完整的原始回复: http ://blog.degree.no/2013/06/javascript-file-missing-resource-bundle-asp-net-web-optimization-framework/

于 2013-06-07T07:14:02.637 回答