ASP.NET MVC 4捆绑带文件夹路径中的通配符

Dav*_*edy 8 asp.net-mvc bundle jquery-ui asp.net-mvc-4

我的团队使用自定义NuGet包来安装jQuery UI,它将主题文件放入如下目录结构:

  • 内容
    • jQuery的UI-1.10.3
      • 图片
      • jQuery的ui.css
      • jQuery的ui.min.css

我正在尝试使用ASP.NET MVC 4包将此内容包含在我的应用程序的App_Start文件夹中的BundleConfig类中,如下所示:

bundles.Add( new StyleBundle( "~/bundles/css" )
                 .Include( "~/Content/normalize-{version}.css",
                           "~/Content/jquery-ui-{version}/jquery-ui.css",
                           "~/Content/Site.css" ) );
Run Code Online (Sandbox Code Playgroud)

这会在我运行网站时抛出错误:

Directory does not exist.
Parameter name: directoryVirtualPath
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

bundles.Add( new StyleBundle( "~/bundles/css" )
                 .Include( "~/Content/normalize-{version}.css" )
                 .IncludeDirectory( "~/Content/jquery-ui-*", "*.css" )
                 .Include( "~/Content/Site.css" ) );
Run Code Online (Sandbox Code Playgroud)

这显然也不起作用.我可以在文件夹上明确指定版本,但这会破坏使用捆绑包的部分好处.

那么如何在文件夹路径中使用通配符呢?

Row*_*man 6

您可以使用其重载版本IncludeDirectory搜索子目录.

假设您有以下文件:

\Root\Content\jquery-ui-1.10.3\jquery-ui.css

使用此代码查找并添加它:

.IncludeDirectory("~/Content", "jquery-ui.css", true)
Run Code Online (Sandbox Code Playgroud)

这很有用,因为它总能找到jquery-ui.css,无论你把它放在哪里.

此方法的缺点是它将搜索并包含它找到的所有 jquery-ui.css文件,如果您不确保只jquery-ui.css存在一个文件,则可能会导致一些错误.

(请记住,搜索子目录也会搜索根目录,即〜/ Content)