2011-07-13 11 views
7

आप "सामान्य भाषा रनटाइम को एक अवैध प्रोग्राम" त्रुटि कैसे डिबग/ठीक करते हैं? वैसे भी इसका क्या मतलब है?सी # इकाई फ्रेमवर्क 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 उनमें से एक इकाई फ्रेमवर्क के बारे में है - शेष प्रतिबिंब या टीएफएस के बारे में हैं)

+0

विजुअल स्टूडियो 2010 अलग-अलग रिलीज मोड के लिए अलग-अलग web.config फ़ाइलों का समर्थन करता है। क्या आपने पुष्टि की है कि आपकी बीटा और उत्पादन कॉन्फ़िगरेशन फ़ाइलें कार्यात्मक रूप से समान हैं? –

+0

हां एकमात्र अंतर डेटाबेस कनेक्शन स्ट्रिंग है। दोनों रिहाई और बीटा एक ही बेस web.config का उपयोग करते हैं और फिर सही कनेक्शन स्ट्रिंग जोड़ने के लिए वेब परिनियोजन करते हैं। –

+0

इस संकल्प को –

उत्तर

19

आज मैंने इस मुद्दे में भाग लिया जब मैंने अपने क्यूए पर्यावरण में इकाई 4 को लिनक लागू करने वाला एक वेब अनुप्रयोग तैनात किया। यह मुद्दा विंडोज 2008 आर 2 सर्वर पर एक आईआईएस सेटिंग साबित हुआ। एप्लिकेशन पूल के लिए उन्नत सेटिंग्स के तहत, 32-बिट अनुप्रयोगों को सक्षम करने के लिए सेटिंग गलत पर सेट की गई थी। मैंने इसे सही पर सेट किया है और अब मेरा एप्लिकेशन ठीक उसी तरह काम करता है जैसा कि डेवलपमेंट सर्वर पर हुआ था जो कि विंडोज 2003 सर्वर था। आशा है कि ये आपकी मदद करेगा।

+0

+1 उत्कृष्ट स्पॉटिंग और समस्या को ठीक करने के लिए लग रहा है! अब अगर मेरी सभी परियोजनाओं को किसी भी सीपीयू के रूप में संकलित किया गया है तो 32 बिट के रूप में चलाने की कोशिश कर रहा है? क्या इकाई फ्रेमवर्क स्वयं 32 बिट के रूप में चलाने की कोशिश कर रहा है? मुझे इसे पूरी तरह से जांचने की ज़रूरत है, लेकिन ऐसा लगता है कि बक्षीस आपके रास्ते जा रहा है :) –

+0

धन्यवाद। मैं निश्चित रूप से इसकी सराहना करता हूं। मैंने इस दिन एक दिन का आधा ट्रैक बिताया। – Rick

+0

आप एक हैं। :) कई दिनों से इस पर काम कर रहा है :) –

1

क्या आप हैं किसी अन्य मशीन पर बीटा कॉन्फ़िगरेशन को तैनात करने का प्रयास किया? क्या आपके ऐपपूल सेटअप समान हैं (यानी, क्लासिक बनाम एकीकृत, समान .NET संस्करण)? क्या आपने समाधान को साफ करने और नए स्थान पर पुन: नियोजन करने की कोशिश की है? क्या आपने स्थान जारी करने के लिए बीटा बिल्ड को तैनात करने का प्रयास किया है? (प्रकाशित करने से पहले सभी फ़ाइलों को हटाने के लिए सुनिश्चित हो; उत्सुक im अगर थेरेस एक बचे हुए गतिशील लोड निर्भरता कि समस्याओं का कारण हो सकता है)

अद्यतन:

बहुत बढ़िया wrt अधिक जानकारी।लाइन 3 पर, आप वैरिएबल पेज को परिभाषित कर रहे हैं जबकि पहले परिभाषित चर नामित पृष्ठ का उपयोग कर रहे हैं। यह संकलित कैसे करता है? उस कोड को टिप्पणी करने का प्रयास करें या कम से कम इसे छोड़कर कोशिश करें।

