Подтвердить что ты не робот

Объединение 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")

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

UPDATE:

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

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

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

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

  • "~/связки/JQuery"
  • "~/жгуты/Надстройки"
  • "~/связки/CSS"
  • "~/связки/CSS/Логин"
  • "~/связки/CSS/самозагрузки"

и т.д.

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

Вчера я столкнулся с той же проблемой и нашел для нее обходной путь. Но это связано с избавлением от пакета. Должен быть лучший способ заставить 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>