2010-08-29 15 views
18

जब मैं आईआईएस 7.0 (वेब ​​सर्वर 2008 पर .NET 4.0 का उपयोग करके विकसित) में एक पृष्ठ (default.aspx) तक पहुंचने का प्रयास करता हूं, तो मुझे निम्न त्रुटि से मुलाकात हुई संदेश। क्या गलत है इसका कोई आइडिया? क्या मतलब है BadImageFormatException?.NET असेंबली लोड इश्यू के दौरान BadImageFormatException

बीटीडब्ल्यू: मैं विंडोज सर्वर 2008 64 बिट (आर 2 नहीं) चला रहा हूं और अभी तक विंडोज सर्वर 2008 को सक्रिय नहीं कर रहा हूं, क्या यह मूल कारण हो सकता है?

 
[BadImageFormatException: Could not load file or assembly 'test.foo' or one of its dependencies. Try to load bad formatted program. ] 
    System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0 
    System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) +567 
    System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +192 
    System.Reflection.Assembly.Load(String assemblyString) +35 
    System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +118 

[ConfigurationErrorsException: Could not load file or assembly 'test.foo' or one of its dependencies. Try to load bad formatted program. ] 
    System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +11392147 
    System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +484 
    System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +127 
    System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +334 
    System.Web.Compilation.BuildManager.CallPreStartInitMethods() +280 
    System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1087 

[HttpException (0x80004005): Could not load file or assembly 'test.foo' or one of its dependencies. Try to load bad formatted program. ] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11524352 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4782309 
+1

मुझे लगता है कि आपके असेंबली नाम में ".dll" की कमी है। कोड स्निपेट प्रदान करें। –

+3

64-बिट/32 बिट विसंगति? क्या आपने अपनी असेंबली को एक विशिष्ट मंच के लिए संकलित किया था? – Alex

+0

"मुझे लगता है कि आपके असेंबली नाम में" .dll "की कमी है। कृपया कोड स्निपेट प्रदान करें।" - स्टैक ट्रैक से, मुझे लगता है कि सभी कोड स्टैक ट्रेस मेरे अपने कोड में नहीं हैं, ऐसा लगता है। नेट कोड? इस समस्या का विश्लेषण करने के लिए मुझे क्या प्रदान करने की आवश्यकता है और आपको किस कोड स्निपेट की आवश्यकता है? – George2

उत्तर

15

BadImageFormatException उठाया है जब यह सत्यापित कोशिश असेंबली फ़ाइल मिल सकती है, लेकिन उचित असेंबली नहीं है, या दूषित है। उदाहरण के लिए, यदि आपने सर्वर पर फ़ाइलों को एफ़टीपी किया है और स्थानांतरण बाधित हो गया है, तो DLL फ़ाइल को केवल आंशिक रूप से स्थानांतरित कर दिया गया है, जिससे यह त्रुटि हो सकती है।

64 बिट बनाम 32 बिट पर: जब आप पी/इनवोक या COM इंटरऑप, some blogger reports का उपयोग करते हैं जो किसी विशिष्ट लक्ष्य संकलन पर स्विच करने से आपकी स्थिति में मदद कर सकता है। इसका अर्थ है: यदि आप 32 बिट डीएल के साथ इंटरफेस करते हैं, तो सुनिश्चित करें कि आप x86 के लिए संकलित करते हैं, इसे WoW32 के अंतर्गत चलाने के लिए मजबूर करते हैं, अन्यथा आपको यह अपवाद प्राप्त होगा। यह फिक्स confirmed here और here है। Framework64 निर्देशिका से

 
Ldr64.exe setwow 

:

वैकल्पिक रूप से, आप आदेश चलाकर 32-बिट डिफ़ॉल्ट अपने पूरे सिस्टम सेट कर सकते हैं।

फ़ाइल का पुनर्निर्माण करने के लिए एक आम समाधान है, या कम से कम इसे फिर से प्रकाशित करना है।

+0

आपका मतलब test.foo.dll स्वयं दूषित है या कुछ अन्य सिस्टम डीएलएल है? – George2

+1

@ जॉर्ज 2: मेरा मतलब है test.foo.dll दूषित है, लेकिन 32 बिट बनाम 64 बिट पर मेरे नए नोट्स देखें, जो काउंटर-अंतर्ज्ञानी प्रतीत हो सकता है। – Abel

+0

आपके अपडेट @ एबेल के लिए धन्यवाद, क्या आपका मतलब है कि मुझे 64-बिट प्लेटफ़ॉर्म के समाधान को पुनर्निर्माण करना चाहिए (क्योंकि मेरा विंडोज सर्वर 2008 64-बिट है)? – George2

2

क्या आपकी वेबसाइट DefaultAppPool का उपयोग करती है? यदि हां, तो, एएसपी नेट v4.0 के लिए अपने वेब साइट के अनुप्रयोग पूल की स्थापना या आप एक स्वनिर्धारित अनुप्रयोग पूल का उपयोग कर रहे हैं, तो यह .NET फ्रेमवर्क चल रहा है 4.0

+0

मैं एक नया आवेदन पूल का उपयोग कर रहा हूँ। मैंने इसे पहले से ही नेट 4.0 फ्रेमवर्क और एकीकृत मोड का उपयोग करने के लिए सेट किया है। कोई विचार? – George2

+0

क्या यह समस्या मेरे विंडोज सर्वर 2008 द्वारा सक्रिय नहीं की जा सकती है (मैंने अभी तक लाइसेंस नंबर दर्ज नहीं किया है)? – George2

+1

किस प्लेटफॉर्म के साथ आप अपना समाधान बना रहे हैं? कोई सीपीयू? 86? मुझे नहीं लगता कि यह एक सक्रियण मुद्दा है। क्या आप किसी तीसरे पक्ष का उपयोग कर रहे हैं? – sagie

6

जब एक 64 बिट सर्वर चल रहा है पर 32 बिट DLLs की तैनाती मैं सिर्फ यह मिल गया IIS 7.

इसे ठीक करने के लिए, मैं सेट सही पर अपने आवेदन की उन्नत सेटिंग में "32-बिट अनुप्रयोगों सक्षम करें" के लिए था पूल।

+0

यह मेरे लिए था, धन्यवाद +1 – Lee

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