आप "सामान्य भाषा रनटाइम को एक अवैध प्रोग्राम" त्रुटि कैसे डिबग/ठीक करते हैं? वैसे भी इसका क्या मतलब है?सी # इकाई फ्रेमवर्क 4 सामान्य भाषा रनटाइम एक अवैध प्रोग्राम त्रुटि का पता चला?
मेरे पास एक सी # एमवीसी 2 वेब ऐप है जो एक ही आईआईएस 7.5 वेबसर्वर (x64) पर रहने वाली दो वेबसाइटों पर तैनात किया जा सकता है। एक लाइव साइट है (रिलीज कॉन्फ़िगरेशन का उपयोग करके तैनात), दूसरा बीटा साइट है (केवल इस प्रोजेक्ट के लिए बनाई गई एक नई बीटा कॉन्फ़िगरेशन का उपयोग करके तैनात)।
दो वेबसाइटों हैं:
Default Website/my_app
Beta/my_app
बीटा साइट पर जब क्रय आदेश की एक पृष्ठांकित सूची का चयन, फेंक देता है अपवाद "एक अवैध कार्यक्रम का पता चला"। लाइव साइट पर चलने पर सटीक एक ही कोड पूरी तरह से काम करता है। ऐसा क्यों होगा?
संपादित करें: मैं सर्वर पर दृश्य स्टूडियो स्थापित किया है और वास्तविक रेखा है कि समस्या और स्टैक ट्रेस पैदा कर रहा था पाया:
var list = ObjectContext.ObjectSet.AsQueryable();
int totalRecords = list.Count();
var paged = list.Skip((page > 0 ? page - 1 : 0) * rows).Take(rows);
और यह स्टैक ट्रेस के साथ अपवाद संदेश है:
{System.InvalidProgramException: Common Language Runtime detected an invalid program.
at System.Data.Entity.DynamicProxies.PurchaseOrderListVie_96479BFE9FA60F4C53137C56C1A1B2A11D90FF5AFFDC20383CC68E0A750792E3.set_Total(Decimal)
at lambda_method(Closure , Shaper)
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper)
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at MyApp.Controllers.PurchaseOrderController.GetPurchaseOrderList(Int32 page, Int32 rows, String sidx, String sord) in C:\src\MyApp.2010\MyApp.UI\Controllers\PurchaseOrder\List.cs:line 11}
यह नई जानकारी दिखाती है कि समस्या कहां है, लेकिन समस्या क्या नहीं है। उम्मीद है कि कोई है जो इकाई की रूपरेखा बहुत अच्छी तरह से जानता है इस पर प्रकाश डाल सकती:
System.Data.Entity.DynamicProxies.PurchaseOrderListVie_96479B_etc.set_Total(Decimal)
लाइन जहां त्रुटि उत्पन्न होती है। अब मैंने एसक्यूएल प्रबंधन स्टूडियो में क्वेरी चलाई और नतीजा शून्य नहीं था, और कुल शून्य नहीं था। तो set_Total() को कॉल करने में समस्या क्यों हुई?
[Decimal] [Required] [DisplayName("Total")]
public virtual decimal Total
{
get;set;
}
लाइव और बीटा साइटों के बीच मुख्य अंतर का निर्माण विन्यास है:
यह कैसे POCO को परिभाषित करता है कुल क्षेत्र (एक टी -4 टेम्पलेट द्वारा उत्पन्न) है। लेकिन दोनों कॉन्फ़िगरेशन में प्रत्येक एकल प्रोजेक्ट को "कोई भी CPU" सेट किया गया है।
हमारी सभी विकास मशीनें और सर्वर 64 बिट हैं। क्या वेबसाइटों की आईआईएस कॉन्फ़िगरेशन के बीच कुछ अंतर हो सकता है जो इसका कारण बन रहा है?
मैंने PEVerify चलाने का प्रयास किया है - लेकिन यह केवल "सभी वर्ग और तरीके सत्यापित" कहता है। इस प्रकार की समस्या के साथ PEVerify कैसे मदद कर सकते हैं?
बीटीडब्ल्यू मैं देख सकता हूं कि शीर्षक में "सामान्य भाषा रनटाइम एक अवैध प्रोग्राम समस्या का पता चला है" के साथ लगभग 15 प्रश्न हैं। मेरा सवाल एक डुप्लिकेट नहीं है और इसमें कई अनन्य विशेषताएं हैं जो अन्य प्रश्नों से अलग हैं जिनके पास समान शीर्षक है (और उनमें से केवल 15 उनमें से एक इकाई फ्रेमवर्क के बारे में है - शेष प्रतिबिंब या टीएफएस के बारे में हैं)
विजुअल स्टूडियो 2010 अलग-अलग रिलीज मोड के लिए अलग-अलग web.config फ़ाइलों का समर्थन करता है। क्या आपने पुष्टि की है कि आपकी बीटा और उत्पादन कॉन्फ़िगरेशन फ़ाइलें कार्यात्मक रूप से समान हैं? –
हां एकमात्र अंतर डेटाबेस कनेक्शन स्ट्रिंग है। दोनों रिहाई और बीटा एक ही बेस web.config का उपयोग करते हैं और फिर सही कनेक्शन स्ट्रिंग जोड़ने के लिए वेब परिनियोजन करते हैं। –
इस संकल्प को –