C# 将不同的捆绑包虚拟路径合并为一个虚拟路径

C# 将不同的捆绑包虚拟路径合并为一个虚拟路径,c#,asp.net,bundle,virtual-path,C#,Asp.net,Bundle,Virtual Path,我在BundleConfig.config上定义了多个bundle虚拟路径,其中每个虚拟路径都关联了多个javascript路径文件 我想要的是将所有这些虚拟路径连接到一个虚拟路径中 例如,我有以下代码: bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.Main).Include( "~/Scripts/EditorV2/main.js"

我在
BundleConfig.config
上定义了多个bundle虚拟路径,其中每个虚拟路径都关联了多个javascript路径文件

我想要的是将所有这些虚拟路径连接到一个虚拟路径中

例如,我有以下代码:

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"
                    ));
我想要的是一个远走高飞的人做这样的事情:

bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.AllScripts).Include(
                            BundlesVirtualPaths.EditorV2.Main,
                            BundlesVirtualPaths.EditorV2.Main2,
                            BundlesVirtualPaths.EditorV2.Main3
                ));
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;
    }
}

这可以做到吗?我能做吗?

您可以尝试以下方法:

bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.AllScripts).Include(
                            BundlesVirtualPaths.EditorV2.Main,
                            BundlesVirtualPaths.EditorV2.Main2,
                            BundlesVirtualPaths.EditorV2.Main3
                ));
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;
    }
}
然后,您可以加入您的捆绑包:

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

是的,您可以这样做,因为您正试图将所有
JS
文件合并到一个
捆绑包中,这是正确的方法,但可能不会每次都出现相同的情况。因此,您需要根据类型进行绑定,如下所示

对于目录:

 bundles.Add(new Bundle("~/js/vendor").IncludeDirectory(@"~/Scripts/vendors/JQuery", "*.js")
                                                     .IncludeDirectory(@"~/Scripts/vendors/Knockout", "*.js")
                                                     .IncludeDirectory(@"~/Scripts/vendors", "*.js"));
 bundles.Add(new Bundle("~/js/kendo").Include("~/Scripts/kendo/kendo.core.min.js")
                                        .Include("~/Scripts/kendo/kendo.data.min.js")
                                        .Include("~/Scripts/kendo/kendo.binder.min.js")
                                        .Include("~/Scripts/kendo/kendo.calendar.min.js")
var CdnPath = "http://fonts.googleapis.com/css?family=Open+Sans:300";
bundles.Add(new ScriptBundle("mybarbundle", CdnPath).Include("~/Scripts/jquery-{version}.js"));
对于文件:

 bundles.Add(new Bundle("~/js/vendor").IncludeDirectory(@"~/Scripts/vendors/JQuery", "*.js")
                                                     .IncludeDirectory(@"~/Scripts/vendors/Knockout", "*.js")
                                                     .IncludeDirectory(@"~/Scripts/vendors", "*.js"));
 bundles.Add(new Bundle("~/js/kendo").Include("~/Scripts/kendo/kendo.core.min.js")
                                        .Include("~/Scripts/kendo/kendo.data.min.js")
                                        .Include("~/Scripts/kendo/kendo.binder.min.js")
                                        .Include("~/Scripts/kendo/kendo.calendar.min.js")
var CdnPath = "http://fonts.googleapis.com/css?family=Open+Sans:300";
bundles.Add(new ScriptBundle("mybarbundle", CdnPath).Include("~/Scripts/jquery-{version}.js"));
用于url:

 bundles.Add(new Bundle("~/js/vendor").IncludeDirectory(@"~/Scripts/vendors/JQuery", "*.js")
                                                     .IncludeDirectory(@"~/Scripts/vendors/Knockout", "*.js")
                                                     .IncludeDirectory(@"~/Scripts/vendors", "*.js"));
 bundles.Add(new Bundle("~/js/kendo").Include("~/Scripts/kendo/kendo.core.min.js")
                                        .Include("~/Scripts/kendo/kendo.data.min.js")
                                        .Include("~/Scripts/kendo/kendo.binder.min.js")
                                        .Include("~/Scripts/kendo/kendo.calendar.min.js")
var CdnPath = "http://fonts.googleapis.com/css?family=Open+Sans:300";
bundles.Add(new ScriptBundle("mybarbundle", CdnPath).Include("~/Scripts/jquery-{version}.js"));

你不明白我的问题。我想要的是,给定多个虚拟路径(每个路径都有多个关联的脚本路径),我希望将它们和所有文件关联到一个新的虚拟路径,以便节省将所有脚本路径连接到一个新的虚拟路径的时间