2012-03-01 13 views
13

Bundling मैं नए minification बाहर की कोशिश कर दिया गया है और ASP.NET MVC 4 में सुविधा बांध दिया, और यह जब तक आप CSS और JS फ़ाइलों के लिए डिफ़ॉल्ट फ़ोल्डर परंपराओं का उपयोग महान काम करता है।ASP.NET अनुकूलन -

/Content 
/Scripts 

मैं आमतौर पर मैं इस तरह अपने खुद के बंडलों को पंजीकृत करने की कोशिश की एक फ़ोल्डर इस

/Static/Css 
/Static/Js 

तरह स्टेटिक बुलाया में सीएसएस और स्क्रिप्ट डाल:

public static class BundleCollectionExtensions 
{ 
    public static void RegisterScriptsAndCss(this BundleCollection bundles) 
    { 
     var bootstrapCss = new Bundle("~/Static/Css", new CssMinify()); 
     bootstrapCss.AddDirectory("~/Static/Css", "*.css"); 
     bootstrapCss.AddFile("~/Static/Css/MvcValidation.css"); 
     bootstrapCss.AddFile("~/Static/Css/bootstrap-responsive.min.css"); 
     bootstrapCss.AddFile("~/Static/Css/bootstrap.min.css"); 

     bundles.Add(bootstrapCss); 

     var bootstrapJs = new Bundle("~/Static/Js", new JsMinify()); 
     bootstrapJs.AddDirectory("~/Static/Js", "*.js"); 
     bootstrapJs.AddFile("~/Static/Js/jquery-1.7.1.min.js"); 
     bootstrapJs.AddFile("~/Static/Js/jquery.validate.min.js"); 
     bootstrapJs.AddFile("~/Static/Js/jquery.validate.unobtrusive.min.js"); 
     bootstrapJs.AddFile("~/Static/Js/bootstrap.min.js"); 
     bootstrapJs.AddFile("~/Static/Js/gunsforhire.js"); 

     bundles.Add(bootstrapJs); 
    } 
} 

और

में
Global.ascx.cs 

मैंने यह किया:

BundleTable.Bundles.RegisterScriptsAndCss(); 

उत्पन्न मार्कअप इस तरह दिखता है:

<link href="/Static/Css?v=D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41" rel="stylesheet" type="text/css" /> 

<script src="/Static/Js?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1" type="text/javascript"></script> 

हालांकि यह काम नहीं करता है, अनुरोध इस तरह दिखता है:

Request URL:http://localhost:49603/Static/Js?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1 
Request Method:GET 
Status Code:301 Moved Permanently (from cache) 
Query String Parametersview URL encoded 
v:mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1 

Request URL:http://localhost:49603/Static/Js/?v=mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1 
Request Method:GET 
Status Code:404 Not Found 
Request Headersview source 
Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Host:localhost:49603 
Referer:http://localhost:49603/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko)  Chrome/17.0.963.56 Safari/535.11 
Query String Parametersview URL encoded 
v:mbKbf5__802kj-2LS5j9Ba-wvSxBCKNMQGBgzou6iZs1 
Response Headersview source 
Cache-Control:private 
Content-Length:4757 
Content-Type:text/html; charset=utf-8 
Date:Thu, 01 Mar 2012 19:05:44 GMT 
Server:Microsoft-IIS/7.5 
X-Powered-By:ASP.NET 
X-SourceFiles:=?UTF-8?B? QzpcQENvZGVccGVsbGVccGVsbGVoZW5yaWtzc29uLnNlXHNyY1xXZWJcU3RhdGljXEpzXA==?= 

क्या मैं गलत कर रहा हूँ?

अद्यतन

मुझे लगता है कि मैं अंत में निम्न तरीके से हल करने में सक्षम था:

  1. AddDirectory निकाला जा रहा है बंडलों रास्तों कि प्रतिबिंबित नहीं करते देते bootstrapCss.AddDirectory("~/Static/Css", "*.css");

  2. कॉल असली निर्देशिका संरचना

