c# - मुझे एक गतिशील अभिव्यक्ति को संकलित करने के लिए एक या एक से अधिक प्रकार की आवश्यकता क्यों नहीं मिल रही है?




asp.net-mvc c#-4.0 (14)

मेरे पास एक परियोजना थी जिसे मैंने अपडेट किया है I

  • .NET 3.5 MVC v2 को
  • .NET 4.0 MVC v3

संकलन जब मैं @ViewBag.Title संपत्ति का उपयोग करने या सेट करने का प्रयास करता हूं, तो मुझे एक त्रुटि @ViewBag.Title है

एक गतिशील अभिव्यक्ति को संकलित करने के लिए आवश्यक एक या अधिक प्रकार की खोज नहीं की जा सकती। क्या आप Microsoft.CSharp.dll और System.Core.dll के संदर्भों को याद कर रहे हैं?

मैंने निम्नलिखित किया है

  1. उन्नयन चरणों का पालन किया
  2. .NET Framwework 4 पर प्रोजेक्ट / गुण / अनुप्रयोग टैब में लक्ष्य ढांचे को निर्धारित करें
  3. प्रणाली को जोड़ा गया। कोर फ्रेमवर्क मैन्युअल रूप से
  4. माइक्रोसॉफ्ट जोड़ा गया। सीएसएआरपी फ्रेमवर्क
  5. सिस्टमएक्सएमएल फ्रेमवर्क जोड़ा गया
  6. System.Xml.Linq फ्रेमवर्क जोड़ा गया
  7. सुनिश्चित करें कि मेरा वेब। कॉन्फिफ़ सही है (यह वेब पर लिखा जाता है। Debug.Config, आदि)
  8. मॉडल , नियंत्रक और रेज़र व्यू बनाया गया
  9. एक __Layout.cshtml_ बनाएँ

मुझे क्या करना है और क्या करना है?

संपादित करें:

मैं GAC Gui में देखा है कि सिस्टम है। कोर 3.5.0.0 लेकिन कोई सिस्टम नहीं। कोर 4.0.0.0 क्या इसका मतलब यह है कि यह भ्रमित हो रहा है और अभी भी पिछले संस्करण का उपयोग कर रहा है? या क्या मैं जीएसी को ग़लत समझ रहा हूं?

संपादित करें:

मेरी वेब। कॉन्फ़िगर इस प्रकार दिखती है

...
<compilation debug="true">
    <assemblies>
        <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    </assemblies>
</compilation>
....
<pages>
    <controls>
    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</controls>
<namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.WebPages"/>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
    <add namespace="System.Linq" />
    <add namespace="System.Collections.Generic" />
</namespaces>
</pages>
....

Microsoft.Office.Interop.Excel का उपयोग करते समय मुझे Windows ऐप के लिए यह त्रुटि मिली; ...... रनटाइम संस्करण एक या अधिक DLL के बीच संगत नहीं हैं

मेरा समाधान: मैंने अपने पूरे समाधान को .NET 4.0 से .NET 3.5 में परिवर्तित किया

इसके नरक के लिए मैं वापस 4.0 में परिवर्तित हुआ और मुझे फिर से त्रुटि प्राप्त करना शुरू हुआ।

इस पर आधारित अपनी त्रुटि के लिए अपने समाधान को पुराने एनएटी ढांचे के रूप में बदलने का प्रयास करें जो काम कर सके।

========== संपादित करें =================

2 घंटे बाद मैं अपने एक्सेल इंटरॉप क्लास में कुछ महत्वपूर्ण चीजों को पूरा करता हूं और यह एक जादू की तरह काम करता है ... केवल किसी कारण के लिए। 3.5 3.5 पर नहीं और मेरा समाधान इस हद तक वैध नहीं है


Woow!

मैं लगभग एक वर्ष का अंत हूं लेकिन फिर भी लगता है कि मुझे त्रुटि संदेश से संबंधित अपने निष्कर्षों (13 जुलाई, 2013 को 7: 15 पी पीएसटी) के आधार पर जवाब देना चाहिए। यह उन लोगों के लिए सहायक हो सकता है जो त्रुटि संदेश का उत्तर ढूंढ रहे हैं:

"One or more types required to compile a dynamic expression cannot be found."

इसलिए कृपया इस पर पढ़ें: जब मैंने System.Dynamic कार्यान्वित किया तो मेरे समान त्रुटि संदेश था। मेरे कोड में System.Dynamic वेब अनुप्रयोग सुचारू रूप से चलाता है क्योंकि मेरे पास वेब। कॉन्फ़िग (लक्ष्यफ़्रेमवर्क) में सही कॉन्फ़िगरेशन था, लेकिन जब मैंने एक अलग डीएलएल में एपीसीओडी डाल दिया, तो यह समय संकलन में त्रुटियों को शुरू करना शुरू कर दिया। कृपया ध्यान दें कि मेरे पास मेरे डेल में ऐप.कॉन्फिग नहीं था, इसलिए जब आप इसे अलग डीएलएल परियोजना में रखते हैं लेकिन सही डीएलएल के संदर्भ में यह कॉन्फ़िगरेशन पर निर्भर नहीं हो सकता है।

