2017-10-19 18 views
8

पर तैनात करते समय FSharp.Core संस्करण, असेंबली संदर्भ त्रुटि को अपग्रेड करना हमने आईआईएस 8 (एएसपी.नेट वेब एपीआई) पर एक वेब अनुप्रयोग की तैनाती के हिस्से के रूप में FSharp.Core.dll को अपग्रेड किया और तैनाती के तुरंत बाद FSharp.Core FileLoad अपवादों को देखना शुरू कर दिया । FSharp.Core.dll संस्करण 4.3.0.0 से 4.3.1.0 पर चला गया।आईएसआई अनुप्रयोग

हमारे मानक स्वचालित परिनियोजन में अपडेट की गई बाइनरी (डीएलएस), global.asax और web.config के साथ एप्लिकेशन फ़ोल्डर सामग्री को प्रतिस्थापित करना शामिल है, इस प्रकार आईआईएस को ऐपपूल रीसायकल करने का कारण बनता है। FSharp.Core.dll बिल्ड के हिस्से के रूप में बंडल किया गया है। हमारे अनुप्रयोग लोड-संतुलित वातावरण में तैनात हैं। हमारी स्वचालित तैनाती स्क्रिप्ट्स एप्लिकेशन निर्देशिका (mywebapp, नीचे) को शुद्ध करने के लिए 'robocopy' का उपयोग करती हैं और नई सामग्री को इसकी जगह कॉपी करती हैं।

ठेठ आईआईएस आवेदन फ़ोल्डर संरचना:

mywebapp/bin/fsharp.core.dll 
mywebapp/bin/custom-fsharp-lib.dll 
mywebapp/bin/custom-csharp-lib.dll 
mywebapp/bin/System.Web.Http.dll, etc… 
mywebapp/global.asax 
mywebapp/web.config 

हम देखा है कि यदि आवेदन तैनाती के दौरान अनुरोधों की सेवा नहीं है, तो तैनाती को सफलतापूर्वक पूरा। https://websiteName/application/endpoint के लिए

क्रिया के अपवाद प्रसंस्करण पोस्ट:: हालांकि, अगर ऐप्लिकेशन नियोजन दौरान लोड और की सेवा अनुरोध किया जा रहा है, आवेदन प्रत्येक अनुवर्ती अनुरोध के लिए एक अपवाद के रूप में जल्द तैनाती पूरा हो गया है के रूप में फेंकता प्रणाली। IO.FileLoadException फ़ाइल या असेंबली 'FSharp.Core, संस्करण = 4.3.1.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a' या निर्भरताओं में से कोई भी लोड नहीं हो सका। स्थित असेंबली की स्पष्ट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है। (HRESULT से अपवाद: 0x80131040) - WebAppFunction.Execute ... .. (आदि) पर

इस अपवाद को देखने के बाद हम एप्लिकेशन बाइनरी जांच की और देखा कि FSharp.Core.dll संस्करण 4.3.1.0 था (यानी उन्नत संस्करण सही ढंग से तैनात किया था) । ऐसा लगता है कि यदि तैनाती के दौरान यातायात की सेवा करते हैं, तो नए तैनात आवेदन को FSharp.Core.dll संस्करण नहीं मिल सकता है, भले ही यह एप्लिकेशन बिन फ़ोल्डर में मौजूद हो। ऐसा लगता है कि एप्लिकेशन के पास अभी भी पुराने FSharp.Core.dll संस्करण पर कुछ संभाल हो सकता है।

यह समस्या सर्वर रीबूट, आईआईएसआरसेट या आईआईएस ऐपपूल रीसाइक्लिंग के बाद बनी रहती है। हमारा समाधान पिछले निर्माण (FSharp.Core.dll v4.3.0.0 के साथ) पर तैनाती को रोलबैक करना था जिसके बाद आवेदन पुनर्प्राप्त हुआ। हमने ऐपपूल के साथ लोड बैलेंसर से बाहर खींचने के दौरान व्यक्तिगत रूप से प्रत्येक सर्वर को नए निर्माण (FSharp.Core.dll v4.3.1.0 के साथ) तैनात किया, इस प्रकार तैनाती के दौरान कोई लोड सुनिश्चित नहीं किया, और नया निर्माण सफलतापूर्वक तैनात किया गया।

हमने वेब अनुप्रयोगों के तैनाती के दौरान इस व्यवहार को पहले कभी नहीं देखा है, भले ही असेंबली संस्करणों को अपग्रेड किया जा रहा हो या नहीं। क्या किसी और ने कभी भी इस समस्या को FSharp.Core.dll के साथ देखा है, और यदि ऐसा है, तो क्या व्यवहार समझाया जा सकता है?

उत्तर

0

आप को जोड़ने के लिए विधानसभा अपने web.config में अनुप्रेषित पड़ सकता है:

<dependentAssembly> 
     <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" /> 
</dependentAssembly> 

कि त्रुटि आप का वर्णन किया है से पहले (नहीं हालांकि तैनाती के सही समय के दौरान) के ऊपर हमें हुआ है और क्या है हमेशा हल करता है।

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