MVC-3-Convert-to-4 ऐप के लिए System.Web.Optimization के संदर्भ को कैसे जोड़ा जाए


458

मैं नए बंडल फीचर का उपयोग करने की कोशिश कर रहा हूं, जिसे मैंने हाल ही में MVC 3 से MVC 4 बीटा में परिवर्तित किया है। इसके लिए global.asax में कोड की एक पंक्ति की BundleTable.Bundles.RegisterTemplateBundles();आवश्यकता होती है, जिसके using System.Web.Optimization;लिए शीर्ष पर की आवश्यकता होती है ।

जब मैं ऐसा करता हूं, तो मुझे लाल स्क्वीजीली लाइनें मिलती हैं जो कहती हैं, "क्या आप एक विधानसभा संदर्भ याद कर रहे हैं?" जब मैं प्रयास करता हूं और संदर्भ जोड़ता हूं, और संवाद में .NET टैब पर क्लिक करता हूं, तो AZ से सॉर्ट करता हूं, मुझे दिखाई नहीं देता System.Web.Optimization

मैं इस संदर्भ को अपनी परियोजना में कैसे जोड़ूं?


6
मेरे पास पहले से ही ऑप्टिमाइज़ेशन था, लेकिन यह ScriptBundle के साथ एक समस्या पैदा कर रहा था, जिसे मैं केवल ऑप्टी को अनइंस्टॉल करने के बाद हल कर सकता था ... फिर इसे फिर से इंस्टॉल करना।
Myzifer

1
@Myzifer आपको एक उत्तर के रूप में अपनी टिप्पणी प्रस्तुत करनी चाहिए। यह एकमात्र चीज थी जिसने मेरे लिए System.Web.Optimizationमेरे संदर्भ में वापस नोड प्राप्त करने के लिए काम किया ।
स्नेकस

2
@myzifer इस विषम व्यवहार के लिए आपका उत्तर सही है। केवल बात यह है कि इस समस्या को हल होगा मुझे nuget cmd लाइन चल रहा है के लिए: स्थापना रद्द-पैकेज Microsoft.AspNet.Web.Optimization और उसके बाद सही होने के बाद कि स्थापित चल: स्थापित करें-पैकेज Microsoft.AspNet.Web.Optimization। VStudio 2013 के साथ मेरे घर के कंप्यूटर पर हफ्तों तक काम करने के लिए इसे पाने की कोशिश की और कभी नहीं मिल सका। बहुत बहुत धन्यवाद।
राडदेवस

@ मेइज़िफ़र - मेरे लिए भी काम किया - वीएसऑनलाइन से एक प्रोजेक्ट "चेक आउट" किया और यह त्रुटि थी - फिर अनइंस्टॉल करें - 20 सेकंड का काम - धन्यवाद - यह उन बेवकूफ समस्याओं में से एक है जिसे आप आसानी से एक दिन खो सकते हैं!
पर्सी

जवाबों:


728

अपडेट
संस्करण 1.1.x उपलब्ध है, रिलीज नोट्स पढ़ें: https://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization


Microsoft.Web.Optimization पैकेज अब अप्रचलित है। ASP.NET (MVC) 4 और उच्चतर के साथ आपको Microsoft ASP.NET वेब ऑप्टिमाइज़ेशन फ्रेमवर्क स्थापित करना चाहिए:

  • नगेट से पैकेज स्थापित करें :

    Install-Package Microsoft.AspNet.Web.Optimization
  • App_Start \ bundConfig.cs में बंडल बनाएं और कॉन्फ़िगर करें:

    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles) {
            bundles.Add(new ScriptBundle("~/Scripts/jquery").Include(
                "~/Scripts/Lib/jquery/jquery-{version}.js",
                "~/Scripts/Lib/jquery/jquery.*",
                "~/Scripts/Lib/jquery/jquery-ui-{version}.js")
            );
    
            bundles.Add(new ScriptBundle("~/Scripts/knockout").Include(
                 "~/Scripts/Lib/knockout/knockout-{version}.js",
                 "~/Scripts/Lib/knockout/knockout-deferred-updates.js")
            );
        }
    }
  • अपने Global.asax.cs में Application_Start () से RegisterBundles () फ़ंक्शन को कॉल करें:

    using System.Web.Optimization;
    
    protected void Application_Start() {
         ...
         BundleConfig.RegisterBundles(BundleTable.Bundles);
         ...
    }
  • आपके विचार में। CCtml में ऑप्टिमाइज़ेशन नामस्थान शामिल है और बंडल रेंडर करें:

    @using System.Web.Optimization
    
    @Scripts.Render("~/Scripts/jquery")
    @Scripts.Render("~/Scripts/knockout")

