ASP.NET बंडलों को कैसे निष्क्रिय करना है


185

मेरे पास 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))

2
@ रिकएंड-एमएसएफटी अनुरोध यह है कि किस तरह से मिनिमाइज़ेशन अक्षम करते समय बंडलिंग को सक्षम किया जाए। Web.config डीबग का उपयोग करना = सही / गलत या EnableOptimifications केवल दोनों को चालू या बंद करना। मार्टिन डेविलर्स का जवाब बंडलिंग को सक्षम करने की अनुमति देता है, जबकि न्यूनतमकरण अक्षम है
13

2
मेरे लिए भी .... बंडल में फ़ाइल 'x.js' के लिए सुनिश्चित करें कि फ़ोल्डर में 'x.min.js' फ़ाइल नहीं है, हालांकि आपने मिनिमाइज़ेशन परिवर्तन निकाल दिया है .. बंडल बाहर काम करेगा यदि आप 'कोणीय.जेएस' हैं, तो DELETE 'कोणीय.जेन' 'जैसे' प्री 'मिनीफाइड फाइल; ;-)
stooboo

जवाबों:


137

यदि आपके पास है debug="true" में web.config और प्रयोग कर रहे हैं Scripts/Styles.Renderअपने पृष्ठों में बंडलों को संदर्भित करने, कि दोनों बंडलिंग और minification बंद कर देना चाहिए। BundleTable.EnableOptimizations = falseहमेशा बंडलिंग और लघुकरण दोनों को बंद कर देगा (भले ही डिबग सच / गलत ध्वज के बावजूद)।

क्या आप शायद Scripts/Styles.Renderसहायकों का उपयोग नहीं कर रहे हैं ? यदि आप सीधे बंडल के संदर्भ को रेंडर कर रहे हैंBundleTable.Bundles.ResolveBundleUrl() से हमेशा कीमा बनाया हुआ / बंडल सामग्री मिलेगी।


12
इस उत्तर से, मुझे यकीन नहीं है कि कैसे केवल मिनिमाइज़ेशन को बंद कर दें और जगह में बंडल छोड़ दें - क्या यह संभव है?
एडम टलीपर - MSFT

33
ऐसा करने के लिए, सबसे आसान यह होगा कि स्क्रिप्ट / स्टाइलबंडल्स को सादे बंडलों के लिए बदल दिया जाए, जिनका डिफ़ॉल्ट रूप से कोई ट्रांसफ़ॉर्म सेट नहीं है, यह मिनिफिकेशन को बंद कर देगा लेकिन फिर भी बंडल करेगा। ध्यान दें कि आपके पास अभी भी होने के लिए सक्षम करने के लिए EnableOptimifications सेट करने के लिए होना चाहिए।
हाओ कुंग

2
मेरे लिए भी .... बंडल में फ़ाइल 'x.js' के लिए सुनिश्चित करें कि फ़ोल्डर में 'x.min.js' फ़ाइल नहीं है, हालांकि आपने मिनिमाइज़ेशन परिवर्तन निकाल दिया है .. बंडल बाहर काम करेगा यदि आप 'कोणीय.जेएस' तो DELETE 'कोणीय.जैन' ';'; पूर्व
stooboo

1
@stooboo यह वही है जो मेरे लिए तय किया गया है, लेकिन आपको कुछ भी हटाने की आवश्यकता नहीं है। बस गैर-मिनट फ़ाइल शामिल करें।
OneHoopyFrood

2
EnableOptimizations = false- यह कोड कहां है?
एलेक्स

158

सशर्त संकलन निर्देश आपके मित्र हैं:

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

16
वास्तव में मुझे लगता है कि उसने इसे बंद कर दिया है - केवल औचित्य को बंद करने के लिए, हाओ के अनुसार एक बंडल का उपयोग करें, अन्यथा ScriptBundle का उपयोग करें जो बंडलों और छोटा करता है, नहीं?
एडम टलीपर -

1
यह एक शानदार समाधान है जब आप बिना बंडल के इसके यूआईआरआई द्वारा बंडलों को संदर्भित करना चाहते हैं, जैसे कि बिना आवश्यकता के जरिये लोड करने की आवश्यकता है।
नॉर्मन एच

