【问题标题】:Index was outside the bounds of the array in @Scripts.Render索引在@Scripts.Render 中的数组范围之外
【发布时间】:2013-05-02 02:12:44
【问题描述】:

每个控制器都有一个文件夹(同名控制器),每个动作都有一个脚本文件。

为每个文件创建一个遵循模式的包:"~/Scripts/Controllers/{controller-name}/{filename-without-extension}"

bundles.IncludePerFile(new DirectoryInfo(server.MapPath("~/Scripts/Controllers")), "~/Scripts/Controllers/{0}/{1}", 
    (dir,file) => string.Format("~/Scripts/Controllers/{0}/{1}", dir, Path.GetFileNameWithoutExtension(file)), "*.js");

IncludePerFile 是我为执行此任务而创建的扩展方法

那么应该存在一个用于:~/Scripts/Controllers/processos/pasta 的包!
并确认这一点:

到目前为止都是正确的!捆绑包存在!

正在运行的应用程序

当我运行应用程序时,出现以下错误:

Full image

错误且低效的错误修复:

如果我改变这个:

@Scripts.Render("~/Scripts/Controllers/processos/pasta")

到这里:

@Scripts.Render("~/Scripts/Controllers/processos/pasta.js")

不会产生错误。但是文件没有被缩小,因为实际上有一个包。 (我已经进入发布模式并发布了应用程序!)

完全错误

Index was outside the bounds of the array.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IndexOutOfRangeException: Index was outside the bounds of the array.

Source Error: 


Line 3:  @section js {
Line 4:     @*@Scripts.Render("~/Scripts/Controllers/processos/Pasta.js", "~/Scripts/Controllers/processos/display.js")*@
Line 5:     @Scripts.Render("~/Scripts/Controllers/processos/pasta")
Line 6:     @Scripts.Render("~/Scripts/Controllers/processos/display.js")
Line 7:  

Source File: w:\Clients\creditoimobiliariobb\sistema\src\CreditoImobiliarioBB\CreditoImobiliarioBB.Web\Views\processos\display.cshtml    Line: 5 

Stack Trace: 


[IndexOutOfRangeException: Index was outside the bounds of the array.]
   System.String.get_Chars(Int32 index) +0
   Microsoft.Ajax.Utilities.CssParser.Append(Object obj, TokenType tokenType) +402
   Microsoft.Ajax.Utilities.CssParser.AppendCurrent() +74
   Microsoft.Ajax.Utilities.CssParser.SkipToClose() +744
   Microsoft.Ajax.Utilities.CssParser.SkipToEndOfStatement() +232
   Microsoft.Ajax.Utilities.CssParser.ParseRule() +574
   Microsoft.Ajax.Utilities.CssParser.ParseStylesheet() +1235
   Microsoft.Ajax.Utilities.CssParser.Parse(String source) +897
   Microsoft.Ajax.Utilities.Minifier.MinifyStyleSheet(String source, CssSettings settings) +419
   System.Web.Optimization.CssMinify.Process(BundleContext context, BundleResponse response) +302
   System.Web.Optimization.Bundle.ApplyTransforms(BundleContext context, String bundleContent, IEnumerable`1 bundleFiles) +207
   System.Web.Optimization.Bundle.GenerateBundleResponse(BundleContext context) +355
   System.Web.Optimization.Bundle.GetBundleResponse(BundleContext context) +104
   System.Web.Optimization.BundleResolver.GetBundleContents(String virtualPath) +254
   System.Web.Optimization.AssetManager.EliminateDuplicatesAndResolveUrls(IEnumerable`1 refs) +435
   System.Web.Optimization.AssetManager.DeterminePathsToRender(IEnumerable`1 assets) +1029
   System.Web.Optimization.AssetManager.RenderExplicit(String tagFormat, String[] paths) +75
   System.Web.Optimization.Scripts.RenderFormat(String tagFormat, String[] paths) +292
   System.Web.Optimization.Scripts.Render(String[] paths) +51

【问题讨论】:

  • 你找到答案了吗?
  • 我收到此错误。恶意包包括标准 MVC5 Bootstrap js 资产。
  • 答案太简单了 :) 你必须更新你的包(Microsoft Web Optimization & WebGrease)fsou1.com/…

标签: asp.net-mvc-4 asp.net-optimization


【解决方案1】:

我在这个问题中遇到了同样的错误:StyleBundle Index was outside the bounds of the array

答案很简单:您必须更新您的 Microsoft Web OptimizationWebGrease 软件包(此时为 1.1.2 和 1.6.0 版本)

【讨论】:

    【解决方案2】:

    我会验证你的所有元素

    IncludePerFile(new DirectoryInfo(server.MapPath("~/Scripts/Controllers")), "~/Scripts/Controllers/{0}/{1}", 
    (dir,file) => string.Format("~/Scripts/Controllers/{0}/{1}", dir, Path.GetFileNameWithoutExtension(file)), "*.js") 
    

    所创建的捆绑包完全符合您的想法。

    当捆绑包中包含错误类型的文件时,我在运行时收到此错误。即

    @Styles.Render("~/bundles/myStyleBundle");
    

    实际上包含一个 JavaScript 文件。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,当我尝试不同的检查时,我发现我的 css 文件中有一个像这样的选择器导致了问题:

      .glyphicons-icon _:-o-prefocus, .glyphicons-icon { 背景图像:url(../images/glyphicons.png); }

      似乎 Microsoft.Ajax.Utilities.CssParser 的 _: css 选择器有问题。我删除了这条线,它正在工作。

      【讨论】:

      • 非常感谢,我使用的是从他们的网站下载的自定义引导程序,它有这个选择器。 css选择器会导致黄屏死机似乎很奇怪,但我想这是对css的解析。
      【解决方案4】:

      我刚刚遇到了类似的问题。我正在使用 VS 2013 和 MVC 5,并且正在更新到 Bootstrap v3.0.1,以便使用来自 Bootswatch 的主题。我使用最新的 Bootstrap 下载更新了所有内容,并且该站点似乎运行良好。然后,我从 Bootswatch 站点获取 Slate 的 CSS 并将其用于新样式表,在 StyleBundle 中对其进行更改并构建解决方案。当我运行它时,我得到“索引超出数组范围”错误。切换回 bootstrap.css,它运行良好。

      然后我使用 NuGet 包管理器来更新我的所有包...我刚刚安装了 VS 2013,还没有更新所有内容。重建解决方案和wallah,效果很好。所以我会投票更新你的包答案。

      【讨论】:

        【解决方案5】:

        您可能需要更新一些 nuget 库。尝试更新 WebGrease

        【讨论】:

          【解决方案6】:

          我正在使用

          @Scripts.Render()
          

          对我来说,这是 JS 文件中的 backtik 的问题。

          示例 1

              let something = `some text
          bla bla
          `;
          

          上面的代码抛出了这个异常

           Index and length must refer to a location within the string.
          

          示例 2

          let something = `some text
          bla bla`;
          

          现在效果很好,所以不要在新行的开头保留结束的 backtik ...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-11-26
            • 2012-11-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多