ASP.NET MVC 4 बीटा को स्थापित करने के बाद InvalidCastException को फेंक दिया जाता है


81

ASP.NET MVC 3 के साथ मशीन पर ASP.NET MVC 4 बीटा को स्थापित करने के बाद मुझे निम्नलिखित अपवाद प्राप्त हुए हैं।

System.InvalidCastException को उपयोगकर्ता कोड संदेश = [A] द्वारा अनहेल्ड किया गया था। [A] System.Web.WebPages.Razor.Configuration.HostSection को [B] में नहीं डाला जा सकता। System.Web.WebPages.Rogor.Configuration.HostSection टाइप A की उत्पत्ति 'System.Web.WebPages.Razor, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 31bf3856ad364e35' से 'संदर्भ' स्थान पर 'C': 'Windows \ Microsoft.Net \ Assembly \ GAC_MSIL \ System' से होती है। .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '। टाइप B की उत्पत्ति 'System.Web.WebPages.Razor, वर्जन = 2.0.0.0, कल्चर = न्यूट्रल, PublicKeyToken = 31bf3856ad364e35' संदर्भ में 'डिफ़ॉल्ट' स्थान पर 'C': \ Windows \ Microsoft.Net \ विधानसभा \ GAC_MSIL \ System से होती है। .Web.WebPages.Razor \ v4.0_2.0.0। 0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '। स्रोत = System.Web.WebPages.Razor

स्टैक ट्रेस:

