Индекс находился за пределами массива в @Scripts.Render

Для каждого контроллера есть папка (с тем же именем), а для каждого действия - файл script.

Folder structure

Для каждого файла создается пакет, следующий за шаблоном: "~/Scripts/Controllers/{имя-контроллера}/{имя_файла без-расширения}"

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!
И подтвердить это:

Bundle exist

До сих пор так правильно! Пакет существует!

Запуск приложения

При запуске приложения возникает следующая ошибка:

Bundle error

Полное изображение

Неправильно и неэффективно устранить ошибку:

Если я изменю это:

@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

Ответы

Ответ 2

У меня была такая же проблема, и когда я попробовал различную проверку, я обнаружил, что в моем файле css есть селектор, который вызывает проблему:

.glyphicons-icon _: - o-prefocus,   .glyphicons-icon {       background-image: url (../images/glyphicons.png);   }

похоже, что у Microsoft.Ajax.Utilities.CssParser есть проблема с селектором _: css. Я удалил строку и работал.

Ответ 3

Я бы удостоверился, что все элементы вашего

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.

Ответ 4

Я столкнулся с подобной проблемой. Я использую VS 2013 и MVC 5 и обновляюсь до Bootstrap v3.0.1, чтобы использовать тему из Bootswatch. Я обновил все, используя последнюю загрузку Bootstrap, и сайт, казалось, работал нормально. Затем я схватил CSS для Slate с сайта Bootswatch и использовал его в новой таблице стилей, изменил его в StyleBundle и построенном решении. Когда я запустил его, я получил ошибку "Индекс был за пределами массива". Вернитесь к bootstrap.css, и он отлично работает.

Затем я использовал диспетчер пакетов NuGet для обновления всех моих пакетов... Я только что установил VS 2013 и еще не обновил все. Восстановленный решение и wallah, он отлично работает. Поэтому я бы проголосовал за обновление своих пакетов answser.

Ответ 5

Возможно, вам потребуется обновить некоторые из ваших библиотек nuget. Попробуйте обновить WebGrease