ASP.NET связывает, как отключить минимизацию

У меня debug="true" в обоих моих web.config (s) , и я просто не хочу, чтобы мои пакеты были уменьшены, но я ничего не могу отключить. Я пробовал enableoptimisations=false , вот мой код:

 //Javascript bundles.Add(new ScriptBundle("~/bundles/MainJS") .Include("~/Scripts/regular/lib/mvc/jquery.validate.unobtrusive.js*") .Include("~/Scripts/regular/lib/mvc/jquery.validate*") .Include("~/Scripts/regular/lib/bootstrap.js") .IncludeDirectory("~/Scripts/regular/modules", "*.js", true) .IncludeDirectory("~/Scripts/regular/pages", "*.js", true) .IncludeDirectory("~/Scripts/regular/misc", "*.js", true)); //CSS bundles.Add(new StyleBundle("~/bundles/MainCSS") .Include("~/Content/css/regular/lib/bootstrap.css*") .IncludeDirectory("~/Content/css/regular/modules", "*.css", true) .IncludeDirectory("~/Content/css/regular/pages", "*.css", true)) 

14 Solutions collect form web for “ASP.NET связывает, как отключить минимизацию”

Если у вас есть debug="true" в web.config и вы используете Scripts/Styles.Render чтобы ссылаться на пакеты на ваших страницах, это должно отключить как связывание, так и минимизацию. BundleTable.EnableOptimizations = false всегда будет отключать как связывание, так и минимизацию (независимо от флага debug true / false).

Возможно, вы не используете помощники Scripts/Styles.Render ? Если вы непосредственно BundleTable.Bundles.ResolveBundleUrl() ссылки на пакет через BundleTable.Bundles.ResolveBundleUrl() вы всегда будете получать мини-контент.

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

 #if DEBUG var jsBundle = new Bundle("~/Scripts/js"); #else var jsBundle = new ScriptBundle("~/Scripts/js"); #endif 

Чтобы отключить объединение и минимизацию, просто поместите этот файл .aspx (это отключит оптимизацию, даже если debug=true в web.config )

vb.net:

 System.Web.Optimization.BundleTable.EnableOptimizations = false 

C # .NET

 System.Web.Optimization.BundleTable.EnableOptimizations = false; 

Если вы поместите EnableOptimizations = true это будет EnableOptimizations = true даже если debug=true в web.config

Вы можете отключить минимизацию в своих пакетах, просто очистив свои преобразования.

 var scriptBundle = new ScriptBundle("~/bundles/scriptBundle"); ... scriptBundle.Transforms.Clear(); 

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

Я пробовал много этих предложений, но, похоже, работа была такой. Я потратил немало времени, чтобы узнать, что это была моя ошибка:

 @Scripts.Render("/bundles/foundation") 

Он всегда меня заминировал и связал javascript, независимо от того, что я пробовал. Вместо этого я должен был использовать это:

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

Дополнительный «~» сделал это. Я даже удалил его снова только в одном случае, чтобы убедиться, что это действительно так. Это было … надеюсь, что я смогу сэкономить, по крайней мере, одного человека в те часы, которые я потратил на это.

Объедините несколько ответов, это работает для меня в ASP.NET MVC 4.

  bundles.Add(new ScriptBundle("~/Scripts/Common/js") .Include("~/Scripts/jquery-1.8.3.js") .Include("~/Scripts/zizhujy.com.js") .Include("~/Scripts/Globalize.js") .Include("~/Scripts/common.js") .Include("~/Scripts/requireLite/requireLite.js")); bundles.Add(new StyleBundle("~/Content/appLayoutStyles") .Include("~/Content/AppLayout.css")); bundles.Add(new StyleBundle("~/Content/css/App/FunGrapherStyles") .Include("~/Content/css/Apps/FunGrapher.css") .Include("~/Content/css/tables.css")); #if DEBUG foreach (var bundle in BundleTable.Bundles) { bundle.Transforms.Clear(); } #endif 

Существует также простой способ контролировать минимизацию (и другие функции) вручную. Это новый трансформатор CssMinify () , например:

 // this is in case when BundleTable.EnableOptimizations = false; var myBundle = new StyleBundle("~/Content/themes/base/css") .Include("~/Content/themes/base/jquery.ui.core.css" /* , ... and so on */); myBundle.Transforms.Add(new CssMinify()); bundles.Add(myBundle); // or you can remove that transformer in opposite situation myBundle.Transforms.Clear(); 

Это удобно, когда вы хотите, чтобы какая-то часть пакета была включена только для минирования. Предположим, вы используете некоторые стандартные стили (jQuery), которые попадают под ваши ноги (при этом у них много запросов браузера), но вы хотите сохранить unminified свою собственную таблицу стилей. (То же самое – с javascript).

Я объединил несколько ответов, заданных другими в этом вопросе, чтобы придумать другое альтернативное решение.

objective: всегда связывать файлы, чтобы отключить минимизацию JS и CSS в случае, если и всегда применять настраиваемое преобразование к набору CSS.