System.Web.WebPages.Razor.WebRazorHostFactory.GetRazorSection (String virtualPath) पर System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig (String virtualPath, String physicalPath) पर System.Web.Web.Pages.com System.Web.WebPages.Razor.RazorBuildProvider.CreateHost () System.Web। GetCompilerTypeFromBuildProvider (BuildProvider buildProvider) सिस्टम में।CompileWebFile (VirtualPath virtualPath) System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert पर System.Web.Compilation.BuildManager.GetVPathBuildResultInternal (VirtualPath virtualPath, बूलियन noBuild, बूलियन allowCrossApp, बूलियन allowBuildInPrecompile, बूलियन throwIfNotFound, बूलियन ensureIsUpToDate) (HttpContext संदर्भ, VirtualPath virtualPath पर ,। Web.Mvc.IBuildManager.FileExists (String virtualPath) System.Web.Mvc.BuildManagerViewEngine पर।FileExists (ControllerContext नियंत्रकContext, String virtualPath) System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName (नियंत्रककनेक्टीम नियंत्रककनेक्ट), सूची`1 स्थानों, स्ट्रिंग नाम, स्ट्रिंग कंट्रोलरनाम, स्ट्रिंग क्षेत्र, नाम, स्ट्रिंग नाम, नाम। Mvc.VirtualPathProviderViewEngine.GetPath (कंट्रोलर कॉन्टेक्स्ट कंट्रोलर कान्टेक्स्ट, स्ट्रिंग [] स्थान, स्ट्रिंग [] क्षेत्रलोकेशन, स्ट्रिंग स्थानप्रोपरिनाम, स्ट्रिंग नाम, स्ट्रिंग नियंत्रकनाम, स्ट्रिंग कैशकेयरिफ़िक्स, बुलियन यूज़केरे, स्ट्रींग [।]] (SystemContext नियंत्रक नियंत्रकb__b (IViewEngine e) System.Web.Mvc.ViewEngineCollection.Find (Func`2 लुकअप, बूलियन TrackSearchedPaths) System.Web.Mvc.ViewEngineCollection.FindView (कंट्रोलरकोनटेक्स्ट कंट्रोलर कान्टेक्स्ट, स्ट्रिंग व्यूनेम, सिस्टम नाम) पर नाम। .ViewResult.FindView (कंट्रोलरकोनटेक्स्ट संदर्भ) System.Web.Mvc.ViewResultBase.ExecuteResult (कंट्रोलरऑन्टेक्स्ट संदर्भ) System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (कंट्रोलरकोनटेक्स्ट कंट्रोलर कोंटेक्स्ट, सिस्टमऑनलाइन सिस्टम) पर सिस्टम। c__DisplayClass1c.b__19 () System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (IResultFilter फ़िल्टर, ResultExecutingContext preContext, Func`1 निरंतरता) System.Web.Mvc.ControllerActionForInInInInInforInInforInInform पर स्थित हैं।> c__DisplayClass1e.b__1b () System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters पर (कंट्रोलर कोन्टेक्स्ट कंट्रोलर नियंत्रक), IList`1 फ़िल्टर, ActionResult actionResult) System.Web.Mvc.ControllerActionInviewer.gov.in पर। Mvc.Controller.ExecuteCore () पर [project_namespace] .Controllers.GlobalizationController.ExecuteCore () में [file_path] System.Web.MvCControllerBase.Execute (RequestContext requestContext) पर System.Web.MCc.Cont.nic.in System.Web.Mvc.MvcHandler पर Mvc.IController.Execute (RequestContext requestContext) <> c__DisplayClass6। <> C__DisplayClassb .bb5 () System.Web.Mvc.Async.AsyncResultWrapper पर <> ___Dplayplay। Web.Mvc।Async.AsyncResultWrapper। <> C__DisplayClass8`1.b__7 (IAsyncResult _) System.Web.Mvc.Async.AsyncResultWrapper.WrappedAAsResult`1.End () पर। System.Web.MvcMvcHandler <> c__DisClClis पर क्लिक करें System.Web.Mvc.SecurityUtil.b__0 (Action f) System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Action क्रिया) पर System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) System.Web.Mvc.MandHandler पर। System।Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () System.Web.Mvc.MvcHandler पर। <> c.WDisplayClasse.b__d () System.Web.Mvc.SecurityUtil.b__0 (Action f) के लिए System.Web पर। Mvc.SecurityUtil.ProcessInApplicationTrust (Action क्रिया) System.Web.Mvc.MvcHandler.EndProcessRRestest (IAsyncResult asyncResult) पर System.Web.M.MvcHandler.System.Web.HttpAsyncHandler.EndProcessequest (ISync) CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () System.Web.HttpApplication.ExecuteStep (IExecutionStep कदम, बूलियन और पूरा किया गया)Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End () System.Web.Mvc.MvcHandler पर। <> c.WDisplayClasse.b__d () System.Web.Mvc.SecurityUtil.b__0 (Action f) के लिए System.Web पर। Mvc.SecurityUtil.ProcessInApplicationTrust (Action क्रिया) System.Web.Mvc.MvcHandler.EndProcessRRestest (IAsyncResult asyncResult) पर System.Web.M.MvcHandler.System.Web.HttpAsyncHandler.EndProcessequest (ISync) CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () System.Web.HttpApplication.ExecuteStep (IExecutionStep कदम, बूलियन और पूरा किया गया)System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Action क्रिया) System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResorts asyncResult) पर System.Web.Mvc.MandHandler.System.Web.IHttpAsyncHindlerHandler पर स्थित है। IAsyncResult परिणाम) System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () पर System.Web.HppApplication.ExecuteStep (IExecutionStep चरण, बूलियन और पूरा किया गया)System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Action क्रिया) System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResorts asyncResult) पर System.Web.MvcMandHandler.System.Web.IHttp://syncAndhindi.nic.in पर क्रिया (f) करें। IAsyncResult परिणाम) System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () पर System.Web.HppApplication.ExecuteStep (IExecutionStep चरण, बूलियन और पूरा किया गया)HttpApplication.IExecutionStep.Execute () पर System.Web.HttpApplication.ExecuteStep (IExecutionStep कदम, बूलियन और पूरा किया गया)HttpApplication.IExecutionStep.Execute () पर System.Web.HttpApplication.ExecuteStep (IExecutionStep कदम, बूलियन और पूरा किया गया)

यह मुझे पूरी तरह से ब्लॉक करता है और जबकि मैं बीटा रखना चाहूंगा, अपवाद से छुटकारा पाने के लिए मुझे इसे पूरी तरह से हटाने की आवश्यकता हो सकती है।


1
क्या आप किसी भी संयोग से .net 4.5 देव पूर्वावलोकन चला रहे हैं? (एक वर्तमान बीटा संस्करण के साथ असंगत है कि) (सिर्फ रिकार्ड के लिए, मुझे जो downvoted नहीं था, सवाल वैध है)
माइकल Stum

1
नहीं, मैं 4.5 को बिल्कुल नहीं चलाता।
निकोस बैक्सेवनिस

3
गंभीरता से, यह नीचे-मतदान क्यों है? मैं किसी ऐसी चीज के लिए प्रतिक्रिया प्रदान करता हूं जो दूसरों के लिए हो सकती है।
निकोस बैक्सेवनिस

@MichaelStum ठीक है कोई चिंता नहीं। :)
निकोस बैक्सेवनिस

गलतफहमी के लिए खेद है। मैं इस प्रश्न को "पसंदीदा" करने की कोशिश कर रहा था और गलत क्लिक किए गए = पी डाउनवोट को हटा दिया गया, पसंदीदा को इस बार सही ढंग से जोड़ा गया।
जोश डारनेल

