2015-09-24 5 views
10

मेरे पास कई लाइब्रेरी प्रोजेक्ट्स सहित विजुअल स्टूडियो 2013 में एक वेब प्रोजेक्ट है।.NET 4.6 वेबसाइट संदर्भ असेंबली को सही ढंग से लोड नहीं कर रही है

समस्या यह है कि वेब प्रोजेक्ट में एक संदर्भ (यानी सिस्टम। कोलेक्शन, सिस्टम.Net) जोड़ना C:\Program Files (x86)\Reference Assemblies\Microsoft से 'रेफरेंस असेंबली' के रूप में जोड़ा जा रहा है, जब आईआईएस में लोड किया गया है तो यह सही ढंग से कार्यान्वयन को लोड नहीं कर रहा है असेंबली (जीएसी से)। उदाहरण त्रुटि निम्नानुसार है।

[BadImageFormatException: Cannot load a reference assembly for execution.] 

[BadImageFormatException: Could not load file or assembly 'System.Collections' or one of its dependencies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)] 
    System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0 
    System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +34 
    System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +152 
    System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +77 
    System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +16 
    System.Reflection.Assembly.Load(String assemblyString) +28 
    System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +38 

[ConfigurationErrorsException: Could not load file or assembly 'System.Collections' or one of its dependencies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)] 
    System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +728 
    System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +196 
    System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +45 
    System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +172 
    System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +91 
    System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +111 
    System.Web.Compilation.BuildManager.ExecutePreAppStart() +156 
    System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +624 

[HttpException (0x80004005): Could not load file or assembly 'System.Collections' or one of its dependencies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +659 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +95 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +189 

बिन फ़ोल्डर से संदर्भ DLLs हटाया जा रहा है समस्या ठीक होती है, लेकिन मुझे यकीन है कि क्या ठीक से इस को ठीक किए की जरूरत नहीं हूँ।

+0

उत्तर अपडेट किया गया [नीचे] –

+1

मुझे वास्तव में पता चल सकता है कि आपकी समस्या क्या है: आपको 'System.Collections' के संदर्भ में 'स्थानीय = सही' कॉपी करें' की जांच करनी होगी। और अब आपके पास बिन और अन्य स्थानों में है। आपकी वेबसाइट बिन में एक संकलित करने की कोशिश करती है। तो, नीचे दिए गए उत्तर का जवाब इसे '<हटाएं असेंबली>' के साथ ठीक कर सकता है। लेकिन सही फिक्स 'स्थानीय = झूठी कॉपी करें' सेट करना होगा। आप आम तौर पर किसी भी 'सिस्टम' * असेंबली स्थानीय प्रतिलिपि नहीं करना चाहते हैं। –

+0

@ टीएस। अच्छा विचार, मैंने सभी परियोजनाओं की जांच की है और स्थानीय – Sam

उत्तर

2

समाधान:

मेरी लाइब्रेरी प्रोजेक्ट्स कुछ कोर libs (System.* आदि) का संदर्भ दे रहे थे RequiredTargetFramework विकल्प 3.5 पर सेट किया गया था।

<Reference Include="System.Core"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 

इस प्रकार .net संस्करणों के साथ मुद्दों के सभी प्रकार के कारण, दृश्य स्टूडियो 4 से इन बात करने के लिए मेरी web.config में बाध्यकारी रीडायरेक्ट जोड़कर सॉर्ट करने के लिए कोशिश कर रहा था: यह csproj फ़ाइल, उदाहरण में केवल स्पष्ट किया गया (और संदर्भ असेंबली शामिल), असफल।

csproj फ़ाइलों के सभी RequiredTargetFramework तत्वों को हटाने से समस्या हल हो गई है।

+0

तय की गई है, मुझे कभी नहीं लगता कि कोई सिस्टम फ़ाइलों के लिए ऐसा करेगा: स्थानीय, आवश्यक ढांचे, या आवश्यक विशिष्ट संस्करण की प्रतिलिपि बनाएँ। दुर्भाग्यवश मैंने स्थानीय –

+0

की प्रतिलिपि पर रोक दिया, इसलिए, आपका प्रश्न सचमुच आपके कंप्यूटर पर होने के बिना हल करना आसान नहीं था। संभावनाएं अनंत थीं। हम केवल इतना जानते थे- आप गलत असेंबली लोड कर रहे थे। ' 'इसे गलत लोडिंग रोक दिया लेकिन इस मुद्दे को पूरी तरह से हल नहीं किया। यह –

+0

जितना संभव हो उतना जानकारी देने के महत्व को दर्शाता है। मैं .NET कोर का उपयोग कर रहा हूं और csproj फ़ाइल में हिंटपाथ से उल्लंघन संदर्भ को हटाना पड़ा। इस जवाब ने मुझे सही दिशा में इंगित किया। धन्यवाद! – gilletty

4

जब भी आप BadImageFormatException देखते हैं, तो आपके पास द्विआधारी प्रारूप संगतता का मुद्दा है। 32-बिट पूल चलाने के लिए कॉन्फ़िगर किया गया आपका आईआईएस पूल हो सकता है और आपकी असेंबली x64, या बुद्धिमान बनाम बनाई गई हैं। या हो सकता है, आप 32 बिट मशीन पर x64 असेंबली चलाने की कोशिश कर रहे हैं। हो सकता है कि आपके पास x64 मशीन, anycpu- निर्मित असेंबली हों लेकिन कुछ तृतीय पक्ष असेंबली 32-बिट कोड के लिए सख्ती से बनाई गई है।

यह इनमें से किसी एक, या इसी तरह

अब, "usr" है अच्छा यहां मुद्दा यह है। आपके पास Cannot load a reference assembly for execution है लेकिन BadImageFormatException के संदर्भ में। मैं सोच रहा हूं कि यह संकलन समय पर होता है। इस लिए, यदि आप

<add assembly="System.Collections. . . ." /> 

है

<compilation> 
    <assemblies> 
     <remove assembly="System.Collections" /> 
    . . . . 

web.config को यह जोड़ने की कोशिश या, यह पहले

को दूर करने का प्रयास करें अब, यह सामान्य है कि GAC संदर्भ के लिए पसंदीदा स्थान रहा है जब तक आप की आपूर्ति probing settings

+0

यह भी मान लें कि ऐप पूल कई साइटों की सेवा कर रहा है, और यह उन अन्य साइटों में से एक हो सकता है जिनके पास बेमिसाल बंधन भरा हुआ है। – StingyJack

+1

त्रुटि संदेश 'निष्पादन के लिए एक संदर्भ असेंबली लोड नहीं कर सकता' जो कि गठबंधन विसंगतियों से दूर है। – usr

+0

@usr Thaks इसे इंगित करने के लिए। मैंने जवाब अपडेट किया। यह हो सकता है, या इससे पहले कुछ हो सकता है। और प्रश्न –

0

मेरे मामले में, मैंने nuget पैकेज सिस्टम जोड़ा। मेरे एएसपीनेट 4.6.1 प्रोजेक्ट में चयन और कुछ कारणों से, इसे csproj फ़ाइल में संदर्भित नहीं किया गया था। मैंने मैन्युअल रूप से csproj फ़ाइल संपादित की और संदर्भ जोड़ा। इसे फिर से लोड किया गया, और, voila, काम किया!

13

मैं /बिन फ़ोल्डर से पैकेज को नष्ट

System.Collections और System.Collections।समवर्ती

और पुनर्निर्माण परियोजना

अपने काम करता है।

+3

मैं सिर्फ बिन फ़ोल्डर को हटाता हूं, बनाता हूं, और यह काम करता है –

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