यह करने के लिए एएसपी 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.0
4.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 करने का कोई तरीका है? या क्या बाध्यकारी रीडायरेक्ट को पूरी तरह से हटा देना संभव है?
मुझे विश्वास नहीं है कि मैं इस स्थिति में एकमात्र हूं और उन समाधानों के लिए भी किसी भी सुझाव का स्वागत करता हूं जिन पर मैंने सोचा नहीं है।