ASP.NET 4.5脚本捆绑、未捆绑和未压缩化。

5
我将一个项目从asp.net 3.5升级到了4.5,以便使用JavaScript脚本捆绑和压缩。现在我已经运行了所有脚本,并且它们都出现在我定义的束中,但它们并没有“捆绑”在一起,也没有被压缩。以下是我的代码:
default.aspx 包括以下内容:
<asp:ScriptManager
ID="scriptmanager"
LoadScriptsBeforeUI="false"
runat="server"
    ScriptMode="Release"
    EnableScriptLocalization="false"
>
    <Scripts>
        <%--Framework Scripts--%>
        <asp:ScriptReference Path="~/bundles/MyBundle" ScriptMode="Release"/>
        <%--Site Scripts--%>
    </Scripts>
</asp:ScriptManager>

Global.asax中的Application_Start:

BundleTable.EnableOptimizations = true;
BundleConfig.RegisterBundles(BundleTable.Bundles);

BundleConfig.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;

namespace MyNameSpace
{
    public class BundleConfig
    {
        // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254726
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/MyBundle").Include(
                "~/Scripts/WebForms/WebForms.js",
                "~/Scripts/WebForms/MSAjax/MicrosoftAjax.js",
                "~/Scripts/WebForms/MSAjax/MicrosoftAjaxWebForms.js",
                "~/Scripts/WebForms/TreeView.js",
                "~/Scripts/WebForms/Focus.js",
                "~/Scripts/WebForms/MenuStandards.js"));

        }
    }
}

即使我尝试在scriptmanager和脚本引用中强制使用发布模式,我甚至在web.config中关闭了调试。

<compilation debug="false" batch="true" targetFramework="4.5">

输出仍然是几个引用:
<script src="/MyProj/WebResource.axd?d=pynGkmcFUV13He1Qd6_TZA6EiyQ1YRW47qIzscWLzWU7jP_7DjoC2XbU7kCBkgYcJdoeAwqaVpUMnbWRsvhdMw2&amp;t=634896541540000000" type="text/javascript"></script>
<script src="/MyProj/ScriptResource.axd?d=zvkqIRNUspAvS1yKeFhMb4kS_IY-Q_9Yn_KOfmzKLnliETz8uip5T2BUr1JOPE4XV1bmnifY3Eg8vrX8bPLYT71P0Kf8DwEcoRw5fj2tqHdQSorRXVpasfsMXeJLHbT_alkHjf2wIrgxLzxYvocKIA2&amp;t=12e197aa" type="text/javascript"></script>
<script src="/MyProj/ScriptResource.axd?d=NJmAwtEo3Ipnlaxl6CMhvpbyEkpQU7AWZ3ZOrSRn7cdqTBUwP_3lu0l46EnEFBAkBOoC5I7IpMnx8u7VKe4fESCWGvycDq7dTXHsUSTg-j9u4S2Poz38UkmBa7Ta1cXyZ9DcFfKo7RpgjmNNoFjlZgbsHJEPN_AnazProCOQuws1&amp;t=6119e399" type="text/javascript"></script>
<script src="/MyProj/ScriptResource.axd?d=dwY9oWetJoJoVpgL6Zq8OPgCkw9mWNaQmhnwlbrOgCXqxXAsNin9JxaUjtv38gzHz78sozRMjuXYeM_GE0v4htSt6vWwOO4-gOCLfSt6rVOvxbpcCXCLN9jI7fWPkTL2Eq7a9kcN8S4MasueIxDV0rhf-htD32XuwA259deRSNs1&amp;t=6119e399" type="text/javascript"></script>
<script src="/MyProj/WebResource.axd?d=JoBkLzP19aTuxbWOhHobYmKZKUo0k_GoCFbuT9i-BqZJQhy_7Dl0oCPSUy3hiGltbFyiUTxWBZD-5YWblJpSZg2&amp;t=634896541540000000" type="text/javascript"></script>

我有什么遗漏? 如何使捆绑包中的所有脚本只输出一个引用并压缩代码? 谢谢,J

1
请阅读评论,可能会有帮助。以下是与ASP.NET捆绑和缩小相关的编程内容,包括动态生成的JavaScript。 - Gev
你是如何解决这个问题的? - Furkan Gözükara
2个回答

1

看起来你的<asp:ScriptReference />没有输出bundle。我使用MVC从razor模板引用bundle的方式如下:

@Scripts.Render("~/bundles/lib")

这将导致输出类似于以下内容(请注意 src 属性包括原始捆绑包名称):
<script src="/bundles/lib?v=gGKSj7TFmjDTZAjdEzBrqOOu9aGB6i4Tq0mHfaLUk_c1"></script>

如果您没有使用Razor,可以尝试直接引用System.Web.Optimization.Scripts类来调用Render()方法,而不是使用<asp:ScriptReference />
关于缩小文件大小,您需要向捆绑包添加缩小转换,如下所示:
var myBundle = new ScriptBundle("~/bundles/MyBundle").Include(
                "~/Scripts/WebForms/WebForms.js",
                "~/Scripts/WebForms/MSAjax/MicrosoftAjax.js",
                "~/Scripts/WebForms/MSAjax/MicrosoftAjaxWebForms.js",
                "~/Scripts/WebForms/TreeView.js",
                "~/Scripts/WebForms/Focus.js",
                "~/Scripts/WebForms/MenuStandards.js")
myBundle.Transforms.Add(new JsMinify());
bundles.Add(myBundle);

1
使用 Scripts.Render 替代 ScriptManager
<%: Scripts.Render("~/bundles/MyBundle") %>

或者在代码后面:

System.Web.Optimization.Scripts.Render("~/bundles/MyBundle")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接