अनुसार MSDN documentation करने के लिए अलग व्यवहार,Assembly.LoadFrom BadImageFormatException - .NET 4.0 और 4.5 (संभवतः गैर-दस्तावेजी)
public static Assembly LoadFrom(string assemblyFile)
फेंकता BadImageFormatException
assemblyFile is not a valid assembly.
-or-
Version 2.0 or later of the common language runtime is currently loaded
and assemblyFile was compiled with a later version.
वास्तव में, वहाँ एक अतिरिक्त मामला है - लोड हो रहा है असेंबली से x86 के लिए बनाई गई असेंबली जो x64 मोड में चलती है। शायद इसे "वैध असेंबली नहीं" कथन में शामिल किया गया है, मुझे नहीं पता। लेकिन यह अपवाद का उचित कारण है।
ठीक है, लेकिन .NET 4.5 में यह नहीं है! मेरे पास एक .NET 4.5 WPF ऐप है, जो किसी कारण से अलग-अलग एप्लायंस लोड करता है। यह किसी भी सीपीयू के लिए निर्माण कर रहा है और मैं इसे x64 विन 7 पर शुरू कर रहा हूं। मैं इसे एक निष्पादन योग्य पर परीक्षण कर रहा हूं, जो .NET 4.0 x86 के लिए बनाया गया है, और यह ठीक काम करता है। लेकिन जब मैंने अपना ऐप .NET 4.0 पर स्विच किया तो यह Assembly.Load
विधि पर दुर्घटनाग्रस्त हो गया!
तो, मेरा सवाल है, क्या मुझे कुछ याद आ रही है? यदि नहीं, तो उन्होंने ऐसा कैसे किया - x64 प्रक्रिया से x64 प्रक्रिया में x86 असेंबली लोड हो रही है? मुझे इस बिंदु पर कुछ समझ की कमी है।
अद्यतन
हंस Passant के लिए धन्यवाद, मैं अपनी गलती खोज निकाला है। वास्तव में Assembly.Load
का व्यवहार कोई अलग है। यह निकला, मैंने प्रोजेक्ट सेटिंग्स में Prefer 32-bit
विकल्प (या .csproj फ़ाइल में Prefer32Bit टैग) को नोटिस नहीं किया था। यही कारण है कि मेरी प्रक्रिया .NET 4.5 ran in a 32-bit mode में। जब मैंने WPF .NET 4.5 प्रोजेक्ट बनाया था तो यह सेटिंग सच थी। फिर, जब मैंने .NET 4.0 पर स्विच किया तो यह निष्क्रिय हो गया क्योंकि .NET 4.0 में ऐसा कोई विकल्प नहीं था। और जब मैंने .NET 4.5 पर वापस स्विच किया तो यह झूठी बन गया, जो मुझे लगता है, संगतता उद्देश्य के लिए।
"जब मैंने अपना ऐप .NET 4.0 पर स्विच किया", तो क्या आपका मतलब .NET 4.5 है? ;) – HericDenis
नहीं, इसे शुरुआत में 4.5 के लिए बनाया गया था, लेकिन फिर हमें एहसास हुआ कि हमें इसे 4.0 – EvAlex
पर काम करने की आवश्यकता है यदि यह रनटाइम समस्या है, तो यह विशेष रूप से उन संस्करणों के भेजे गए कंपाइलर्स से संबंधित नहीं है। टैग नहीं किए गए। – leppie