1
मैं एडम जैसी चीजों को देखता हूं, मैं ScriptBundle को एक एन्हांस्ड बंडल के रूप में समझता हूं, इसलिए जब से आप एक बुनियादी संदर्भ (कोई विशिष्ट पोस्ट-ऑपरेशंस) नहीं जोड़ना चाहते हैं, तो बंडल मुझे एक विशेष बंडल पर minification को अक्षम करने का एक अच्छा तरीका लगता है।
चार्ल्स हेइटियर

6
@ रिकएंड-एमएसएफटी मुझे लगता है कि आप इस कोड के उद्देश्य को गलत समझ रहे हैं जो डिबग मोड में बंडल + नो मिनिमाइजेशन और रिलीज मोड में + मिनिफिकेशन को बंडल करने की अनुमति देता है। Web.config डीबग का उपयोग करना = सही / गलत या EnableOptimifications केवल दोनों को चालू या बंद करना। मैं अपनी टिप्पणी पढ़ सकते हैं और खारिज कर दिया इस मार्टिन समाधान, केवल पता लगाने के लिए कि यह वास्तव में minification बिना bundling होने का एक बहुत अच्छा तरीका है
guymid

-1 यह "समाधान" सबसे अच्छा एक स्टॉप-गैप है। वास्तव में, भले ही यह काम करता है यह बहुत ही अदम्य कोड की ओर जाता है। लेकिन यह इसके बारे में सबसे बुरी बात नहीं है। "बंडल" का उपयोग करने से परिसंपत्तियों को सर्वर द्वारा "टेक्स्ट / जावास्क्रिप्ट" के बजाय "टेक्स्ट / html" पर सेट किए गए माइम-प्रकार के साथ सौंप दिया जाता है। यदि आप डिबग मोड में आग से खेल रहे हैं, तो सीएसएस फ़ाइलों को बंडल करने के लिए इस दृष्टिकोण को लागू करते हैं। मत करो। बस नहीं है। अधिक स्वस्थ दृष्टिकोण के लिए मेरा जवाब देखें जो उत्पादन में काम करता है।
XDS

89

बंडलिंग और मिनिमाइज़ेशन को अक्षम करने के लिए बस इसे अपनी .aspx फ़ाइल में डालें (यह web.configdebug=true में भी ऑप्टिमाइज़ेशन को अक्षम कर देगा )

vb.net:

System.Web.Optimization.BundleTable.EnableOptimizations = false

c # .net

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

यदि आप इसे डालते हैं EnableOptimizations = trueऔर चाहे तो web.configdebug=true में भी छोटा कर सकते हैं


2
यह केवल एक चीज है जिसने मेरे लिए इस मुद्दे को तय किया है। मेरे पास debug="true"और अधिकार था Script.Renderलेकिन यह अभी भी काम नहीं कर रहा था। यह भी ध्यान दें कि यह किसी भी .min.js फ़ाइलों को सर्वर नहीं करेगा, इसलिए निर्भरता कोड की अकुशल प्रतियां शामिल करना सुनिश्चित करें।
OneHoopyFrood

2
@ टीसीसी: क्या मैं यह सोचने में गलत हूं कि vb.net सिंटैक्स में पूंजी होनी चाहिए False?
जेरेमीसॉवर्ल्ड

@jeremysawesome ओह, मुझे लगता है कि यह सही है, अच्छी बात है :-) मैं एक VB प्रोग्रामर नहीं हूँ बहुत बार तो मैंने भी ध्यान नहीं दिया ...
TCC

1
पहली पंक्ति "होनी चाहिए ... भले ही डिबग = झूठी" नहीं?
UnionP

2
vb.Net केस के बारे में परवाह नहीं करता है, गलत = गलत, जैसे .tostring () = .StString ()
manuel

67

आप बस अपने ट्रांसफ़ॉर्म को साफ़ करके अपने बंडलों में मिनिमाइज़ेशन को बंद कर सकते हैं।

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

मुझे व्यक्तिगत रूप से यह उपयोगी लगा जब मैं अपनी सभी लिपियों को एक ही फ़ाइल में बंडल करना चाहता था, लेकिन डिबगिंग चरणों के दौरान पठनीयता की आवश्यकता थी।


