Search code examples
c#asp.netbundlevirtual-path

Joint different Bundles Virtual Path into single one


I have several Bundles Virtual Paths defined on the BundleConfig.config where each one have associated several javascript path files.

What I want is to join all this virtual paths in a single one.

For instance, I have the following code:

bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.Main).Include(
                                "~/Scripts/EditorV2/main.js"
                    ));

bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.Main2).Include(
                                "~/Scripts/EditorV2/main2.js"
                    ));

bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.Main3).Include(
                                "~/Scripts/EditorV2/main3.js"
                    ));

And what I want is a away to do something like this:

bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.AllScripts).Include(
                            BundlesVirtualPaths.EditorV2.Main,
                            BundlesVirtualPaths.EditorV2.Main2,
                            BundlesVirtualPaths.EditorV2.Main3
                ));

This can be done? I can I do it?


Solution

  • You can try something like this:

    public static class BundleHelpers
    {
        public static BundleCollection JoinScriptBundle(this BundleCollection bundleCollection, string virtualPath, params string[] bundlesToJoin)
        {
            var bundleResolver = new BundleResolver(bundleCollection);
            Bundle allScriptBundle = new ScriptBundle(virtualPath);
            foreach (var bundle in bundlesToJoin)
            {
                foreach (var scriptPath in bundleResolver.GetBundleContents(bundle))
                {
                    allScriptBundle = allScriptBundle.Include(scriptPath);
                }
            }
            bundleCollection.Add(allScriptBundle);
            return bundleCollection;
        }
    }
    

    Then you can join your bundles:

    bundles.JoinScriptBundle("~/bundle/allscript", "~/bundles/jquery", "~/bundles/jqueryval", "~/bundles/modernizr");