启用搜索子目录时,ASP.NET的ScriptBundle .IncludeDirectory方法中是否存在最大文件名长度?
当我包含一个具有较长描述名的文件,然后启动该项目时,我的VisualStudio2013Professional将开始加载所有内容,但一旦它开始加载.js文件,VS就会挂起,而不会在浏览器中加载网站。但是,当我在我使用过的.js文件夹中修剪较长的.IncludeDirectory文件名时,它似乎工作得很好。但我可以走了。还有其他人遇到过这种行为吗?你是怎么修好的?
简化示例
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/angularapp")
.IncludeDirectory("~/AngularApp", "*.js", true));
} 文件夹
显然,我的项目包含了比这更多的文件和更深的文件结构。但是,我正在尝试从显式地将每个.js文件包含在一个非常大的.Include块中转换为.Include。
发布于 2016-11-06 11:44:47
我有这样的结构:

我试着用这个:
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")角目录只包含.js文件,没有空目录,除了下划线之外,名字中也没有奇怪的字符。
我使用没有searchSubdirectories参数的.IncludeDirectory sintax来解决问题,这是对每个子目录的调用.
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);在Application_Start of Global.asax .
若要查找错误,请尝试附加调试器,并在该调用之前的某个位置放置一个断点。您可能会有一个System.Web.HttpException (实际上每个子目录都有一个),上面写着:
用于文件监视的无效文件名:“到应用程序的路径\mywebapp\myapp的脚本\角\控制器”。失败的常见原因包括:-文件名不是有效的Win32文件名。-文件名不是绝对路径。-文件名包含通配符。-指定的文件是一个目录。-不准进入。
在我的例子中,这些原因似乎都不成立,我可以使用该方法注册子文件夹的内容,而不需要“子文件夹搜索”。(小费)要使Application_Start再次触发,只需在web.config中添加/删除空行即可。)
请注意,此异常不会阻止ASP引擎,在我的示例中,页面是在浏览器中呈现的,您只是没有看到错误。我注意到了这一点,因为在Application_Start中,我会执行其他操作,而它们不会被执行。
我不知道这个错误的真正原因,但这就是你如何找到它和对我有用的解决办法。
小费。为了排除茉莉花测试文件,我使用以下(在其他命令之后):bundles.IgnoreList.Ignore("*_jasmine.js",OptimizationMode.Always);
https://stackoverflow.com/questions/25435030
复制相似问题