नोट: मुझे लगता है कि टेक() के बाद गणना() दो बार क्वेरी निष्पादित कर सकती है।

नोट 2: मैंने केवल एंटीटीफ्रेमवर्क v4 डेटाबेस प्रथम विकास का उपयोग किया है, लेकिन मुझे ऑब्जेक्टसेट के खिलाफ सीधे प्रोग्रामिंग याद नहीं है। आम तौर पर यह आपकी इकाई वर्ग (उदा।, MyContext.Orders) है ... हो सकता है कि उस ऑब्जेक्ट के विरुद्ध प्रोग्रामिंग के साथ कुछ चल रहा हो और दशमलव मान निर्धारित हो। क्या उस संपत्ति के लिए मॉडल पर कोई गुण है जो इसे गैर-मानक बनाता है?

+0

ऐप पूल समान हैं, मैंने साफ-सफाई और पुनर्निर्माण और कई बार तैनाती की है (और तैनाती से पहले फ़ाइलों को हटाया जा रहा है)। ऐसा तब होता है जब मेरे पास प्रत्येक परियोजना को किसी भी CPU के रूप में तैनात करने के लिए सेट किया जाता है, इसलिए इसे भवन से संबंधित नहीं होना चाहिए। संभवतः इकाई फ्रेमवर्क में कुछ? –

+0

ने अधिक जानकारी के साथ प्रश्न को अद्यतन किया। मैंने सर्वर पर विजुअल स्टूडियो स्थापित किया और वास्तविक रेखा मिली जो समस्या और स्टैक ट्रेस पैदा कर रही थी। –

+0

ओह - रे लाइन # 3 एक टाइपो है और उसे 'पेजेड' पढ़ना चाहिए - अन्य var 'int पृष्ठ' है जो पुनर्प्राप्त करने के लिए केवल पृष्ठ की संख्या है। मैं जांच करूँगा कि क्या गिनती बनाम क्वेरी को दो बार निष्पादित करते हैं तो धन्यवाद –

0

वहाँ एक प्रमुख बग !!, मुझे लगता है कि यह जबकि है इकाई की रूपरेखा में दशमलव क्षेत्र स्तंभ संपत्ति होने है,

मैं इस बुरा त्रुटि संदेश सामना करना पड़ा है, मैं 2 अलग तालिकाओं (एक ही टेबल) से डेटा प्राप्त करने तुलना एक पूर्णांक स्तंभ आईडी के साथ एक और दशमलव स्तंभ आईडी के साथ अन्य,

पूर्णांक स्तंभ के साथ तालिका के लिए

, कोई समस्या नहीं एक ही कोड एक दशमलव स्तंभ के साथ तालिका के लिए पूरी तरह से भाग गया, , यह त्रुटि संदेश पॉप मैं एसक्यूएल सर्वर आईआईएस और पर्यावरण पर जांच की है और मैं भी पीसी को प्रारूपित करना चाहता था, यह बहुत अजीब है और त्रुटि संदेश साफ़ नहीं है ए आर।

आशा है कि यह दृष्टिकोण भविष्य में ऐसी किसी भी त्रुटि का सामना करने में सहायता करेगा।

2

मेरे लिए यह तब हुआ जब मैंने अपने इकाई मॉडल को एक दृश्य जोड़ा। डिफ़ॉल्ट रूप से डिज़ाइनर सभी कॉलम एंटिटी कुंजी प्रॉपर्टी को सत्य पर सेट करता है। जब मैं इसे सभी दशमलव/संख्यात्मक कॉलम के लिए गलत पर सेट करता हूं तो त्रुटि दूर हो जाती है। तस

+0

लोड करने में मदद मिली यह धन्यवाद! – Jazaret

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