2011-01-20 13 views
22

मैं सिर्फ हमारे IIS7 होस्टिंग पर्यावरण के लिए एक MVC3 आवेदन की तैनाती की कोशिश की है, लेकिन मैं निम्नलिखित अपवाद wtih प्रस्तुत किया जा रहा है:MVC3 तैनाती निर्भरता समस्याएं

प्रकार 'Microsoft.Web.Infrastructure लोड नहीं कर सका। DynamicModuleHelper.DynamicModuleUtility ' असेंबली ' माइक्रोसॉफ्ट.Web.Infrastructure, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 31bf3856ad364e35 '। विवरण: वर्तमान वेब अनुरोध के निष्पादन के दौरान एक अनचाहे अपवाद हुआ। त्रुटि के बारे में अधिक जानकारी के लिए कृपया स्टैक ट्रेस की समीक्षा करें और यह कोड में कहां से उत्पन्न हुआ।

अपवाद विवरण: System.TypeLoadException: नहीं सका लोड प्रकार 'Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility' विधानसभा से 'Microsoft.Web.Infrastructure, संस्करण = 1.0.0.0, संस्कृति = तटस्थ , पब्लिककेट टोकन = 31bf3856ad364e35 '।

कोई सुझाव?

ऐप को बिन तैनात नहीं किया जा रहा है क्योंकि मैंने वेब सर्वर पर एएसपी.Net वेब पेज और एमवीसी 3 स्थापित किया है।

+2

http://stackoverflow.com/questions/4723646/asp-net-mvc-3-which-dlls-need-to-be-deployed/4723778#4723778 – Omar

+0

बस स्पष्ट होने के लिए, मैं नहीं हूं बिन इस ऐप को तैनात कर रहा है - मेरे पास पहले से ही सर्वर पर एमवीसी 3 स्थापित है। –

+0

ऐप को तैनात करने के लिए अन्य तरीके क्या हैं? –

उत्तर

45

ऐसा इसलिए है क्योंकि Microsoft.Web.Infrastructure आपके जीएसी में नहीं है। आपको इस परियोजना को अपनी परियोजना में जोड़ना होगा। संदर्भ पर राइट क्लिक करें और गुणों पर जाएं, फिर प्रतिलिपि को स्थानीय पर सेट करें।

Copy Local

आउटपुट (ध्यान न दें Ninject और NCU):

alt text

+0

मैंने सी: \ विंडोज \ माइक्रोसॉफ्ट.नेट \ असेंबली \ GAC_MSIL \ Microsoft.Web.Infrastructure \ v4.0_1.0.0.0__31bf3856ad364e35 और डीएलएल निश्चित रूप से वहां जांच की है। मेरे पास इस परियोजना पर निर्भरता नहीं है क्योंकि यह खड़ा है। –

+0

आपको अन्य सामानों का एक समूह भी संदर्भित करना पड़ सकता है। रेजर, सिस्टम.Webpages, आदि जैसी सामग्री यह आपके प्रोजेक्ट में नहीं होगी, लेकिन आप फ्रेमवर्क असेंबली से जोड़कर इसका संदर्भ दे सकते हैं। –

+0

क्या इसे System.Web.MVC DLL में शामिल नहीं किया जाना चाहिए? –

1

करें कि आपका सर्वर पर रूट web.config फ़ाइल (यहीं कहीं की तरह स्थित: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config) सुनिश्चित निम्नलिखित है प्रविष्टि:

<configuration> 
    <location allowOverride="true"> 
    <system.web> 
     <fullTrustAssemblies> 
     <add 
      assemblyName="Microsoft.Web.Infrastructure" 
      version="1.0.0.0" 
      publicKey="[bunch of letters and numbers]" 
     /> 

यदि यह गायब है तो इसका मतलब है कि किसी ने आपके .NET 4 से गड़बड़ की है स्थापना।

+3

वह 'publicKey' डरावना दिखता है। – Omar

+0

मैंने इसे सरल बना दिया :) प्वाइंट है, एमवीसी 3 और वेबपृष्ठों के लिए माइक्रोसॉफ्ट.Web.Infrastructure के लिए काम करने की आवश्यकता है। – marcind

+0

हाँ। इसे मिला और ठीक लग रहा है। –

4

Microsoft.Web.Infrastructure अब एक Nuget पैकेज है, और यह बिन निर्देशिका की तैनाती सक्षम करने के लिए अपनी परियोजना के लिए जोड़ा जा सकता है -

http://nuget.org/packages/Microsoft.Web.Infrastructure

+2

मेरे पास मेरे प्रोजेक्ट में पैकेज स्थापित है, लेकिन परियोजना डीएलएल का संदर्भ नहीं देती है। मैं अनुमान लगा रहा हूं कि रीशेर्पर के "अप्रयुक्त संदर्भों को हटाएं" के एक अति उत्साही अनुप्रयोग को इससे अधिक हटा दिया जा सकता है ... – Zarepheth

6

यह एक संदर्भ सफाई करने के बाद पता चला है, यह Microsoft.Web.Infrastructure हटा दिया, लेकिन नहीं packages.config फ़ाइल से। Package Manager Console का उपयोग करके इसे फिर से जोड़ने का प्रयास करने के बाद, विजुअल स्टूडियो का कहना है कि यह पहले से स्थापित है जो गलत है क्योंकि इसे हटा दिया गया था।

मैं तो packages.config फ़ाइल

<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" /> 

में कोड की पंक्ति हटा दिया और आदेश को फिर से

PM> Install-Package Microsoft.Web.Infrastructure 

भाग गया इस के बाद, अब यह ठीक काम करता है।

+3

भले ही कोई पैकेज स्थापित हो, फिर भी आप आदेश का उपयोग करके किए गए कार्यों को करने के बजाय पुन: स्थापना कर सकते हैं: अद्यतन-पैकेज Microsoft.Web.Infrastructure- पुनर्स्थापित करें –