如何在asp.net webforms捆绑中将cdN添加到bundle.config

时间:2013-03-27 22:50:57

标签: asp.net bundling-and-minification asp.net-optimization

我正在使用asp.net捆绑/缩小并将所有内容放在bundle.config中,如下所示:

<styleBundle path="~/css/css">
  <include path="~/css/bootstrap.css" />
  <include path="~/css/flexslider.css" />
  <include path="~/css/font-awesome.css" />
  <include path="~/css/Site.css" />
  <include path="~/css/orange.css" />
</styleBundle>

但我想使用CDN中的bootstrap.css:

//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css

那么我们怎样才能在bundle.config中执行此操作?

3 个答案:

答案 0 :(得分:4)

目前,您无法混合和匹配并从外部源(如cdn)中提取捆绑包中的某些文件。您可以将整个捆绑包上传到CDN并配置帮助程序以在CDN中呈现对捆绑包的引用,但是您不能包含来自外部源的文件,这些文件必须位于您的应用程序可以找到的位置。

您可以通过实现能够在运行时从CDN获取文件的VirtualPathProvider解决此问题,但您必须自己构建它。

答案 1 :(得分:0)

您不能混合使用捆绑包,但可以在boundle配置中包含外部源。

这是一个从here中挑选的例子,如randomidea指出的那样。

public static void RegisterBundles(BundleCollection bundles)
{
    //bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
    //            "~/Scripts/jquery-{version}.js"));

    bundles.UseCdn = true;   //enable CDN support

    //add link to jquery on the CDN
    var jqueryCdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js";

    bundles.Add(new ScriptBundle("~/bundles/jquery",
            jqueryCdnPath).Include(
            "~/Scripts/jquery-{version}.js"));

// Code removed for clarity.
}

我们需要启用CDN,为此我们将UseCdn设置为true,并在ScriptBundle构造函数中添加url。 include文件将在调试模式下使用。

正如文章所述,我们需要有一个回退机制,以防我们的CDN失败:

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

    <script type="text/javascript">
        if (typeof jQuery == 'undefined') {
            var e = document.createElement('script');
            e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")';
            e.type = 'text/javascript';
            document.getElementsByTagName("head")[0].appendChild(e);

        }
    </script> 

希望这有帮助。

答案 2 :(得分:-1)

ASP.NET文档可能能够帮助您 - http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification,有一个名为使用CDN 的部分。