+1

आपके द्वारा 2 का मतलब क्या है "बंडल पथ देना जो वास्तविक निर्देशिका संरचना को प्रतिबिंबित नहीं करता है"? – CallMeLaNN

+0

यदि आपके पास इस/स्क्रिप्ट/ऐप की निर्देशिका संरचना है तो आपको उस पथ का उपयोग बंडल में नहीं करना चाहिए ("~/स्क्रिप्ट/ऐप ") या कम से कम मुझे कुछ समस्याएं थीं जो एमवीसी 4 आरसी में थीं। पेराप एस अब कोई समस्या नहीं है। – Pelle

+0

हाय, क्या आपके पास कोई सुराग है जो नामस्थान मुझे याद आ रही है? मुझे bootstrapcss में Addfile या AddDirectory नहीं मिल रहा है। ? – Sakthivel

उत्तर

4

कुछ दिन पहले ऐसा किया और यह अच्छी तरह से काम किया। मैंने Helper नामक एक फ़ोल्डर बनाया और फिर मैंने CssJsBuilder नामक एक नई कक्षा बनाई।

मेरी कक्षा इस तरह दिखता है:

public static void Initializing() 
{ 
    IBundleTransform jstransformer; 
    IBundleTransform csstransformer; 

#if DEBUG 
      jstransformer = new NoTransform("text/javascript"); 
      csstransformer = new NoTransform("text/css"); 
#else 
     jstransformer = new JsMinify(); 
     csstransformer = new CssMinify(); 
#endif 

      var bundle = new Bundle("~/Scripts/js", jstransformer); 

      bundle.AddFile("~/Scripts/jquery-1.6.2.js", true); 
      bundle.AddFile("~/Scripts/jquery-ui-1.8.11.js", true); 
      bundle.AddFile("~/Scripts/jquery.validate.unobtrusive.js", true); 
      bundle.AddFile("~/Scripts/jquery.unobtrusive-ajax.js", true); 
      bundle.AddFile("~/Scripts/jquery.validate.js", true); 
      bundle.AddFile("~/Scripts/modernizr-2.0.6-development-only.js", true); 
      bundle.AddFile("~/Scripts/AjaxLogin.js", true); 
      bundle.AddFile("~/Scripts/knockout-2.0.0.debug.js", true); 
      bundle.AddFile("~/Scripts/bootstrap.js", true); 
      bundle.AddFile("~/Scripts/dungeon.custom.js", true); 

      BundleTable.Bundles.Add(bundle); 

      bundle = new Bundle("~/Content/css", csstransformer); 

      bundle.AddFile("~/Content/bootstrap-responsive.css", true); 
      bundle.AddFile("~/Content/bootstrap.css", true); 

      BundleTable.Bundles.Add(bundle); 

      bundle = new Bundle("~/Content/themes/base/css", csstransformer); 

      bundle.AddFile("~/Content/themes/base/jquery.ui.core.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.resizable.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.selectable.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.accordion.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.autocomplete.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.button.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.dialog.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.slider.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.tabs.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.datepicker.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.progressbar.css", true); 
      bundle.AddFile("~/Content/themes/base/jquery.ui.theme.css", true); 

      BundleTable.Bundles.Add(bundle); 
     } 

उसके बाद। Global.asax पर जाएँ:

  1. निकालें या बाहर टिप्पणी BundleTable.Bundles.RegisterTemplateBundles()
  2. Application_Start() विधि को CssJsBuilder.Initializing() जोड़ें।
  3. परियोजना को मनोरंजन करें और फिर इसे फिर से शुरू करें।

आशा इस भी आप के लिए काम करता है।

2

Global.asax.cs में

BundleTable.Bundles बदलें।RegisterTemplateBundles();

BundleTable.Bundles.EnableDefaultBundles साथ

