2014-10-22 6 views
5

यह करने के लिए एएसपी MVC संस्करण 4.0.0.0 से बदलाव को संभालने के लिए कैसे मैं भी इस मुद्दे को जहाँ मेरे विकास मशीन पर Windows अद्यतन की वजह से मेरी MVC 4 परियोजना काम करना बंद करने के लिए किया था Windows update caused MVC3 and MVC4 stop working4.0.0.1

करने के लिए एक अनुवर्ती है। मैंने लक्ष्य संस्करण 4.0.0.1 के असेंबली संदर्भ को बदल दिया और यह काम करना शुरू कर दिया। मेरे लिए।

मेरी समस्या यह है कि एप्लिकेशन को कई वेब सर्वर पर तैनात किया जाता है। दरअसल हमारे पास एक बिल्ड सर्वर है जहां ग्राहक संस्करण बनाए जाते हैं और फिर कई वेब सर्वर होते हैं।

पहला प्रश्न: जब हम उत्पादन सर्वर पर विंडोज अपडेट चलाते हैं तो ऐप के पुराने संस्करण काम करना बंद कर रहे हैं? मुझे लगता है कि उत्तर "हां" है। हमने अभी तक बिल्ड या उत्पादन मशीनों पर विंडोज अपडेट नहीं चलाया है।

संदर्भ बदलना मतलब था कि यह अब निर्माण मशीन पर नहीं बनाया जा सकता है। मैं विशिष्ट संस्करण ध्वज को गलत पर सेट करके और स्थानीय को कॉपी करने के लिए इसे चारों ओर प्राप्त कर सकता हूं। फिर यह मेरे विकास पर्यावरण और निर्माण सर्वर दोनों पर बनाता है।

प्रश्न: यदि मेरे पास विशिष्ट संस्करण गलत है तो चेक कितना ढीला है? क्या यह 4.0.0.x की अनुमति देता है? 4.0.x.x? 4.x.x.x? या x.x.x.x?

हालांकि, यह थोगू कॉन्फ़िगरेशन में भी थोगूह बनाता है, फिर परीक्षण वेब सर्वर पर चलाने में विफल रहता है (असेंबली नहीं मिल सकता)। लाइन

<bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/> 

के लिए है

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity culture="neutral" name="System.Web.Mvc" publicKeyToken="31BF3856AD364E35"/> 
    <bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/> 
    <bindingRedirect newVersion="2.0.0.0" oldVersion="1.0.0.0"/> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/> 
    <bindingRedirect newVersion="4.0.0.0" oldVersion="1.0.0.0-3.0.0.0"/> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/> 
    <bindingRedirect newVersion="2.0.0.0" oldVersion="1.0.0.0"/> 
    </dependentAssembly> 
</assemblyBinding> 
समस्या

: समस्या यहाँ है कि मैं अपने web.config में निम्नलिखित है (माइक्रोसॉफ्ट निर्देश जब मैं MVC 2 से MVC 4 करने के लिए उन्नत के अनुसार) System.Web.Mvc असेंबली। (यह 4.0.0.04.0.0.1 बिल्कुल उस पंक्ति में कहता था।) यदि मैं परीक्षण सर्वर पर 4.0.0.0 पर वापस बदलता हूं तो यह काम करता है।

मेरी समस्या दो गुना है। आंशिक रूप से यह है कि मैं स्थानीय रूप से और हमारे निर्माण/उत्पादन सर्वर दोनों को बनाने और चलाने में सक्षम होना चाहता हूं। हालांकि, हमारे पास एक ऐसी स्थिति है जहां हम एक ही सर्वर पर हमारे आवेदन के विभिन्न संस्करणों को चलाने वाले कई ग्राहकों को होस्ट करते हैं। हम अपने सभी ग्राहकों को इस संस्करण अपडेट फिक्स के कारण एक बार में नवीनतम संस्करण में अपग्रेड करने के लिए मजबूर नहीं कर सकते हैं - कुछ और के अलावा वेब एप्लिकेशन केवल अनुप्रयोगों के एक बड़े सूट का हिस्सा है, इसलिए हमें उन्हें बहुत अपग्रेड करने के लिए मजबूर करना होगा!

मुझे लगता है कि एक विकल्प का उपयोग अभी भी पुराने संस्करण में से प्रत्येक को चेकआउट करना है, एमवीसी संस्करण संख्या अपडेट करें और एक नया संस्करण बनाएं। फिर जब हम वेब सर्वर को अपडेट करते हैं तो हमें सभी उस सर्वर के ग्राहकों को अपने वर्तमान संस्करण के एक नए (4.0.0.1 संगत) संस्करण में अपडेट करना होगा। मैं वास्तव में संभवतः कई संस्करणों को अद्यतन, प्रतिबद्ध और पुनर्निर्माण करने से बचना चाहता हूं।