Мое решение :

1) В web.config :

2) В методе Global.asax Application_Start () :

  protected void Application_Start() { ... BundleTable.EnableOptimizations = true; // Force bundling to occur // If the compilation node in web.config indicates debugging mode is enabled // then clear all transforms. Ie disable Js and CSS minification. if (HttpContext.Current.IsDebuggingEnabled) { BundleTable.Bundles.ToList().ForEach(b => b.Transforms.Clear()); } // Add a custom CSS bundle transformer. In my case the transformer replaces a // token in the CSS file with an AppConfig value representing the website URL // in the current environment. Eg www.mydevwebsite in Dev and // www.myprodwebsite.com in Production. BundleTable.Bundles.ToList() .FindAll(x => x.GetType() == typeof(StyleBundle)) .ForEach(b => b.Transforms.Add(new MyStyleBundleTransformer())); ... } 

Если вы установите для свойства false значение false, то это приведет к отключению как связывания, так и минимизации.

В Global.asax.cs

 protected void Application_Start() { System.Web.Optimization.BundleTable.EnableOptimizations = false; } 

Чтобы дополнить уже предоставленные ответы, если вы также хотите НЕ минимизировать / обфускать / конкатенировать НЕКОТОРЫЕ файлы, сохраняя при этом полное связывание и минимизацию для других файлов, лучшим вариантом является переход с помощью специального рендерера, который будет считывать содержимое определенного пакета (ы) и отобразить файлы на странице, а не отображать виртуальный путь пакета. Я лично это требовал, потому что IE 9 был $ *% @ на кровати, когда мои файлы CSS были в комплекте, даже если отключено .

Большое спасибо этой статье , которая дала мне отправную точку для кода, который я использовал для создания CSS-рендерера, который бы отображал файлы для CSS, но все же позволял системе отображать мои файлы javascript в комплекте / minified / obfuscated.

Создал статический вспомогательный class:

 using System; using System.Text; using System.Web; using System.Web.Mvc; using System.Web.Optimization; namespace Helpers { public static class OptionalCssBundler { const string CssTemplate = ""; public static MvcHtmlString ResolveBundleUrl(string bundleUrl, bool bundle) { return bundle ? BundledFiles(BundleTable.Bundles.ResolveBundleUrl(bundleUrl)) : UnbundledFiles(bundleUrl); } private static MvcHtmlString BundledFiles(string bundleVirtualPath) { return new MvcHtmlString(string.Format(CssTemplate, bundleVirtualPath)); } private static MvcHtmlString UnbundledFiles(string bundleUrl) { var bundle = BundleTable.Bundles.GetBundleFor(bundleUrl); StringBuilder sb = new StringBuilder(); var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext); foreach (BundleFile file in bundle.EnumerateFiles(new BundleContext(new HttpContextWrapper(HttpContext.Current), BundleTable.Bundles, bundleUrl))) { sb.AppendFormat(CssTemplate + Environment.NewLine, urlHelper.Content(file.VirtualFile.VirtualPath)); } return new MvcHtmlString(sb.ToString()); } public static MvcHtmlString Render(string bundleUrl, bool bundle) { return ResolveBundleUrl(bundleUrl, bundle); } } } 

Затем в файле макета бритвы:

 @OptionalCssBundler.Render("~/Content/css", false) 

вместо стандарта:

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

Я уверен, что создание необязательного средства визуализации для файлов javascript потребуется немного для обновления для этого помощника.

Вот как можно отключить минимизацию по каждому набору:

 bundles.Add(new StyleBundleRaw("~/Content/foobarcss").Include("/some/path/foobar.css")); bundles.Add(new ScriptBundleRaw("~/Bundles/foobarjs").Include("/some/path/foobar.js")); 

Sidenote: Пути, используемые для ваших пакетов, не должны совпадать с каким-либо фактическим путем в ваших опубликованных assemblyх, иначе ничего не получится. Также избегайте использования .js, .css и / или ‘.’ и ‘_’ где угодно во имя связки. Держите имя максимально простым и простым, как в приведенном выше примере.