();

0

यहां बताया गया है कि यह मेरे लिए कैसे काम करता है।

यह मैं केवल का उपयोग default.aspx फ़ाइल नहीं Global.asax (अगर आप चाहते हैं आप हमें यह कर सकते हैं) इस उदाहरण में

2 निर्देशिका का उपयोग Content2 और Scripts2

संस्करण सरल है

Content2 में मैं 2 सीएसएस फ़ाइलें वर्ग = "naziv" के लिए एक और वहाँ 2 फाइलों के साथ समारोह f1() परिभाषा एक और f2 के साथ अन्य कर रहे हैं वर्ग = "naziv2"

Scripts2 में

के लिए अन्य (है) definitio n

/bin निर्देशिका में वहाँ 3 फ़ाइलें होना चाहिए:

Microsoft.Web.Infrastructure.dll, System.Web.Optimization.dll, WebGrease.dll

<%@ Page Title="Home Page" Language="vb" debug="true"%> 
<%@ Import namespace="System.Web.Optimization" %> 

<script runat="server" > 
    Sub Page_Load(sender As Object, e As EventArgs) 
     System.Web.Optimization.BundleTable.EnableOptimizations = True ''true will force optimization even if debug=true 

     Dim siteCssBundle = New StyleBundle("~/Content2/css") 
     siteCssBundle.IncludeDirectory("~/Content2", "*.css") 
     BundleTable.Bundles.Add(siteCssBundle) 

     Dim siteJsBundle = New ScriptBundle("~/Scripts2/js") 
     siteJsBundle.IncludeDirectory("~/Scripts2", "*.js") 
     BundleTable.Bundles.Add(siteJsBundle) 
    End Sub 
</script> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head> 
    </head> 
    <body onload="f1(); f2();"> 
     <%: Styles.Render("~/Content2/css")%> 
     <%: Scripts.Render("~/Scripts2/js")%> 
     <br /> 
     <span class="naziv">Span 1</span> <br /> 
     <span class="naziv2">Span 2</span> <br /> 
    </body> 
</html> 
7

आप "गलत" क्या कर रहे हैं यह है कि आपका बंडल पथ वास्तविक पथ से मेल खाता है। जैसा कि मैं इसे समझता हूं, जब "/ स्टेटिक/सीएसएस? V = D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41" के लिए अनुरोध आता है, रूटिंग इंजन पहले भौतिक पथ की तलाश करता है। यह आपके फ़ोल्डर "स्थिर" के साथ एक मैच पाता है और यह उसमें एक फ़ाइल ढूंढने का प्रयास करता है जो "सीएसएस? V = D9JdmLZFFwjRwraNKfA1uei_YMoBoqLf-gFc0zHivM41" से मेल खाता है। जब यह एक नहीं मिल पाता है, क्योंकि यह अस्तित्व में नहीं है, तो यह 404 देता है। (मैंने एक पहुंच भी अस्वीकार कर दी है।) जब रूटिंग इंजन को भौतिक फ़ाइल पथ नहीं मिल रहा है तो यह अन्य हैंडलर जैसे दिखता है अनुरोध को पूरा करने के लिए बंडल और कमीशन।

वैसे भी मुझे लगता है कि आपने इसे अपनी टिप्पणियों से बाहर निकाला है, लेकिन मुझे यकीन नहीं है कि यह आपके प्रश्न को ढूंढने वाले किसी भी व्यक्ति के लिए बहुत स्पष्ट होगा।

var bootstrapCss = new Bundle("~/Static/Css", new CssMinify()); 

करने के लिए:: बस से अपना पंजीकरण बदलने

var bootstrapCss = new Bundle("~/bundles/Css", new CssMinify()); 

यदि आप यह बदलाव, तो अपनी समस्या दूर जाना होगा, (दी कोई शारीरिक रास्ता है कि करने के लिए "समूह" मेल खाती है

संबंधित मुद्दे