Объединение MVC — не удалось загрузить ресурс

Что может быть причиной этого? Я работаю с проектом DurandalJS, который отлично строится и работает локально. Когда я пытаюсь выполнить развертывание на веб-сайте Azure, приложение публикуется, но в браузере происходит сбой:

Не удалось загрузить ресурс: сервер ответил со статусом 404 (не найдено) http://appsite.azurewebsites.net/Scripts/vendor.js?v=KJCisWMhJYMzhLi_jWQXizLj9vHeNGfm_1c-uTOfBOM1

Я не настраивал ни одну из комплектаций.

мои конфигурации пакета:

public class BundleConfig
{
    // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                    "~/Scripts/jquery-ui-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));

        // Use the development version of Modernizr to develop with and learn from. Then, when you're
        // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
        bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                    "~/Scripts/modernizr-*"));

        bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

        bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                    "~/Content/themes/base/jquery.ui.core.css",
                    "~/Content/themes/base/jquery.ui.resizable.css",
                    "~/Content/themes/base/jquery.ui.selectable.css",
                    "~/Content/themes/base/jquery.ui.accordion.css",
                    "~/Content/themes/base/jquery.ui.autocomplete.css",
                    "~/Content/themes/base/jquery.ui.button.css",
                    "~/Content/themes/base/jquery.ui.dialog.css",
                    "~/Content/themes/base/jquery.ui.slider.css",
                    "~/Content/themes/base/jquery.ui.tabs.css",
                    "~/Content/themes/base/jquery.ui.datepicker.css",
                    "~/Content/themes/base/jquery.ui.progressbar.css",
                    "~/Content/themes/base/jquery.ui.theme.css"));
    }
}

DurandalBundleConfig:

public class DurandalBundleConfig {
public static void RegisterBundles(BundleCollection bundles) {
  bundles.IgnoreList.Clear();
  AddDefaultIgnorePatterns(bundles.IgnoreList);

  bundles.Add(
    new ScriptBundle("~/Scripts/vendor.js")
        .Include("~/Scripts/jquery-{version}.js")
        .Include("~/Scripts/jquery-ui-{version}.js")
        .Include("~/Scripts/bootstrap.js")
        .Include("~/Scripts/knockout-{version}.js")
        .Include("~/Scripts/knockout.mapping-latest.js")
         .Include("~/Scripts/isotope.js")
          .Include("~/Scripts/toastr.js")
          .Include("~/Scripts/tag-it.js")
    );

  bundles.Add(
    new StyleBundle("~/Content/css")
      .Include("~/Content/ie10mobile.css")
      .Include("~/Content/app.css")
      .Include("~/Content/bootstrap.min.css")
      .Include("~/Content/bootstrap-responsive.min.css")
      .Include("~/Content/font-awesome.min.css")
      .Include("~/Content/durandal.css")
      .Include("~/Content/starterkit.css")
       .Include("~/Content/toastr.css")
       .Include("~/Content/tag-it.css")
       .Include("~/Content/zen-theme.css")
    );
}

public static void AddDefaultIgnorePatterns(IgnoreList ignoreList) {
  if(ignoreList == null) {
    throw new ArgumentNullException("ignoreList");
  }

  ignoreList.Ignore("*.intellisense.js");
  ignoreList.Ignore("*-vsdoc.js");
  ignoreList.Ignore("*.debug.js", OptimizationMode.WhenEnabled);
  //ignoreList.Ignore("*.min.js", OptimizationMode.WhenDisabled);
  //ignoreList.Ignore("*.min.css", OptimizationMode.WhenDisabled);
}
} 

На моей html-странице я использую это:

@Scripts.Render("~/Scripts/vendor.js")

Это предотвращает загрузку необходимых библиотек (например, Knockout). Может ли это быть что-то в моем web.comfig? Любые советы были бы потрясающими.

ОБНОВЛЕНИЕ:

Я могу воспроизвести точную проблему локально, если сделаю следующее:

new ScriptBundle("~/Scripts/vvendor.js")  // change the virtual output directory here

Я думаю, это означает, что представление не может найти каталог, когда оно опубликовано по какой-то причине...


person RobVious    schedule 24.08.2013    source источник


Ответы (5)


Избавьтесь от части «.js» в имени ScriptBundle. По какой-то причине это вызывает кучу проблем. Это должно быть так:

...
new ScriptBundle("~/Scripts/vendor")
...

Затем добавьте его на свою страницу следующим образом:

@Scripts.Render("~/Scripts/vendor")
person Brett    schedule 27.08.2013

1. Не используйте расширения файлов в именах пакетов

Как отмечает Бретт, у вас не должно быть расширения файла в имени пакета.

Причина этого в том, что маршрутизация IIS предполагает, что запрос относится к файлу, если присутствует расширение.

2. Не используйте пути к папкам в качестве имен пакетов

Примечание. Этого не происходит в процессе разработки, поэтому это может вас укусить только при развертывании в рабочей среде.

Второе, чего следует избегать, — это иметь имена пакетов, совпадающие с именем реальной папки в вашем проекте/веб-сайте. IIS сопоставит физическую папку, прежде чем прибегнет к групповой маршрутизации.

например если у вас есть папка /Content/Login для стилей страницы входа, вы не можете использовать пакет под названием ~/Content/Login. IIS увидит физическую папку и предположит, что это запрос на просмотр каталога (скорее всего, вы получите ошибку 403 от серверов Azure).

Предлагаемое название:

Предлагаем использовать имя bundle во всех пакетах, чтобы избежать конфликта каталогов, а также включать css. Никогда не добавляйте в свой проект папку с названием bundles (из-за проблемы 2 выше).

Примеры названий пакетов:

  • "~/связки/jquery"
  • "~/связки/дополнения"
  • "~/связки/CSS"
  • "~/связки/css/логин"
  • "~/связки/css/бутстрап"

так далее

person Gone Coding    schedule 07.04.2014

У меня была аналогичная ошибка.

В моем случае у меня был пакет с именем bundles.Add(new ScriptBundle("~/js"), который не создавал пакет javascript при публикации.

Затем я изменил на bundles.Add(new ScriptBundle("~/js/main"), и это сработало! Это странно, но это сработало. Но я не уверен, что является точной основной проблемой.

person Dhanuka777    schedule 11.02.2016

Какую версию веб-оптимизации вы используете? Перейдите по этой ссылке для получения информации о последней библиотеке оптимизации. Я столкнулся с критическими изменениями после обновления до версии 1.1.

person ntombela    schedule 26.08.2013

Вчера я столкнулся с той же проблемой и нашел обходной путь. Но это предполагает избавление от связки. Должен быть лучший способ заставить Azure использовать пакет js, но он еще не найден (пока).

Вот обходной путь: проверьте, какие файлы js включены в набор скриптов в DurandalBundleConfig.cs и включили эти файлы в Index.cshtml:

@*@Scripts.Render("~/Scripts/vendor")*@
<script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>
<script type="text/javascript" src="~/Scripts/bootstrap.js"></script>
<script type="text/javascript" src="~/Scripts/knockout-2.3.0.js"></script>
person MagnusJarl    schedule 27.08.2013