एक और विकल्प वेब सर्वर पर विंडोज अपडेट नहीं चलाएगा और बिल्ड मशीन पर 4.0.0.0 और 4.0.0.1 डीएल दोनों को स्थापित और स्थापित करेगा। फिर हम पुराने और नए संस्करण दोनों बना सकते हैं। चूंकि किसी भी नए संस्करण (4.0.0.1 का उपयोग करके) में एमवीसी असेंबली (पुराने वाले नहीं) पर कॉपीलोकल सेट सही है, इसलिए वेब सर्वरों को स्वयं अपडेट किए बिना वेब सर्वर पर तैनात करने में सक्षम होना चाहिए।

सवाल:

  • किसी को भी अगर यह दोनों संस्करणों को एक साथ स्थापित किया जा सकता है पता है? मुझे उम्मीद है कि मैं बस 4.0.0.0 डीएल को सहेज सकता हूं, विंडोज अपडेट चला सकता हूं और फिर पुराने डीएलएल को नए के साथ जीएसी में कॉपी कर सकता हूं।
  • इस पैच द्वारा सुरक्षा जोखिम को कितना गंभीर है? क्या यह लोगों को पुराने संस्करणों को थोड़ी देर तक चलाने की अनुमति देने में एक समस्या है? क्या वेब सर्वर पर पुराने .dll को सुरक्षा जोखिम है या केवल उन अनुप्रयोगों के लिए है जो इसका उपयोग करते हैं?
  • क्या bindingRedirect से 4.0.0.x करने का कोई तरीका है? या क्या बाध्यकारी रीडायरेक्ट को पूरी तरह से हटा देना संभव है?

मुझे विश्वास नहीं है कि मैं इस स्थिति में एकमात्र हूं और उन समाधानों के लिए भी किसी भी सुझाव का स्वागत करता हूं जिन पर मैंने सोचा नहीं है।

उत्तर

0

मैं एक टीम का सदस्य था जिसने एक ही समस्या को थोड़ा अलग कोण से सामना किया। सुरक्षा अद्यतन गलत होने पर त्रुटि संदेश यह भ्रामक और व्याख्या करने में कठोर हो सकता है। हमने तैनाती में भाग लिया और त्रुटियों का निर्माण किया जब हमने अपने ऐप्स को विभिन्न वातावरण में प्रकाशित करने का प्रयास किया। मूल कारण यह था कि इस पैच को कुछ परीक्षण वातावरण पर विंडोज अपडेट के माध्यम से लागू किया गया था लेकिन अन्य सर्वरों पर नहीं। जब हम अपने आवेदन को तैनात करते हैं तो पैच नहीं होने वाला कोई भी सर्वर क्रैश हो जाएगा। मैं अनुशंसा करता हूं कि आपकी सिस्टम टीम पैच लागू करे और इस डीएलएल को संदर्भित करने के लिए अपने सभी एप्लिकेशन को अपग्रेड करें। Security updates क्योंकि लाइब्रेरी संदर्भित स्रोत नियंत्रण में अनदेखा किया गया है, लेकिन फिर भी वेब कॉन्फ़िगरेशन में वर्बॉली से वर्तनी की गई है, इसे तुरंत संबोधित करने की आवश्यकता है। कुछ वातावरण आपको सही क्लिक करने और स्थानीय स्तर पर उपयोग करने के लिए कौन सी एमवीसी डीएल संस्करण चुनने की अनुमति देंगे और फिर भी बिना किसी समस्या के आपके आवेदन को तैनात करेंगे। यदि आप वेब परिनियोजन का उपयोग कर रहे हैं, और स्विच करने की क्षमता होनी चाहिए, तो आप प्रत्येक Transforms web config के लिए वेब कॉन्फ़िगरेशन ट्रांसफॉर्म लिख सकते हैं। इस समस्या को ठीक करते समय मैंने देखा कि एक बात (4.0.0.1 तक अपग्रेड करना) यह है कि मेरे प्रोजेक्ट में MVC.dll के नवीनतम संस्करण में अपग्रेड करने से मुझे nuget संकुल के नवीनतम संस्करण प्राप्त करने की अनुमति मिली। यदि आप पुराने संस्करणों के साथ अपग्रेड नहीं करते हैं और रहते हैं, तो आप एमवीसी जावास्क्रिप्ट, jquery, और अन्य पुस्तकालयों के पुराने संस्करणों के साथ अटक जाएंगे।