जवाबों:


31

अपने web.config में निम्नलिखित जोड़ने का प्रयास करें:

<appSettings>
  <add key="webpages:Version" value="1.0.0.0"/>
</appSettings>

समस्या कई बिल्ड प्रदाताओं के पंजीकृत होने और नवीनतम जीतने के कारण हो सकती है।


101

मुझे भी यही समस्या थी, लेकिन ASP.NET MVC 3 को ASP.NET MVC में स्थानांतरित करते समय 4. इस तरह से मुझे इस विषय पर मिला। मुझे समस्या का हल मिल गया है, लेकिन इसका स्रोत अलग है, यह WebPagesसंस्करण से नहीं है ।

मैंने आधिकारिक गाइड (इसलिए कहने के लिए) को ASP.NET MVC 3 प्रोजेक्ट को ASP.NET MVC 4 में अपग्रेड किया है

समस्या को हल करने के लिए, आपको Web.Config (शायद पहले जोड़े गए लोगों के आसपास) में जोड़ना होगा:

<runtime><!-- Should be there by default, near end -->
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><!-- Should be there by default -->
    <dependentAssembly>..</dependentAssembly><!-- Should be there by default -->
        ... some other dependecy redirects ...

    <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor"
            publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
    </dependentAssembly>

        ... some other dependency redirects ...
    </assemblyBinding>
</runtime>

नोटों में सिस्टम का संदर्भ बदलने के लिए भी उल्लेख नहीं किया गया है। Web.Helpers 1.0.0.0 से 2.0.0.0 तक (हटाएं और नया जोड़ें)।


2
साझा करने के लिए +1 धन्यवाद भार। एक मामूली बदलाव मैंने oldVersion="1.0.0.0-2.0.0.0"एमवीसी 4 परियोजना टेम्पलेट में इस्तेमाल किए गए सम्मेलन का पालन करने के लिए किया था। दिलचस्प बात यह है dependentAssemblyके लिए System.Web.WebPages.Razorभी जड़ से अनुपस्थित है Web.config MVC4 प्रोजेक्ट टेम्पलेट में।
स्कूटी.नेट

1
मुझे MVC 4 NuGet पैकेज को 5.1.1 में अपडेट करने में एक समान समस्या थी, जो उपरोक्त के साथ हल की गई थी लेकिनoldVersion="2.0.0.0" newVersion="3.0.0.0"
ल्यूक पुप्लेट

34

एक और, बल्कि देर से, समाधान ... मैं इसी समस्या में भाग गया। क्या यहां सभी सुधारों को सूचीबद्ध किया गया (थैंक यू ऑल !!!), लेकिन त्रुटि को अतीत नहीं मिला। अंत में, हताशा में, मुझे व्यू डायरेक्टरी में एक web.config फ़ाइल मिली। इस फाइल में, मुझे System.Web.Mvc के संस्करण के कई संदर्भ मिले और उन सभी को "4.0.0.0" तक बढ़ाया। इससे भी महत्वपूर्ण बात, मुझे निम्नलिखित पंक्तियाँ मिलीं और "system.web.webPages.Razor" के "वर्जन" के लिए "1.0.0.0" से लेकर "2.0.0.0" तक के वर्जन नंबरों को अपडेट किया और अचानक, सब कुछ एक बार फिर से काम कर रहा था। उम्मीद है, यह किसी और की मदद करेगा।

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

स्टीव जी।


1
यदि आप क्षेत्रों का उपयोग कर रहे हैं, तो क्षेत्रों / दृश्यों के तहत web.config के बारे में भी मत भूलना।
एंटोनिन जेलिनक

5

मुझे यह काम करने का एक और तरीका मिला, एक एमवीसी 2 से एमवीसी 3 में अपग्रेड पर ताइवान के ब्लॉग की लाइन के साथ: http://blog.kkbruce.net/2011_04_01_archive.html (आप वास्तव में Microsoft अनुवाद का उपयोग IE10 में देखने के लिए कर सकते हैं अंग्रेजी संस्करण और यह काफी अच्छा अनुवाद है ...)

चाल सभी संस्करणों को खोजने के लिए है जो MVC3 से संबंधित हैं (जैसे रेजर, पीवीसी, हेल्पर असेंबली, आपको पता चल जाएगा कि वे क्या हैं यदि आप अपने संदर्भों में जाते हैं और अपने संदर्भित विधानसभा के सभी नए संस्करणों की जांच करते हैं) और उन्हें बदल दें 1.0.0.0 से 2.0.0.0 और 3.0.0.0 से 4.0.0.0 तक (चूंकि सार्वजनिक कुंजी समान हैं)। आप ब्लॉग के अनुसार संस्करणों को हटाने का भी प्रयास कर सकते हैं।

