200

I have debug="true" in both my web.config(s), and I just don't want my bundles minified, but nothing I do seems to disable it. I've tried enableoptimisations=false, here is my code:

//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))
4

14 に答える 14

168

条件付きコンパイル ディレクティブはあなたの味方です。

#if DEBUG
            var jsBundle = new Bundle("~/Scripts/js");
#else
            var jsBundle = new ScriptBundle("~/Scripts/js");
#endif
于 2012-08-14T16:23:59.683 に答える
145

web.configdebug="true"にあり、ページ内のバンドルを参照するために使用している場合は、バンドルとミニファイの両方をオフにする必要があります。バンドルとミニファイの両方も常にオフになります(デバッグのtrue / falseフラグに関係なく)。 Scripts/Styles.RenderBundleTable.EnableOptimizations = false

おそらくScripts/Styles.Renderヘルパーを使用していませんか?を介してバンドルへの参照を直接レンダリングしているBundleTable.Bundles.ResolveBundleUrl()場合は、常に縮小/バンドルされたコンテンツを取得します。

于 2012-08-14T21:13:18.027 に答える
91

バンドルとミニファイを無効にするには、これを.aspxdebug=trueファイルに配置します(これにより、web.configにある場合でも最適化が無効になります)

vb.net:

System.Web.Optimization.BundleTable.EnableOptimizations = false

c#.net

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

これを置くと、web.configEnableOptimizations = trueにある場合でも、バンドルされて縮小されますdebug=true

于 2012-10-17T10:29:20.007 に答える
26

いくつかの回答を組み合わせると、これは 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
于 2014-03-18T02:19:49.180 に答える
22

ミニフィケーション (およびその他の機能) を手動で制御する簡単な方法もあります。次のように使用する新しい 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) スタイルを使用していて、そのスタイルが足元に追い込まれている (大量の過剰なブラウザー リクエストを処理している) が、独自のスタイルシートを縮小しないままにしておく必要があるとします。(同じ - JavaScript を使用)。

于 2012-11-29T22:29:15.333 に答える
14

この質問で他の人から与えられたいくつかの回答を組み合わせて、別の代替ソリューションを考え出しました。

目標:常にファイルをバンドルし、イベントで JS と CSS の縮小を無効にし、<compilation debug="true" ... />常に CSS バンドルにカスタム変換を適用する。

私の解決策

1) web.configで: <compilation debug="true" ... />

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. I.e. 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. E.g. 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()));
     ...
}
于 2014-11-05T23:43:19.003 に答える
6

EnableOptimizationsプロジェクト内のキーワードを検索

それで見つけたら

BundleTable.EnableOptimizations = true;

回してくださいfalse

これにより縮小が無効になり、バンドルも完全に無効になります

于 2018-05-06T06:53:37.780 に答える
4

すでに与えられた回答を補足するために、他のファイルの完全なバンドルと縮小を許可しながら、一部のファイルを縮小/難読化/連結したくない場合、最良のオプションは、特定のバンドルのコンテンツを読み取るカスタムレンダラーを使用することです(s) バンドルの仮想パスをレンダリングするのではなく、ページ内のファイルをレンダリングします。個人的にこれが必要だったのは、ミニフィケーションがオフになっていても、CSS ファイルがバンドルされているときに IE 9 がベッドを $*%@ing していたからです。

CSS のファイルをレンダリングする CSS レンダラーを作成するために使用したコードの出発点を与えてくれたこの記事に感謝します。

静的ヘルパー クラスを作成しました。

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 = "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />";

    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 ファイル用のオプションのレンダラーを作成する場合も、このヘルパーを更新する必要はほとんどないと確信しています。

于 2014-06-27T04:56:15.427 に答える
1

これは、新しいフレームワークが VS を介してセットアップされたときにdefaultweb.configと. には、次の行があります。web.Debug.configweb.Release.configweb.release.config

<compilation xdt:Transform="RemoveAttributes(debug)" />

これは、私が行ったインライン変更を上書きするように見えました。私はこの行をコメントアウトし、私たちはグレービーでした(「リリース」ビルドで縮小されていないコードを見るという点で)

于 2016-01-20T23:02:10.880 に答える
1

LESS/SASS CSS 変換を使用している場合は、useNativeMinification(web.config で) 縮小化を無効にするために false に設定できるオプションがあります。私の目的のために、必要なときにここで変更するだけですが、web.config 変換を使用して、リリース ビルドで常に有効にするか、コードで変更する方法を見つけることができます。

<less useNativeMinification="false" ieCompat="true" strictMath="false"
      strictUnits="false" dumpLineNumbers="None">

ヒント:これの要点は、CSS を表示することです。これは、ブラウザーの検査ツールで行うか、ファイルを開くだけで行うことができます。バンドルが有効になっている場合、ファイル名はコンパイルごとに変更されるため、次のコードをページの上部に配置して、変更するたびに新しいブラウザー ウィンドウでコンパイル済みの CSS を簡単に表示できるようにします。

@if (Debugger.IsAttached) 
{
    <a href="@Styles.Url(ViewBag.CSS)" target="css">View CSS</a>
}

これは次のような動的 URL になります。https://example.com/Content/css/bundlename?v=UGd0FjvFJz3ETxlNN9NVqNOeYMRrOkQAkYtB04KisCQ1


更新: web.config 変換を作成して、デプロイ/リリース ビルド中に true に設定しました

  <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd">
    <less xdt:Transform="Replace" useNativeMinification="true" ieCompat="true" strictMath="false" strictUnits="false" dumpLineNumbers="None">
      <jsEngine name="MsieJsEngine" />
    </less>
  </bundleTransformer>
于 2014-04-12T05:56:40.707 に答える