अधिक जानकारी के लिए http://www.asp.net/mvc/overview/performance/bundling-and-minification देखें


2
क्या आपको इसका उपयोग करने के लिए MVC4 की आवश्यकता है?
फ्लोटलैफ्ट

5
यह पुराना नहीं है। यह मैं कैसे दृश्य स्टूडियो 2012 और ASP.NET (MVC) के अंतिम रिलीज के साथ इसका इस्तेमाल 4. है
MHU

29
आपके उत्तर में "System.Web.Optimization का उपयोग करना" शामिल है, जो वास्तव में प्रश्नकर्ता के बारे में पूछ रहा है।
davidpricedev

9
@ क्या: यह अच्छा है या बुरा? "लापता विधानसभा संदर्भ" को हल करने के लिए Microsoft.AspNet.Web.Optimization को उत्तर में उल्लिखित किया जाना चाहिए।
mhu

6
डिफ़ॉल्ट MVC टेम्प्लेट में मैं पृष्ठ के शीर्ष पर System.Web.Optimization नामस्थान को जोड़कर लिपियों के वर्ग का उपयोग कर सकता हूं। लेकिन मेरे अनुमान में मुझे "लिपियों का नाम मौजूद नहीं है" त्रुटि मिलती है। मैं इसे कैसे हल कर सकता हूं? इस नाम स्थान को web.config में जोड़ने से कोई मदद नहीं मिली। संपादित करें: समाधान को पुनः लोड करने में मदद मिली, क्षमा करें :)
वचबर्न जू

83

ASP.Net MVC 4 के अंतिम रिलीज़ संस्करण के साथ दृष्टिकोण इस प्रकार है:

  • Microsoft.AspNet.Web.ug को nuget के माध्यम से स्थापित करें (क्योंकि यह फ्रेमवर्क द्वारा स्थापित नहीं है)

    install-package Microsoft.AspNet.Web.Optimization
  • Global.asax Application_Start में बंडल बनाएँ:

    var scripts = new ScriptBundle("~/MyBundle");
    scripts.IncludeDirectory("~/Scripts/MyDirectory", "*.js");
    BundleTable.Bundles.Add(scripts);
  • "Views" web.config में "System.Web.Optimization" नामस्थान जोड़ें:

     <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Optimization" />
        </namespaces>
    </pages>
  • अपने विचार में। Cshtml अंतिम चरण में बनाए गए बंडल में शामिल करें:

    @Scripts.Render("~/MyBundle")

डिबग मोड में, आपकी निर्देशिका की सभी स्क्रिप्ट फाइलें व्यक्तिगत रूप से प्रस्तुत करेंगी; रिलीज़ मोड में उन्हें बंडल और मिनिफ़ाइ किया जाएगा।


सही है, इस संस्करण में यह शामिल है। अन्य संस्करण नहीं है।
ल्यूक बेलबिना

1
मुझे समझ नहीं आ रहा है कि यह मेरे लिए काम क्यों नहीं करता है। मैंने इस तरह से कोशिश की है और बंडल को बनाने के लिए बंडलकॉन्फ़िग.कैंस लेकिन जब मैं अपने दृश्य में @ Styles.Render ("~ / CssBundle") को जोड़ दूं तो मुझे <लिंक href = "/ CssBundle" rel = "स्टाइलशीट मिल जाएगी। "/> जो मुझे 404 देता है। कोई विचार क्यों?
vsdev

