2015-05-31 10 views
15

मेरे पास एक वेब एपीआई 2 प्रोजेक्ट है जो मदद पृष्ठों के साथ है जो स्थानीय रूप से ठीक से चलती है लेकिन जब मैं धक्का देता हूं तो यह त्रुटि फेंकता है यह Azure करने के लिए:विधि नहीं मिला: 'System.String System.String.Format (System.IFormatProvider, System.String, System.Object)

विधि नहीं मिला: 'System.String System.String.Format (System.IFormatProvider, System.String, System.Object)

मैं अस्थायी रूप से कस्टम त्रुटियों इसलिए बंद कर दिया पूर्ण स्टैक ट्रेस देखा जा सकता है here

त्रुटि कोड की इस पंक्ति से होने वाले है:

स्ट्रिंग selectExpression = String.Format (CultureInfo.InvariantCulture, MethodExpression, GetMemberName (reflectedActionDescriptor.MethodInfo));

लाइन देखें 96 here

पूर्ण स्रोत कोड GitHub

पर उपलब्ध है मैं भी यकीन है कि जहां यह एक साथ जाने के लिए नहीं कर रहा हूँ।

आपकी मदद के लिए अग्रिम धन्यवाद।

+0

में string.Format(provider, format, arg0, arg1) नए सिरे से लिखना कृपया पोस्ट कोड हमलावर लाइन युक्त टुकड़ा:

निम्नलिखित "गैर की सिफारिश की" वैकल्पिक हल एक .NET 4.6 विधानसभा के साथ काम कर सकते हैं। – Alex

+0

मैंने इसी तरह के व्यवहार देखा है जहां कोड को अस्पष्टता छोड़ने का अधिकार था। .NET 3 से .NET 4 तक जाने पर। समाधान इस तरह कुछ ((स्ट्रिंग) (माईफंक्शन) समाप्त हो गया। .TString()) –

+0

@Alex - मैंने और विस्तार जोड़ा। क्षमा करें मैंने इसे शुरुआत में नहीं जोड़ा, मुझे नहीं लगता था कि यह महत्वपूर्ण होगा क्योंकि गायब विधि डॉट नेट फ्रेमवर्क से है। –

उत्तर

21

its MSDN page के अनुसार, आप जिस ओवरलोड का उपयोग कर रहे हैं वह केवल .NET 4.6 पर समर्थित है।

या तो होस्ट को .NET 4.6 चलाने के लिए कॉन्फ़िगर करें या परियोजना के लक्ष्य ढांचे को 4.5 में बदलें और पुन: संकलित करें।

4.5 में params object[] overload है जिसे आपके कोड को बदलने के बिना चुना जाएगा।

6

यह समझ में नहीं आता है। हम हाल ही में हम नेट 4.6 करने के लिए परियोजना बढ़ा और अब, मेरे लिए कम से कम, इस लाइन में एक ही त्रुटि के साथ टूट जाता है 2009

String.Format(CultureInfo.CurrentCulture, "You must specify a new password of {0} or more characters.", _membershipService.MinPasswordLength);

के बाद से हमारे आवेदन में इस तरह कोड की एक पंक्ति किया है। तो जाहिर है कि नया अधिभार कुछ तोड़ रहा है, और विधि नई नहीं है।

2

यदि यह किसी की सहायता करता है। वीएस2015 में हमारे विकास पर्यावरण को अपग्रेड करने के बाद हाल ही में हमें इस मुद्दे का सामना करना पड़ा (हमारा लक्ष्य पर्यावरण .NET 4)

हमारी सी ++/क्लियर परियोजनाओं को/clr स्विच का उपयोग करने के लिए सही ढंग से सेटअप नहीं किया गया था यानी वे किसी भी सामान्य भाषा समर्थन के लिए सेट नहीं थे , भले ही हम clr का उपयोग कर रहे थे। इससे कोई समस्या नहीं आई जब तक हम वीएस2015 में अपग्रेड नहीं किए जाते।

मैं पूरी तरह से स्पष्ट नहीं हूं कि यह क्यों काम करता है। मैं अनुमान लगा रहा हूं कि सी ++/क्लियर प्रोजेक्ट को संकलन समय पर सीएलआर रनटाइम के विशिष्ट संस्करण से जोड़ना चाहिए। अगर कोई इसे और अधिक स्पष्ट रूप से समझा सकता है तो मुझे दिलचस्पी होगी।

6

यदि आप न तो मेजबान को 4.6 में अपग्रेड कर सकते हैं और न ही परियोजना को डाउनग्रेड कर सकते हैं 4.5 पर एक वर्कअराउंड है: "ऑब्जेक्ट" के बजाय तर्क के रूप में "ऑब्जेक्ट []" को पास करें। तो आप "पैराम ऑब्जेक्ट []" अधिभार के उपयोग को मजबूर करेंगे। उदाहरण:

return string.Format(formatProvider, "{0:" + format + "}", new object[] { value }); 
1

हम कस्टम बिल्ड सर्वर का उपयोग कर रहे हैं।यहां तक ​​कि अगर परियोजना TargetFrameworkVersion v4.5.1, जब .net 4.6.1 सर्वर और एक विवाद प्रारूप तर्क के रूप में पारित कर दिया निर्माण करने के लिए स्थापित है, संकलक इस अधिभार

public static string Format(IFormatProvider provider, string format, object arg0) 
बजाय

public static string Format(IFormatProvider provider, string format, params object[] args) 

के उपयोग का चुनाव एकमात्र समाधान बनाने और गुजर रहा है सरणी तर्क

उदाहरण:

string.Format(CultureInfo.CurrentCulture, "Hello {0}", new[] { name });

0

Azure डेटा लेक Analytics आज .NET 4.5 पर चलता है। इसलिए हम .NET 4.6 असेंबली परिदृश्यों का समर्थन नहीं करते हैं और इस तरह की त्रुटियां संभव हैं। इससे बचने के लिए, आपको अपनी असेंबली को .NET 4.5 में पुनर्निर्माण करना चाहिए। एक GitHub रेपो के लिए एक लिंक के बजाय, string.Format(provider, format, new object[] { arg0, arg1 })

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