2012-08-06 23 views
9

जब भी मैं निर्माण करने का प्रयास करता हूं तो मुझे यह त्रुटि मिल रही है।'System.Int32' प्रकार का ऑब्जेक्ट 'System.Web.Security.Cryptography.Purpose' टाइप करने के लिए परिवर्तित नहीं किया जा सकता है '

private static MethodInfo _encode; 
public static string Encode(CookieProtection cookieProtection, byte[] buf, int count) 
{ 
    return (string)_encode.Invoke(null, new object[] { cookieProtection, buf, count }); 
} 

मैं एक ArgumentException was unhandled by user code त्रुटि कहा, "Object of type 'System.Int32' cannot be converted to type 'System.Web.Security.Cryptography.Purpose'" प्राप्त करते हैं: मैं सिर्फ दृश्य स्टूडियो 2012 और नेट 4.5 स्थापित है, लेकिन इस परियोजना के 2010

यहाँ पर अभी भी है कोड मैं के साथ मुद्दों कर रहा हूँ की लाइन है मेरे देव पर्यावरण में कुछ भी नहीं बदला है और मेरे सहकर्मियों को एक ही समस्या नहीं है, लेकिन उनके पास वीएस2012 भी नहीं है।

मुझे साइट त्रुटि के बारे में an article मिला है, लेकिन यह एकमात्र जगह है जिसे मैंने पॉप अप किया है।

वहाँ वे कहते हैं, "इसका कारण यह है .NET 4.5 में वहाँ System.Web में कुछ नए नामस्थान रहे हैं"

उनका समाधान करने के लिए है:

  • स्थापना रद्द VS11 अगर आप इसे
  • स्थापित
  • स्थापना रद्द करें .NET 4.5
  • पुनर्स्थापित नेट 4

यह एक हास्यास्पद समाधान टी की तरह लग टोपी 4.5 और 4 एक ही मशीन पर नहीं हो सकते हैं।

क्या किसी को यह पता है कि इससे पहले कि मैं अनइंस्टॉल करने और सामान का एक समूह पुनः स्थापित करने का प्रयास कर रहा हूं, इससे कोई बेहतर समाधान हो सकता है?

एक टिप्पणी यह ​​भी कहने का प्रयास करती है: </setting name="login.rememberlastloggedinusername" value="false" > लेकिन मैं ऐसा नहीं करना चाहता हूं।

+0

वास्तव में यह जानना मुश्किल है कि आपने जो कुछ भी प्रदान किया है उसके साथ क्या चल रहा है। यानी आपके पास पोस्ट नहीं किया गया है जो वास्तव में उद्देश्य का उपयोग करता है। आप किस विधि का आह्वान करने की कोशिश कर रहे हैं? –

+0

क्षमा करें, मैंने जोड़ा है जहां मैं इसे कॉल कर रहा हूं। क्या वह पर्याप्त जानकारी है? – JCisar

+0

मुझे नहीं पता कि आपका संपादन आपके द्वारा मूल रूप से पोस्ट किए गए कोड से कैसे संबंधित है और कहा गया है कि "समस्याएं" थीं। क्या आप 'HttpSecureCookie' कक्षा का उपयोग कर रहे हैं? –

उत्तर

9

जैसा कि @hvd ने बताया है, यह कोड आंतरिक तरीकों को कॉल करने के लिए प्रतिबिंब का उपयोग कर रहा है जो माइक्रोसॉफ्ट .NET 4.5 में बदल गया है।

सौभाग्य .NET 4.0 सार्वजनिक Encode() और Decode() तरीकों जो मूल रूप से CookieProtectionHelper में आंतरिक तरीके के रूप में इसी कार्य को पूरा साथ System.Web.Security.MachineKey वर्ग की शुरुआत की। ध्यान दें कि CookieProtectionHelper.Encode() के साथ एन्क्रिप्ट किए गए कुकीज़ MachineKey.Decode() के साथ डिक्रिप्ट नहीं किए जा सकेंगे।

यह भी ध्यान दें कि .NET 4.5 में, इन विधियों को Protect() और Unprotect() के पक्ष में बहिष्कृत किया गया है।

+1

इस पोस्ट के लिए धन्यवाद! आपने मुझे जो कुछ भी उपयोग किया है उसके बजाए मैं इसका उपयोग कर सकता हूं। मैं इन कोशिश करूँगा! – JCisar

+1

CookKProtectionHelper को MachineKey.Encode() और Decode() के साथ बदलकर मेरे लिए काम किया। मैं 4.0 का उपयोग कर रहा हूं लेकिन हाल ही में 4.5 स्थापित किया गया है जो ऐसा हुआ है। – Induster

3

क्या आपको here से यह मिला था?

_encode = cookieProtectionHelper.GetMethod(
    "Encode", BindingFlags.NonPublic | BindingFlags.Static); 

यह .NET फ्रेमवर्क के आंतरिक कार्यान्वयन विवरण पर निर्भर करता है जो एमएस ने कभी वादा नहीं किया है अपरिवर्तित रहेगा। तो हाँ, .NET Framework का एक इन-प्लेस अपग्रेड इस तरह के कोड को काम करना बंद कर सकता है। यह .NET 4.5 में एक बग नहीं है। यह आपके लिए एक बग है - वह - उन चीज़ों पर भरोसा करने के लिए कोड जो आप भरोसा नहीं कर सकते हैं।

और इसे हल करने के लिए, उस विधि का उपयोग करना बंद करें। यदि कोई सार्वजनिक एपीआई है जो आप चाहते हैं, तो इसका इस्तेमाल करें। यदि ऐसा नहीं है, तो इसे स्वयं लागू करें।

+0

मुझे नहीं पता कि कोड कहां से आया था ... यह इससे पहले कि मैंने इस कंपनी के लिए भी काम करना शुरू किया था। – JCisar

+0

किसी भी तरह से, यदि आपका '_encode' सेट है, तो आपको वास्तव में इसे हटाना होगा। आपका कोड अभी तक आधिकारिक रूप से जारी किए गए .NET संस्करणों में विफल नहीं होगा, लेकिन जल्द ही होगा। – hvd

+0

कहां कहता है कि नए संस्करण इस पर कमी आएंगे? – JCisar

1

आप सीएमएस सॉफ्टवेयर Ektron का उपयोग कर, जबकि यह त्रुटि दिखाई देती है, तो निम्न उनके 8.7 release notes में है -

71233—If you installed an 8.6.1 site and enabled cookie encryption in web.config(), then installed Microsoft .NET Framework 4.5, you saw this error:

Server Error in '/' Application. 
Object of type 'System.Int32' cannot be converted to type System.Web.Security.Cryptography.Purpose'. This 

is fixed.

जैसा कि अन्य उत्तरों में उल्लिखित है, एक समाधान है। नेट फ्रेम के लिए रोलबैक ओर्क 4.0। Ektron के साथ इस विशेष मामले में अन्य उत्तरों कुकी एन्क्रिप्शन को अक्षम करना, या 8.7 में अपग्रेड करना है।

+0

धन्यवाद स्पंजॉय! आपने मेरे लिए एक दिन का काम बचाया। – eastboundr