Ниже перечислены classы-помощники. Обратите внимание, что для того, чтобы сделать эти classы перспективными, мы хирургически удаляем js / css minifying экземпляры вместо использования .clear (), и мы также вставляем трансформацию типа mime-setter, без которой производственные сборки неизбежно сталкиваются с проблемами, особенно когда он подходит для правильной передачи css-пакетов (пакетов firefox и chrome reject css с типом mime-типа, установленным в «text / html», который является значением по умолчанию):

 internal sealed class StyleBundleRaw : StyleBundle { private static readonly BundleMimeType CssContentMimeType = new BundleMimeType("text/css"); public StyleBundleRaw(string virtualPath) : this(virtualPath, cdnPath: null) { } public StyleBundleRaw(string virtualPath, string cdnPath) : base(virtualPath, cdnPath) { Transforms.Add(CssContentMimeType); //0 vital Transforms.Remove(Transforms.FirstOrDefault(x => x is CssMinify)); //0 } //0 the guys at redmond in their infinite wisdom plugged the mimetype "text/css" right into cssminify upon unwiring the minifier we // need to somehow reenable the cssbundle to specify its mimetype otherwise it will advertise itself as html and wont load } internal sealed class ScriptBundleRaw : ScriptBundle { private static readonly BundleMimeType JsContentMimeType = new BundleMimeType("text/javascript"); public ScriptBundleRaw(string virtualPath) : this(virtualPath, cdnPath: null) { } public ScriptBundleRaw(string virtualPath, string cdnPath) : base(virtualPath, cdnPath) { Transforms.Add(JsContentMimeType); //0 vital Transforms.Remove(Transforms.FirstOrDefault(x => x is JsMinify)); //0 } //0 the guys at redmond in their infinite wisdom plugged the mimetype "text/javascript" right into jsminify upon unwiring the minifier we need // to somehow reenable the jsbundle to specify its mimetype otherwise it will advertise itself as html causing it to be become unloadable by the browsers in published production builds } internal sealed class BundleMimeType : IBundleTransform { private readonly string _mimeType; public BundleMimeType(string mimeType) { _mimeType = mimeType; } public void Process(BundleContext context, BundleResponse response) { if (context == null) throw new ArgumentNullException(nameof(context)); if (response == null) throw new ArgumentNullException(nameof(response)); response.ContentType = _mimeType; } } 

Чтобы все это работало, вам необходимо установить (через nuget):

WebGrease 1.6.0+ Microsoft.AspNet.Web.Optimization 1.1.3+

И ваш web.config должен быть обогащен так:

  [...]         [...]     [...]                   [...]  

Обратите внимание, что вам, возможно, придется предпринять дополнительные шаги, чтобы ваши css-пакеты работали с точки зрения шрифтов и т. Д. Но это совсем другая история.

Если вы используете преобразование CSS LESS / SASS, есть опция useNativeMinification которая может быть установлена ​​в значение false, чтобы отключить мини-настройку (в web.config). Для моих целей я просто изменяю его здесь, когда мне это нужно, но вы можете использовать преобразования web.config, чтобы всегда включать его в сборку релиза или, возможно, найти способ изменить его в коде.

  

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

 @if (Debugger.IsAttached) { View CSS } 

это будет динамический URL-адрес, например https://example.com/Content/css/bundlename?v=UGd0FjvFJz3ETxlNN9NVqNOeYMRrOkQAkYtB04KisCQ1


Обновление: я создал преобразование web.config, чтобы установить его для меня во время сборки развертывания / выпуска

       

Это может стать полезным для кого-то в будущем, поскольку новая структура при настройке через VS получает по умолчанию web.config , web.Debug.config и web.Release.config . В web.release.config вы найдете эту строку:

  

это, казалось, отменяет любые встроенные изменения, которые я сделал. Я прокомментировал эту строку, и мы были подливы (с точки зрения просмотра неминифицированного кода в сборке «release»)

Найдите ключевое слово EnableOptimizations в своем проекте

Поэтому, если вы найдете

 BundleTable.EnableOptimizations = true; 

поверните его в false .

  • Целевой пакет MSBuild не найден
  • Узел узла (Grunt) установлен, но недоступен
  • Найдите версию установленного пакета npm
  • Как использовать пользовательские пакеты в golang?
  • Как мне обращаться с «пакетом ххх» не доступно (для R версии xyz)? Предупреждение?
  • Как установить частный модуль NPM без моего собственного реестра?
  • Android VpnService для захвата пакетов не будет захватывать пакеты
  • Что такое соглашение для разделителя слов в именах пакетов Java?
  • Как проверить, установлен ли Facebook Android
  • NodeJS требует глобального модуля / пакета
  • Как передать ArrayList из одного действия в другое?
  • Interesting Posts

    Может ли кто-нибудь объяснить IEnumerable и IEnumerator для меня?

    Нестандартные шрифты в Интернете?

    Агрегация по уникальному идентификатору и объединение связанных значений в строку

    Разница между строкой replace () и replaceAll ()

    Как возвращать выходные данные функции, отличной от ее печати?

    Булевы, условные операторы и автобоксинг

    Постоянное обнаружение ERR_NAME_RESOLUTION_FAILED

    Модульное тестирование кода C ++ – Инструменты и методология

    Как я могу подсчитать прогоны в последовательности?

    Возможно ли иметь прямоугольные вкладки в Chrome?

    Должен ли я использовать NSUserDefaults или plist для хранения данных?

    Как вы показываете анимированные GIF-файлы в форме Windows (c #)

    Экономичный веб-браузер с памятью

    Доступ запрещен для пользователя «root» @ «localhost» при попытке предоставить привилегии. Как предоставить привилегии?

    Почему я не могу контролировать скорость моего процессора?

    Давайте будем гением компьютера.