扩展asp.net Bundle

前言

新建Asp.net  MVC4项目的时候,在Global.asax.cs里面发现多了一句代码

BundleConfig.RegisterBundles(BundleTable.Bundles)

google了以后终于弄清楚了这个的作用,发现这个东西确实非常实用,且功能强大,能够压缩合并js和CSS,但是目前的使用起来不是特别好,如果添加js或者css文件的话,需要修改BundleConfig的代码。

这里我自己简单修改了BundleConfig,对这个进行简单的扩展。

下面贴出代码:

先贴配置文件BundleConfig.xml(文件放在网站目录下路径见代码中变量BundleConfigPath)

<?xml version="1.0" encoding="utf-8" ?>
<root>
<Scripts>
<Script Path="~/bundles/jquery">
<File>~/Scripts/jquery-{version}.js</File>
</Script>
<Script Path="~/bundles/jqueryui">
<File>~/Scripts/jquery-ui-{version}.js</File>
</Script>
<Script Path="~/bundles/jqueryval">
<File>~/Scripts/jquery.unobtrusive*</File>
<File>~/Scripts/jquery.validate*</File>
</Script>
<Script Path="~/bundles/modernizr">
<File>~/Scripts/modernizr-*</File>
</Script>
<Script Path="~/bb/aa">
<File>~/Views/Home/addda.js</File>
</Script>
</Scripts>
<Styles>
<Style Path="~/Content/themes/base/css">
<File>~/Content/themes/base/jquery.ui.core.css</File>
<File>~/Content/themes/base/jquery.ui.resizable.css</File>
<File>~/Content/themes/base/jquery.ui.selectable.css</File>
<File>~/Content/themes/base/jquery.ui.accordion.css</File>
<File>~/Content/themes/base/jquery.ui.autocomplete.css</File>
<File>~/Content/themes/base/jquery.ui.button.css</File>
<File>~/Content/themes/base/jquery.ui.dialog.css</File>
<File>~/Content/themes/base/jquery.ui.slider.css</File>
<File>~/Content/themes/base/jquery.ui.tabs.css</File>
<File>~/Content/themes/base/jquery.ui.datepicker.css</File>
<File>~/Content/themes/base/jquery.ui.progressbar.css</File>
<File>~/Content/themes/base/jquery.ui.theme.css</File>
</Style>
<Style Path="~/Content/css">
<File>~/Content/site.css</File>
</Style>
</Styles>
</root>

代码文件:BundleConfig.cs

 

public class BundleConfig
    {
        public static string BundleConfigPath = "~/Config/BundleConfig.xml";
        /// <summary>
        /// Register Bundles From XML
        /// </summary>
        /// <param name="bundles"></param>
        public static void RegisterBundles(BundleCollection bundles)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(HttpContext.Current.Server.MapPath(BundleConfigPath));
            XmlNode root = doc.DocumentElement;
            // Regester Script
            XmlNodeList ScriptList = root.SelectNodes("Scripts/Script");
            if (ScriptList != null && ScriptList.Count > 0)
            {
                foreach (XmlNode node in ScriptList)
                {
                    string path = CheckNodeRegedit(node);
                    if (string.IsNullOrEmpty(path)) continue;
                    var bound = new ScriptBundle(path);
                    List<string> files = GetFilesFormNode(node);
                    if (files.Count > 0)
                    {
                        bound.Include(files.ToArray());
                        bundles.Add(bound);
                    }
                }
            }
            // Regester Style
            XmlNodeList StyleList = root.SelectNodes("Styles/Style");
            if (StyleList != null && StyleList.Count > 0)
            {
                foreach (XmlNode node in StyleList)
                {
                  
                    string path = CheckNodeRegedit(node);
                    if (string.IsNullOrEmpty(path)) continue;
                    var bound = new StyleBundle(path);
                    List<string> files = GetFilesFormNode(node);
                    if (files.Count > 0)
                    {
                        bound.Include(files.ToArray());
                        bundles.Add(bound);
                    }
                }
            }
            doc = null;
        }
        /// <summary>
        /// 如果内容为空则不添加
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        private static List<string> GetFilesFormNode(XmlNode node)
        {
            List<string> files = new List<string>();
            foreach (XmlNode nodeFile in node.ChildNodes)
            {
                if (!string.IsNullOrEmpty(nodeFile.InnerText.Trim()))
                    files.Add(nodeFile.InnerText.Trim());
            }
            return files;
        }
        /// <summary>
        /// 检查注册的Node
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        private static string CheckNodeRegedit(XmlNode node)
        {
            XmlAttribute pathAtt = node.Attributes["Path"];
            string path = string.Empty;
            if (pathAtt == null || string.IsNullOrEmpty(pathAtt.Value.Trim()) || node.ChildNodes.Count == 0)
                return string.Empty;
            else
                return pathAtt.Value.Trim();
        }
    }

posted @ 2012-11-23 18:18  Tom.汤  阅读(634)  评论(0编辑  收藏  举报