Site web .Net 4.6 ne charge pas les assemblages de référence correctement
J'ai un projet web dans Visual Studio 2013, y compris plusieurs projets de bibliothèque.
Problème est que l'ajout d'une référence (ie. Système.Collection, System.Net) pour le projet web est ajouté comme un "ensemble de Référence" de C:\Program Files (x86)\Reference Assemblies\Microsoft
lorsqu'il est chargé dans IIS il n'est pas correctement le chargement de la mise en œuvre de l'assemblée (à partir de GAC). Exemple d'erreur de la façon suivante.
[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
La suppression de la référence dll dans le dossier bin résout le problème, mais je ne suis pas sûr de ce qui doit changer pour résoudre ce correctement.
source d'informationauteur Sam
Vous devez vous connecter pour publier un commentaire.
- Je supprimer le package de la /Bin dossier
et projet de reconstruction de
ses œuvres.
Tout le temps de vous voir
BadImageFormatException
vous avez un problème de format binaire de compatibilité. Peut-être votre IIS piscine configuré pour s'exécuter en 32 bits piscine et de votre assemblées sont construits pour x64, ou vice-versa. Ou, peut-être, vous essayez d'exécuter x64 assemblées sur un ordinateur 32 bits. Peut-être que vous avez x64-linge, anycpu-construit assemblées, mais certaines 3ème partie de l'assemblée est construit strictement à 32 bits de code.C'est l'un de ces, ou similaire
Maintenant, "usr" a un bon point ici. Vous avez
Cannot load a reference assembly for execution
mais dans le contexteBadImageFormatException
. Je me demande si ce qui se passe au moment de la compilation. Pour cela, essayez d'ajouter ce pour web.configOu, si vous avez
Essayez de le retirer première
Maintenant, il est normal que le GAC est l'endroit de prédilection pour référence, sauf si vous fournissez
sondage
paramètresRésolution:
Mes projets de bibliothèque de référence, certains libs (
System.*
etc) avec laRequiredTargetFramework
option 3.5. C'est seulement apparu dans le fichier csproj, exemple:Ainsi causer toutes sortes de problèmes .net versions de visual studio a été d'essayer de trier par ajout de liaison redirige vers mon site web.config pour point de ces v4 (et de mentionner les assemblées), sans succès.
Suppression de tous les
RequiredTargetFramework
éléments de la csproj fichiers a résolu le problème.Dans mon cas, j'ai ajouté le package nuget Système.Les Collections de mon asp.net 4.6.1 le projet et, pour une raison quelconque, il n'était pas référencé dans le fichier csproj. J'ai modifié manuellement le fichier csproj et ajout de la référence. Recharger, et, le tour est joué, travaillé!