-1 यहाँ ड्रेगन रहें: JsMinifier / CssMinifier को बंद करने से आंतरिक तंत्र बंद हो जाता है, जो माइम-टाइप को "टेक्स्ट / सीएसएस" या "टेक्स्ट / जावास्क्रिप्ट" पर सेट करता है। यह डीबग / रिलीज़ मोड में समस्याएँ पैदा नहीं करता है, लेकिन यह प्रकाशित बिल्ड (उर्फ लाइव तैनाती) के संदर्भ में सीएसएस-बंडलों में कहर बरपाता है: क्रोम और फ़ायरफ़ॉक्स ने लोड करने से इनकार करते हुए कहा कि सीएसएस-बंडलों ने कहा कि उनके माइम-प्रकार सेट हैं "text / css" के बजाय "text / html"। Js-bundles चीजों के साथ किसी तरह वर्कआउट करते हैं, लेकिन इसके js- बंडल को "टेक्स्ट / html" (<- गंभीरता से?) के रूप में सौंपने के लिए सबसे अच्छा है। सही दृष्टिकोण के लिए मेरा जवाब देखें।
XDS

27

मैंने इन सुझावों की बहुत कोशिश की, लेकिन काम नहीं कर पाया। मैंने काफी कुछ घंटे बर्बाद किए हैं केवल यह पता लगाने के लिए कि यह मेरी गलती थी:

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

इसने हमेशा मुझे जावास्क्रिप्ट और बंडल किया है, कोई फर्क नहीं पड़ता कि मैंने क्या कोशिश की। इसके बजाय, मुझे इसका उपयोग करना चाहिए:

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

अतिरिक्त '~' ने किया। मैंने इसे केवल एक ही उदाहरण में फिर से हटा दिया है, यह देखने के लिए कि क्या यह वास्तव में था। यह था ... उम्मीद है कि मैं इस पर बर्बाद हुए कम से कम एक व्यक्ति को बचा सकता हूं।


24

कई उत्तरों को मिलाएं, यह मेरे लिए 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

21

मैन्युअल रूप से minification (और अन्य सुविधाओं) को नियंत्रित करने के लिए कुछ सरल तरीके भी हैं। यह नया 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) शैलियों का उपयोग कर रहे हैं, जो आपके पैरों के नीचे हो रही हैं (उनके लिए अत्यधिक ब्राउज़र अनुरोध ले रही हैं), लेकिन आप अपनी खुद की स्टाइलशीट को अनमनी करना चाहते हैं। (वही - जावास्क्रिप्ट के साथ)।


13

मैंने इस प्रश्न में दूसरों द्वारा दिए गए कुछ उत्तरों को एक अन्य वैकल्पिक समाधान के साथ जोड़ा।

लक्ष्य: हमेशा फ़ाइलों को बंडल करने के लिए, उस घटना में जेएस और सीएसएस मिनिमाइजेशन को अक्षम करने के लिए <compilation debug="true" ... />और हमेशा सीएसएस बंडल में एक कस्टम परिवर्तन लागू करने के लिए।

मेरा समाधान :

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()));
     ...
}

7

यदि आप निम्नलिखित संपत्ति को गलत पर सेट करते हैं, तो यह बंडल और मिनिफिकेशन दोनों को अक्षम कर देगा।

में Global.asax.cs फ़ाइल, लाइन के रूप में नीचे वर्णित जोड़ने

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

मुझे यह समझ में नहीं आ रहा है कि जब मेरी यह सुविधा बंद हो गई है तो मेरी कम फाइलें सीएसएस में क्यों बदल जाती हैं? जब मैं अनुकूलन सक्षम करता हूं, तो कम फ़ाइलों को बंडल करना अब काम नहीं करता है।
FrenkyB

5

यहां बताया गया है कि प्रति-बंडल आधार पर न्यूनतमकरण को कैसे निष्क्रिय किया जाए:

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

