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