@vsdev मुझे पता है कि यह 4 साल बहुत देर हो चुकी है, लेकिन आपको अपना बंडल चेक करना होगा। आप यह सुनिश्चित कर लें कि आप इसे सही तरीके से जोड़ रहे हैं - इस उत्तर में लाइन केवल ".js"फाइलों का संदर्भ दे रही है । अंदर public static void RegisterBundles(BundleCollection bundles) { ... }आपको कुछ ऐसा करने में सक्षम होना चाहिए bundles.Add(new StyleBundle("~/CssBundle"));और यह आपके CssBundleफ़ोल्डर में सभी सीएसएस फाइलों को पकड़ लेगा । आप नहीं चाहते हैं ScriptBundleकि यह CSS फाइलों के लिए उदाहरण में हो।
vapcguy

17

एनगेट से पैकेज को अपडेट (पुनः स्थापित) करें, आप कमांड का उपयोग कर सकते हैं:

update-Package Microsoft.AspNet.Web.Optimization -reinstall


14

मेरे मामले में यह एक tfs मुद्दा था, क्योंकि tfs ने बायनेरिज़ को बाहर कर दिया है, इसलिए नगेट पीएम को स्थापित की गई डली मिल जाती है और लाइब्रेरी को अपडेट नहीं करते हैं यदि आपके पास समान मुद्दा है:

  • स्रोत नियंत्रण पर जाएं
  • .. \ पैकेज \ Microsoft.Web.Optimization पर नेविगेट करें
  • Lib फ़ोल्डर जोड़ें (बहिष्कृत बाइनरी एक्सटेंशन को अनचेक करें)
  • अपने समाधान को अपडेट करें और पथ से dll संदर्भ जोड़ें

NB: पैकेज फ़ोल्डर yousolution.sln फ़ाइल के समान स्तर पर है


11

इस तरह के पैकेज मैनेजर कंसोल में System.Web.Optimization की स्थापना रद्द करने के लिए nuget का उपयोग करना:

स्थापना रद्द करें-पैकेज Microsoft.AspNet.Web.Optimization

फिर उपयोग करके पुन: स्थापित करना:

Microsoft-spNet.Web.Optimization को स्थापित करें

आपके लिए इस समस्या का समाधान हो सकता है।


1
निश्चित नहीं है कि यह प्रश्न का उत्तर कैसे देता है?
TylerD87

@ TylerD87 सरल परिस्थितियों के एक विशेष सेट को हल करता है और मैं केवल एक ही ऐसा नहीं हूं जो ऐसा पाया गया हो, यदि आप इस सवाल पर टिप्पणियों को पढ़ते हैं तो आप नोटिस करेंगे Snekse ने 29 अप्रैल को कहा '14 16:39 पर उन्हें मेरे द्वारा दिए गए विशेष निर्देशों का पालन करने की आवश्यकता थी और नीचे किसी और ने बहुत बाद में उसी पोस्ट को पोस्ट किया और उसे अपग्रेड किया गया था।
मेज़िफ़र

हो सकता है कि अपने उत्तर को संपादित करें तो यह उत्तर की तरह दिखता है? मुझे यह भी एहसास नहीं था कि आप इस सवाल का जवाब दे रहे हैं या आप क्या सुझाव दे रहे हैं।
TylerD87 8

@ TylerD87 सवाल ऑप्टिमाइज़ेशन के बारे में था और मेरा जवाब ऑप्टिमाइज़ेशन के बारे में था, यह सवाल में विस्तृत समस्या को हल करता है और कम से कम 2 अन्य लोगों द्वारा स्वीकार किया गया है, यदि आप विवरण प्रस्तुत करते हैं कि आपने मेरा उत्तर कैसे गलत समझा और कैसे सबसे अच्छा है मैं व्यापक दर्शकों को एक स्पष्ट उत्तर प्रदान करने के लिए इसमें बदलाव / संशोधन कर सकता हूं फिर मुझे इस तरह के बदलाव करने में खुशी होगी लेकिन रचनात्मक आलोचना के बिना मैं यह निर्धारित करने में असमर्थ हूं कि मैं कैसे सुधार कर सकता हूं।
Myzifer

