ScriptBundle IncludeDirectory文件名最大长度?

时间:2014-08-21 20:06:53

标签: asp.net visual-studio single-page-application asp.net-optimization

启用搜索子目录时,ASP.NET的ScriptBundle .IncludeDirectory方法中是否存在最大文件名长度?

当我包含一个具有长描述性名称的文件然后启动项目时,我的Visual Studio 2013 Professional开始加载所有内容,但是一旦开始加载.js文件,VS就会挂起而不会在浏览器中加载网站。但是,当我修剪我使用.IncludeDirectory的文件夹中的.js文件的较长名称时,它似乎运行良好。但我可能会离开。还有其他人遇到过这种行为吗?你怎么修好它的?

简化示例

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/bundles/angularapp")
         .IncludeDirectory("~/AngularApp", "*.js", true));
}  

文件夹

  • AngularApp
    • 下一个文件夹
      • 包含SuperLongNameOfFileToTellMeWhatItDoes.js - 不能正常工作
      • 包含ShortName.js - 似乎工作

显然,我的项目包含更多文件和比这更深的文件结构。但是我试图从一个非常大的.IncludeDirectory块中明确地包含每个.js文件转换到.Include

1 个答案:

答案 0 :(得分:1)

我有这样的结构:

enter image description here

我试着用这个:

    bundles.Add(new ScriptBundle("~/bundles/myScripts").Include(
        "~/Scripts/ng-google-chart.js",
        "~/Scripts for myapp/my_scripts.js"
        )               
        // WARN: this one fail
        .IncludeDirectory("~/Scripts for myapp/Angular", "*.js", true)
    );

失败了。 如果我在单独的行中使用 IncludeDirectory ,则会失败:

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

Angular目录只包含.js文件,并且没有空目录,除了下划线之外,名称中没有奇怪的字符。

我使用.IncludeDirectory sintax解决了没有searchSubdirectories参数的问题,这是对每个子目录的调用。

ScriptBundle myBundle = bundles.GetBundleFor("~/bundles/myScripts") as ScriptBundle;
myBundle.IncludeDirectory("~/Scripts for myapp/Angular/controllers", "*.js");
myBundle.IncludeDirectory("~/Scripts for myapp/Angular/directives", "*.js");
[...]

它有效,所以路径和文件是正确的。它只是在子目录中搜索失败的方法。

我假设你正在打电话

BundleConfig.RegisterBundles(BundleTable.Bundles);

在Global.asax的Application_Start中。

要查找错误,请尝试附加调试器并在该调用之前的某处放置一个断点。 可能你会有一个 System.Web.HttpException (实际上每个子目录都有一个):

  

文件监控的文件名无效:'[应用程序的路径] \ mywebapp \ myapp \ Angular \ controllers'的脚本。   失败的常见原因包括:    - 文件名不是有效的Win32文件名。    - 文件名不是绝对路径。    - 文件名包含通配符。    - 指定的文件是目录。    - 拒绝访问。

在我的情况下,这些原因似乎都没有效果,我可以使用没有“子文件夹搜索”的方法注册子文件夹的内容。 (提示。要再次触发Application_Start,只需在web.config中添加/删除一个空行。)

请注意,此异常不会阻止ASP引擎,在我的情况下,页面在浏览器中呈现,您只是看不到错误。我注意到它,因为在Application_Start中我做了其他操作而且它们没有被执行。

我不知道错误的真正原因,但这是你如何找到它以及适用于我的解决方法。

提示。要排除Jasmine测试文件,我使用它(在其他命令之后): bundles.IgnoreList.Ignore(“* _ jasmine.js”,OptimizationMode.Always);