我一直在我的asp.net应用程序中使用Bundling and Minification
概念。我在global.asax
void Application_Start(object sender, EventArgs e)
{
System.Web.Optimization.BundleTable.Bundles.Add(new System.Web.Optimization.ScriptBundle("~/bundle/js")
.Include("~/Scripts/jquery-1.8.2.js",
"~/Scripts/jquery-ui-1.8.24.js",
"~/Scripts/jquery.signalR-2.2.0.js"));
System.Web.Optimization.BundleTable.Bundles.Add(new System.Web.Optimization.ScriptBundle("~/bundle/js1")
.Include("~/Content/Scripts/VerbaTrack.js",
"~/Content/Scripts/Helper.js"));
System.Web.Optimization.BundleTable.Bundles.Add(new System.Web.Optimization.StyleBundle("~/bundle/css")
.Include("~/Content/Css/Demo.css",
"~/Content/Css/Styles.css"));
}
我正在master page
以下列方式引用这些文件
<head runat="server">
<link rel="shortcut icon" type="image/x-icon" href="Content/Images/VerbaTrack.ico"/>
<title>
</title>
<asp:placeholder runat="server">
<%= System.Web.Optimization.Scripts.Render("~/bundle/js") %>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=drawing,places"></script>
<%= System.Web.Optimization.Scripts.Render("~/bundle/js1") %>
<%= System.Web.Optimization.Styles.Render("~/bundle/css") %>
<script src="signalr/hubs"></script>
</asp:placeholder>
正如您所见,我在引用signalr/hubs
jquery.signalR-2.2.0.js
但仍然是抛出以下错误
Error: SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/hubs.
为什么会这样?
答案 0 :(得分:1)
如果脚本没有加载正确的订单(请检查页面源),您可以使用它来确保订单是捆绑包中提供的:
/// <summary>
/// Respect the order of the scripts added
/// </summary>
public class NonOrderingBundleOrderer : IBundleOrderer
{
public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
{
return files;
}
}
然后将包分配给变量,如:
var scripts = new ScriptBundle("~/bundle/js")
.Include("~/Scripts/jquery-1.8.2.js")
.Include("~/Scripts/jquery-ui-1.8.24.js")
.Include("/Scripts/jquery.signalR-2.2.0.js");
然后附加NonOrderingBundleOrderer
并将捆绑包添加到捆绑集合中:
scripts.Orderer = new NonOrderingBundleOrderer();
BundleTable.Bundles.Add(scripts);