सिडेनोट: आपके बंडलों के लिए उपयोग किए जाने वाले मार्ग आपके प्रकाशित बिल्ड में किसी भी वास्तविक पथ के साथ मेल नहीं खाते हैं अन्यथा कुछ भी काम नहीं करेगा। यह भी सुनिश्चित करें कि .js, .cs और / या 'का उपयोग करने से बचें।' और '_' बंडल के नाम पर कहीं भी। नाम को यथासंभव सरल और सीधा रखें, जैसे ऊपर दिए गए उदाहरण में।

सहायक वर्गों को नीचे दिखाया गया है। ध्यान दें कि इन कक्षाओं को भविष्य में प्रूफ बनाने के लिए हम .clear () के बजाय सर्जिकल रूप से js / css माइनिंग इंस्टेंसेस को हटाते हैं और हम एक माइम-टाइप-सेटर ट्रांसफॉर्मेशन भी डालते हैं जिसके बिना प्रोडक्शन बिल्ड विशेष रूप से परेशानी के समय चलने के लिए बाध्य होते हैं। यह ठीक से सीएसएस-बंडलों (फायरफॉक्स और क्रोम अस्वीकार सीएसएस बंडलों को माइम-टाइप "टेक्स्ट / एचटीएमएल" पर सेट करने के लिए आता है जो डिफ़ॉल्ट है):

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;
        }
}

इस पूरे काम को करने के लिए आपको स्थापित करने की आवश्यकता है (नगेट के माध्यम से):

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

और आपके web.config को इस तरह समृद्ध किया जाना चाहिए:

<runtime>
       [...]
       <dependentAssembly>
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-x.y.z.t" newVersion="x.y.z.t" />
       </dependentAssembly>
       <dependentAssembly>
              <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-x.y.z.t" newVersion="x.y.z.t" />
       </dependentAssembly>
        [...]
</runtime>

<!-- setting mimetypes like we do right below is absolutely vital for published builds because for some reason the -->
<!-- iis servers in production environments somehow dont know how to handle otf eot and other font related files   -->
</system.webServer>
        [...]
        <staticContent>
      <!-- in case iis already has these mime types -->
      <remove fileExtension=".otf" />
      <remove fileExtension=".eot" />
      <remove fileExtension=".ttf" />
      <remove fileExtension=".woff" />
      <remove fileExtension=".woff2" />

      <mimeMap fileExtension=".otf" mimeType="font/otf" />
      <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
      <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
      <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
      </staticContent>

      <!-- also vital otherwise published builds wont work  https://stackoverflow.com/a/13597128/863651  -->
      <modules runAllManagedModulesForAllRequests="true">
         <remove name="BundleModule" />
         <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
      </modules>
      [...]
</system.webServer>

ध्यान दें कि फोंट आदि के मामले में आपको अपने सीएसएस-बंडलों को काम करने के लिए अतिरिक्त कदम उठाने पड़ सकते हैं, लेकिन यह एक अलग कहानी है।


4

बस पहले से दिए गए उत्तरों को पूरक करने के लिए, यदि आप भी संक्षिप्त / संक्षिप्त / संक्षिप्त फ़ाइलों को छोटा नहीं करना चाहते हैं, जबकि अभी भी अन्य फ़ाइलों के लिए पूर्ण बंडलिंग और न्यूनतम करने की अनुमति है , तो सबसे अच्छा विकल्प एक कस्टम रेंडरर के साथ जाना है जो एक विशेष बंडल की सामग्री को पढ़ेगा। (s) और बंडल के वर्चुअल पथ को रेंडर करने के बजाय पृष्ठ में फ़ाइलें रेंडर करें। मुझे व्यक्तिगत रूप से इसकी आवश्यकता थी क्योंकि IE 9 $ *% @ बिस्तर था जब मेरी सीएसएस फाइलें भी बंद कर दी जा रही थीं, यहां तक ​​कि minification बंद कर दिया गया था

इस लेख के लिए बहुत बहुत धन्यवाद , जिसने मुझे उस कोड के लिए शुरुआती बिंदु दिया, जिसका उपयोग मैंने एक सीएसएस रेंडरर बनाने के लिए किया था, जो सीएसएस के लिए फाइलों को प्रस्तुत करेगा, लेकिन फिर भी सिस्टम को मेरी जावास्क्रिप्ट फ़ाइलों को बंडल / मिनिफ़ाइज्ड / ओफ़्फ़ुसेटेड करने की अनुमति देगा।

