Объединение с MVC4 не работает после публикации на лазурном

Привет, Я пытаюсь связать свои сценарии для своего приложения. Моя отладка работает, и если я публикую ее с помощью Web.debug, все прекрасно работает. Но когда я публикую с помощью Web.releas, мои скрипты не загружаются. Все работает локально, но останавливается только после публикации в Azure от VS2012. Вот как я создаю свои пакеты.

namespace BAT.App_Start
{
  public class BundleConfig
  {
    public static void RegisterBundles(BundleCollection bundles)
    {
        //BundleTable.EnableOptimizations = true;

        bundles.Add(new ScriptBundle("~/Content/MasterCss")
                .Include("~/Content/bootstrap.css")
                .Include("~/Content/bootstrap-responsive.css")
                .Include("~/Content/CSS/site.css"));

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

        bundles.Add(new ScriptBundle("~/Scripts/Validation")
                .Include("~/Scripts/jquery.validate.js")
                .Include("~/Scripts/jquery.validate.unobtrusive.js"));
        }
    }
}

Некоммерческая строка разбивает сборку отладки

Это мой макет, где я называю пакеты

@using System.Web.Optimization
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title Business Analysis Tool </title>

    @Styles.Render("~/Content/MasterCss")
</head>

<body>
    <div class="container-fluid">
        <div class="row-fluid"> @RenderPage("~/Views/Shared/_Header.cshtml") </div>
        <div class="row-fluid"> @RenderBody() </div>
        <div class="row-fluid"> @RenderPage("~/Views/Shared/_Footer.cshtml") </div>
    </div>
    @Scripts.Render("~/Scripts/MasterScripts")    
    @RenderSection("scriptholder", false)
</body>
</html>

Это моя версия Release.Config

<?xml version="1.0"?>
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <system.web>
        <compilation xdt:Transform="RemoveAttributes(debug)" />
    </system.web>
    </configuration>

Вот ссылка на ошибку, когда я проверяю связанный script с CTRL + U на странице http://bat.azurewebsites.net/Content/MasterCss?v=htASNz4hgFFA40tt0CVZdpwQudN8ZW4429UjRQZQJms1

Кажется, что-то связано с минимизацией. Я следил за некоторыми учебниками и читал другие сообщения здесь, но их решения не работают для меня.

Ответ 1

Маленькие ошибки убивают меня, я связывал свой css как пакет script, а не набор стилей.

Я много сделал, чтобы исправить это, включая настройку управления версиями и построение конфигураций. Мой проект пошел от настройки, чтобы использовать git для tfs и всего.

Ответ 2

действительно простое исправление для этого:

У меня было следующее:

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

У меня также была папка в моем решении по адресу:

/Content/Css

В этом проблема, стильbundle имел то же имя, что и папка в моем решении.

Переименовано в stylebundle:

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

и (помните), чтобы изменить, где вы ссылаетесь, _Layout.cshmtl

Итак, чтобы это стало ясно, если ваше имя стиля совпадает с фактической папкой в ​​вашем решении, тогда вы получите эту проблему. Просто назовите его чем-то другим.

Ответ 3

В BundleConfig.cs у меня было следующее:

        bundles.Add(new StyleBundle("~/Content/css").Include(
            "~/Content/css/bootstrap.css",
            "~/Content/css/bootstrap-responsive.css",
            "~/Content/css/site.css"));

Мне действительно нужно было использовать:

bundles.Add(new StyleBundle("~/Styles/css").Include(
            "~/Content/css/bootstrap.css",
            "~/Content/css/bootstrap-responsive.css",
            "~/Content/css/site.css"));

Мне также пришлось обновить ссылку на мой набор стилей CSS в _Layout.cshtml

@Styles.Render("~/Styles/css")

Я нашел здесь этот ответ: http://thebeardeveloper.blogspot.com.au/2013/02/403-forbidden-for-css-bundles-in-asp.html

Ответ 4

У меня была аналогичная проблема при публикации в Azure. Ошибка на самом деле говорила мне, что файл jQuery был плохо отформатирован. == > файл с расширением.

Другие сценарии не удалось, поскольку jQuery не был идентифицирован.

Я использовал jQuery 2.0.0 (от NuGet). После обновления сегодня до 2.0.2 (из NuGet) я смог опубликовать успешную версию Azure в конфигурации Release.

Не уверен, что это связано с вашей конкретной проблемой, но оно решило мою проблему.

Ответ 5

У меня была та же проблема, но ни один из вышеперечисленных решений не работал у меня.

Проблема в том, что у меня было следующее:

@Styles.Render("~/Content/css")

bundles.Add(new StyleBundle("~/Content/css").Include(
    "~/Content/bootstrap.css",
    "~/Content/justified-nav.css",
    "~/Content/site.css"));

Но, ~/Content/css также является каталогом, который сломался при развертывании в Azure. Я исправил это, изменив ~/Content/css на ~/Content/mastercss в обоих местах

Ответ 6

Позвольте сделать серьезную рыть. Сегодня я начал кататься с Azure и быстро столкнулся с подобной проблемой.

стиль был определен следующим образом:

bundles.Add(new StyleBundle("~/Styles/css").Include(
                  "~/Content/bootstrap.superhero.css",
                  "~/Content/site.css"));

Но css не показывалось. После почти второго вопроса я понял, что файл bootstrap.superhero.css был выделен серым цветом в обозревателе решений. То, что работало локально в Visual Studio, не срабатывало в Azure, потому что файл еще не реализован в проекте.

Tl; dr: щелкните правой кнопкой мыши файл Css, а затем "Включить в проект"

Ответ 7

В моем случае отсутствующих таблиц стилей проблема не была вызвана капризами публикации для Azure, ошибками во время минимизации или противоречивыми виртуальными и реальными путями.

Это связано с различными типами поведения BundleCollection.Add(Bundle) между Debug и Release.

Если вам удастся выполнить следующие действия (например, потому что вы используете Durandal из NuGet и имеете несколько BundleConfig, инициализированных WebActivator, и вы сами на самом деле не писали их)

bundles.Add(new StyleBundle("/foo").Include("/a.css")); 
bundles.Add(new StyleBundle("/foo").Include("/b.css"));

В принципе, если пакеты не минимизируются, это работает: вы получаете элементы на странице Razor для /foo/a.css и /foo/b.css.

Но если включен minification, то b.css не попадает в результирующий минерализованный ресурс. (или заменен a.css... Я не обращал внимания... просто пытался заставить его работать).

Вы можете обойти это, понимая порядок загрузки и использования:

bundles.Add(new StyleBundle("/foo").Include("/a.css")); 
bundles.Add(bundles.GetBundleFor("/foo").Include("/b.css"));

... или с использованием другого именованного пути (если это действительно ваше намерение) или уточнения стратегии связывания инициализации (что может потенциально повредить обновления NuGet).

Если бы только глупая "документация" для классов System.Web.Optimization действительно беспокоилась о том, чтобы указать поведение добавления нескольких пакетов с одним и тем же виртуальным путем, нам не нужно иметь это обсуждение.

Ответ 8

Как сказал один из ответов, я боролся с этим несколько часов, моя проблема заключалась также в том, что у меня была папка с именем scripts, поэтому я изменил имя script (это из моего индексного представления)

@Scripts.Render("~/Scripts/CircleStats") //this is also a folder in my project, which I think is the problem for azure

к

@Scripts.Render("~/bundles/CircleStats")

И это работает, надеюсь, это поможет кому-то

https://forums.asp.net/t/1810635.aspx?403+Access+denied+when+using+Bundling