मुझे सही "C:\Windows\Microsoft.NET\Framework\v4.0.30319" । Dll "C:\Windows\Microsoft.NET\Framework\v4.0.30319" , और मेरी "C:\Windows\Microsoft.NET\Framework\v4.0.30319" सफलतापूर्वक संकलित हुई थी।


इस समस्या का एक आम कारण यह है कि आप अपने Views/web.config फ़ाइल में एक विधानसभा संस्करण को अद्यतन करने में चूक गए हैं उदाहरण के लिए <system.web><pages> में उन्हें याद करना बहुत आसान है:

<pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">


जैसा कि मैंने हाल ही में पता चला है, कुछ एक्सटेंशन इस कारण भी हो सकते हैं। मेरे मामले में ऑटोहिस्ट्री 1.0.1 एक्सटेंशन को हटाने के लिए यह मेरे लिए तय किया गया था (एमवीसी 5)


ठीक है, मैं इसे निम्नलिखित चरणों के साथ काम कर रहा हूं।

  1. Config फाइल में मैंने <compilation debug="true"> को <compilation debug="true" targetFramework="4.0"> system.web अनुभाग में <compilation debug="true" targetFramework="4.0"> दिया
  2. कॉन्फ़िग फ़ाइल में मैंने <providerOption name="CompilerVersion" value="v3.5" /> को <providerOption name="CompilerVersion" value="v4.0" /> कंप्यूटर्स अनुभाग में <providerOption name="CompilerVersion" value="v4.0" /> है
  3. Global.asax.cs में मैंने ViewEngines.Engines.Add(new RazorViewEngine()); जोड़ा है ViewEngines.Engines.Add(new RazorViewEngine()); Application_Start() विधि के लिए

और मुझे लगता है कि यह था।


मुझे इस समस्या थी जब मैंने अपनी परियोजना में एमवीसी संस्करण को अपडेट किया था। समस्या असेंबली थी बाध्यकारी निर्देश, किसी न किसी को इसे अपडेट करने के लिए भूल गया।

मुझे बदलना होगा

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>

सेवा मेरे

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>

मेरी साइट के लिए ब्रेडक्रंब बनाने के लिए मैं MVCSiteMapProvider पैकेज को स्थापित करने के बाद भी यही त्रुटि प्राप्त करना शुरू कर रहा हूं।

यदि आपने MVCSiteMapProvider स्थापित किया है और आपको यह त्रुटि मिलती है तो आपको @ViewBag.Title को कुछ और, उदाहरण के लिए, @Html.MvcSiteMap().SiteMapTitle()


मेरे लिए उपर्युक्त कामों में से कोई भी नहीं, इसके बजाय Copy Local = True सेट करने से समस्या हल हो


मेरे लिए समाधान जोड़ने के लिए था:

ViewEngines.Engines.Add(new RazorViewEngine());

global.asax.cs में global.asax.cs Application_Start() विधि के लिए।


मैं दिनों के लिए इस मुद्दे के साथ संघर्ष कर रहा था और आखिरकार इसे लगा।

मैंने सभी को web.config से निम्नलिखित को हटा दिया था:

<dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>

मैंने इस फाइल में अन्य सभी सुझावों की कोशिश की और किसी ने मेरे मौजूदा एमवीसी 4 समाधान पर काम नहीं किया। इसलिए VS2012 को वी.एस. 2012 के लिए वेब टूल्स 2013.1 में अपडेट करने के बाद, मैंने एक नया MVC 5 प्रोजेक्ट बनाया और नई प्रोजेक्ट की फ़ाइलों को आधार के रूप में प्रयोग किया, मेरे सभी web.config फ़ाइलों से सभी बाहरी लाइनें निकाल दीं।

ऐसा करने के बाद मेरे सभी संकलन त्रुटियों और चेतावनियां गायब हो गईं और इंटेलिसेंस ने सही तरीके से काम करना शुरू कर दिया। मुख्य web.config फ़ाइल में <system.web> <pages> अनुभाग को पूरी तरह से निकाला गया, आखिरकार ViewBag.Title (और अन्य) गतिशील अभिव्यक्ति त्रुटियों को तय किया गया।


यदि आप अपने MVC विचारों में उस संदेश को देखते हैं, तो आपको दृश्य \ web.config में इस तरह एक संदर्भ जोड़ने की आवश्यकता है:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        (... other references ...)
        <add namespace="Microsoft.CSharp" />  <-- Add this
        (...)
      </namespaces>
    </pages>
  </system.web.webPages.razor>

निर्माण को मत भूलना, अन्यथा परिवर्तन से प्रभावित नहीं होगा।


यह मेरा संकल्प था:

1) परियोजना के संदर्भ में जाओ

2) माइक्रोसॉफ्ट पर राइट क्लिक करें। सीएसएचआरपी -> गुण

3) प्रतिलिपि लोकल को गलत में परिवर्तित करें यदि आपके पास यह सच है





c#-4.0