स्थिर सहायक वर्ग बनाया गया:

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")

मुझे यकीन है कि जावास्क्रिप्ट फ़ाइलों के लिए एक वैकल्पिक रेंडरर बनाने के लिए इस सहायक के रूप में अच्छी तरह से अद्यतन करने की आवश्यकता होगी।


1
अच्छा काम करता है। यदि आप चाहते हैं कि जब फ़ाइलें अपडेट की जाती हैं, तो आप बदल सकते हैं CssTemplateजैसे आप कुछ बदल सकते हैं "<link href=\"{0}?f={1}\" rel=\"stylesheet\" type=\"text/css\" />"और sb.AppendFormatलाइन को कुछ इस तरह बदल सकते हैंsb.AppendFormat(CssTemplate + Environment.NewLine, urlHelper.Content(file.VirtualFile.VirtualPath), System.IO.File.GetLastWriteTimeUtc(HttpContext.Current.Server.MapPath(file.IncludedVirtualPath)).Ticks);
franzo

सच है, हमने काम में ऐसा कुछ किया है। हमारे पास JSVersion नाम की एक सार्वजनिक स्टेटिक स्ट्रिंग थी जिसे हमने Global.asax क्लास में डाला, जिसने एक्ज़ीक्यूटिंग असेंबली के मेजर / मिनट / बिल्ड / रेव को खींचा। फिर हमने इसे इस तरह संदर्भित किया: <script type = "text / javascript" src = "Scripts / jsfile_name.js <% = Global.JSVersion%>"> </ script>
Jamesbyby

3

EnableOptimizationsअपने प्रोजेक्ट में कीवर्ड खोजें

तो अगर आपको मिल जाए

BundleTable.EnableOptimizations = true;

इसे चालू करें false


2
यह न्यूनतमकरण को अक्षम करता है, लेकिन यह पूरी तरह से बंडलिंग को भी अक्षम करता है, जो मुझे लगता है कि कम से कम नोट किया जाना चाहिए।
जॉन पेवेक

1

यदि आप LESS / SASS CSS परिवर्तन का उपयोग कर रहे हैं, तो एक विकल्प है useNativeMinificationजिसे minification (web.config) में अक्षम करने के लिए गलत पर सेट किया जा सकता है। अपने उद्देश्यों के लिए मैं इसे केवल तब बदल देता हूं जब मुझे आवश्यकता होती है, लेकिन आप वेब का उपयोग कर सकते हैं। रूपांतरण इसे हमेशा रिलीज़ बिल्ड पर सक्षम करने के लिए या शायद कोड में इसे संशोधित करने का एक तरीका ढूंढते हैं।

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

युक्ति: इसका पूरा बिंदु आपके सीएसएस को देखना है, जिसे आप ब्राउज़र में औजारों का निरीक्षण कर सकते हैं या केवल फ़ाइल खोलकर। जब बंडलिंग सक्षम किया जाता है कि फ़ाइल नाम हर संकलन पर बदल जाता है, तो मैं अपने पृष्ठ के शीर्ष पर निम्नलिखित डाल देता हूं ताकि मैं अपने संकलित सीएसएस उत्सुकता को हर बार बदलने पर एक नई ब्राउज़र विंडो में देख सकूं।

@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 रूपांतरण बनाया

  <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>

1
फ़ाइल नाम हर संकलन पर नहीं बदलता है। यह फ़ाइल सामग्री पर आधारित है, इसलिए जब भी फ़ाइल बदलती है तो यह बदल जाती है।
जिम राडेन

1

यह भविष्य में नए ढांचे के रूप में किसी के लिए उपयोगी हो सकता है, जब वीएस के माध्यम से सेटअप डिफ़ॉल्ट हो जाता है web.config, web.Debug.configऔर web.Release.config। में web.release.configआप इस लाइन मिलेगा:

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

यह मेरे द्वारा किए गए किसी भी इनलाइन परिवर्तनों को ओवरराइड करने के लिए लग रहा था। मैंने इस लाइन पर टिप्पणी की और हम "रिलीज़" बिल्ड में गैर-मिनिमाइज्ड कोड देखने के मामले में ग्रेवी थे

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.