नमस्ते, मैंने एक संपादन का सुझाव दिया है जो यह स्पष्ट करता है कि मैं किसका उल्लेख कर रहा था। शीर्ष पर टिप्पणियों के माध्यम से पढ़ने के बाद मुझे लगता है कि यह वास्तव में सुझाव है कि काम किया है, लेकिन जिस तरह से आपका जवाब प्रस्तुत किया गया था वह इस बारे में स्पष्ट नहीं था कि आप वास्तव में क्या सुझाव दे रहे थे।
TylerD87 13

6

विजुअल स्टूडियो ओपन विजुअल स्टूडियो 2010 के माध्यम से इसे NUGet से इंस्टॉल करें , टूल्स-> लाइब्रेरी पैकेज मैनेजर-> पैकेज मैनेजर कंसोल चुनें

यह कंसीलर, पेस्ट को खोलेगा

Install-Package Microsoft.AspNet.Web.Optimization 

और दर्ज करें। और आप कर रहे हैं


2

Global.asax application_start (RELEASE मोड आदि में) में सेट करें:

BundleTable.EnableOptimizations = **true**;

सभी स्क्रिप्ट और शैली फ़ाइलों को व्यक्तिगत रूप से रेंडर करने के लिए DEBUG मोड में गलतकरण और झूठ को बदलने के लिए ।


5
इसे web.config के माध्यम से नियंत्रित करना आसान है। यदि <compilation debug="true" />सेट किया गया है (जो डीबग संस्करण बनाते समय बहुत मानक है), तो कोई अनुकूलन नहीं होता है। आम तौर पर एक रिलीज बिल्ड में यह सेटिंग स्वचालित रूप से हटा दी जाती है। BundleTable.EnableOptimizationsकेवल web.config को हटाने के लिए उपयोग किया जाना चाहिए। अधिक जानकारी के लिए: asp.net/mvc/tutorials/mvc-4/bundling-and-minification ("कन्ट्रोलिंग बंडलिंग एंड मिनिफिकेशन" के लिए खोज)
mhu

इससे मुझे बहुत मदद मिली, धन्यवाद। मुझे इसे अक्षम करना पड़ा क्योंकि डॉटलेस + RequestReduce के साथ काम करने से बंडल में गड़बड़ी हो गई थी।
siva.k

यह सेटिंग वास्तव में इस बात पर निर्भर करती है कि क्या आप अपने बंडलों में पूर्व-निर्मित फ़ाइलों का उपयोग कर रहे हैं, या यदि आप गैर-मिनिमाइज्ड का उपयोग कर रहे हैं - यदि आप डिबग या रिलीज़ में नहीं हैं, तो उनमें से प्रत्येक मोड के लिए सर्वोत्तम प्रथाओं को छोड़कर। , आपके पास एक ऐसी परियोजना हो सकती है जिसे आप डिबग मोड में संकलित कर रहे हैं, लेकिन जहां आपके पास है BundleTable.EnableOptimizations = false;क्योंकि आपके बंडलकॉन्फ़िग्स में। आप सभी पूर्व-निर्धारित फ़ाइलों को निर्दिष्ट कर रहे हैं और आप नहीं चाहते कि उन पर एक और न्यूनतमकरण किया जाए।
vapcguy

यह वास्तव में केवल किसी के मुद्दे का जवाब होगा यदि वे अपने बंडलकॉन्फ़िग्स में गैर-प्री-मिनिमाइज्ड फ़ाइलों (अर्थात। फ़ाइलों के बिना .min) का उपयोग कर रहे थे। यदि वे .min फ़ाइलों का उपयोग करते हैं और इसे सही पर सेट करते हैं, तो इसमें समस्याएँ होंगी।
vapcguy
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.