एक और महत्वपूर्ण बात यह है कि ये सेटिंग्स सभी Web.Configs में हैं। इसलिए न केवल आप रूट के तहत, बल्कि व्यू, एरिया / {एरिया} / व्यू आदि के तहत भी।

मुझे लगता है कि यह समाधान आपको हाइब्रिड होने के बजाय पूरी तरह से एमवीसी 4 में अपग्रेड कर सकता है, जो मेरे लिए किसी भी तरह से काम नहीं करता।


4
  1. Visual Studio में, एक अलग फ़ोल्डर में एक नया "थ्रोअवे" ASP.NET MVC 4 एप्लिकेशन बनाएं।
  2. नए रूप से बनाए गए एप्लिकेशन से नए सिरे से बनाए गए दृश्य web.config फ़ाइल के साथ अपने दृश्य फ़ोल्डर में web.config फ़ाइल बदलें।

तुम्हें पता चल जाएगा:

System.Web.WebPages.Razorसे परिवर्तनों Version=1.0.0.0को Version=2.0.0.0 System.Web.Mvcबदलता Version=3.0.0.0हैVersion=4.0.0.0


3

यदि आप इस समस्या का सामना कर रहे हैं और आपने ऊपर दिए गए समाधानों की कोशिश की है और यह काम नहीं करता है, तो कृपया अपने व्यू फ़ोल्डर में web.config की जांच करें। कुछ कॉन्फ़िगरेशन हो सकते हैं जो आपके ऐप रूट फ़ोल्डर में Web.config फ़ाइल का विरोध कर रहे हैं


0

आपके कुछ कोड वर्तमान MVC बिट्स पर चल रहे हैं, जबकि अन्य को नए पर धकेल दिया गया है। कोड को समझने के बिना, मैं आपको यह नहीं बता सकता कि विशिष्ट बिट क्या समस्या पैदा कर रहा है।

यह कहने के बाद कि, मैं कभी भी प्रोडक्शन डेवलपमेंट मशीन पर बीटा सेट नहीं करूँगा। इन दिनों एक वीएम बनाना और एक छवि पर बीटा चलाना बहुत आसान है। विंडोज 7+ में, आप धातु से छवि को बूट कर सकते हैं और सही हिट नहीं ले सकते हैं, यदि आपको इसकी आवश्यकता है (देव टूल बेटस के साथ, तो आप करते हैं)।


हां, लेकिन इस बीटा के पास एक लाइव-लाइसेंस है। सब के बाद, यह एक वीएम वैसे भी है, लेकिन वीएम भी ASP.NET MVC 3 है
निकोस बैक्सेवनिस

आपको यह निर्धारित करने की आवश्यकता है कि 3 में से कौन सा बिट 4 में चल रहा है, जैसा कि आप संघर्ष कर रहे हैं। वैसा ही वेब फॉर्म में बहुत कम हुआ जैसा कि वे .NET 2 टाइमफ्रेम में चले गए और किसी भी ऐड ऑन (जैसे एमवीसी?) के साथ काफी समस्या थी।
ग्रेगरी ए बीमर

वास्तव में, यह बहुत बड़ी ASP.NET MVC 3 परियोजना है। 4 में कुछ भी नहीं चल रहा है। मैं 3 परियोजना को शुरू नहीं कर सका। AppSettings तत्व में <add key = "webpages: वर्जन" value = "1.0.0.0" /> जोड़कर इसे हल किया।
निकोस बैक्सेवनिस

0

परिपूर्णता के लिए...

यदि आप उनका उपयोग नहीं कर रहे हैं तो आप वेबपेजों को भी पूरी तरह से बंद कर सकते हैं।

<appSettings>
    <add key="webpages:Enabled" value="false" />
</appSettings>

(मैं अभी भी रेजर विचारों और वेबपेजों के बीच के संबंध पर पूरी तरह से स्पष्ट नहीं हूं, लेकिन ऐसा लगता है कि मेरा एमवीसी ऐप रेजर विचारों के साथ अभी भी वेबपेजों के साथ काम करता है।)


0

अंतिम चरण के रूप में प्रोजेक्ट से आपका बिन फ़ोल्डर साफ़ करें जहां से त्रुटि आ रही है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.