web-dev-qa-db-fra.com

Impossible de charger un assembly de référence pour exécution

Tout d'un coup, mon site Web ne se charge pas et me donne une erreur ci-dessous. J'utilise VS2017 avec .Net Framework 4.7.1 sur Windows 10 Home.

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

[BadImageFormatException: Could not load file or Assembly 'System.IO.Compression.ZipFile' 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.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +225
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +110
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +22
   System.Reflection.Assembly.Load(String assemblyString) +34
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +48

[ConfigurationErrorsException: Could not load file or Assembly 'System.IO.Compression.ZipFile' 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) +729
   System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +247
   System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +157
   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +226
   System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +73
   System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +321
   System.Web.Compilation.BuildManager.ExecutePreAppStart() +170
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +734

[HttpException (0x80004005): Could not load file or Assembly 'System.IO.Compression.ZipFile' 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) +525
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +118
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +708

Aucune suggestion?

22
Krunal

Il n'y a pas de solution à cela, sauf la création d'une nouvelle instance et la migration de toute votre personnalisation. De telles erreurs sont simplement aléatoires et difficiles à retracer ou à résoudre.

1
Krunal

Ce qui a fonctionné pour moi a été de supprimer les répertoires bin et obj sous mon application Web, puis de les reconstruire.

33
VG8TS

Il existe un problème connu avec .NET Framework 4.7.1 à cet égard . Soi-disant trié en 4.7.2, mais en attendant, que pouvez-vous faire?

Le problème est lié aux assemblys de sérialisation, que vous pouvez éventuellement définir pour générer ou non dans le cadre de votre build (projet rclick -> Propriétés -> onglet Build -> voir `` Générer des assemblys de sérialisation '' en bas.)

Ce qui a fonctionné pour moi - et je suis en partie sur les épaules des autres ici - est de s'assurer que ce paramètre est défini sur "Auto". Faites une `` solution propre '' complète, et en outre s'il est paranoïaque, cet extrait PowerShell est pratique s'il est exécuté dans le dossier racine de votre solution:

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }

Ensuite, ajoutez les cibles suivantes à votre csproj (juste à l'intérieur du <Project> tag:

<Target Name="RemoveDesignTimeFacadesBeforeSGen" BeforeTargets="GenerateSerializationAssemblies">
    <ItemGroup>
      <ReferencePath Remove="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" />
    </ItemGroup>
    <Message Importance="normal" Text="Removing DesignTimeFacades from ReferencePath before running SGen." />
  </Target>
  <Target Name="ReAddDesignTimeFacadesBeforeSGen" AfterTargets="GenerateSerializationAssemblies">
    <ItemGroup>
      <ReferencePath Include="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" />
    </ItemGroup>
    <Message Importance="normal" Text="Adding back DesignTimeFacades from ReferencePath now that SGen has run." />
  </Target>

Si vous n'avez toujours pas de chance, définissez explicitement "Générer les assemblys de sérialisation" sur "Activé" pour forcer la génération, puis reconstruisez et exécutez.

5
oflahero

Aujourd'hui, j'ai installé Acumatica 2018 R1 et je suis tombé sur ce problème. La suppression de System.IO.Compression.ZipFile du dossier bin a résolu le problème.

J'ai des recherches sur l'erreur

Comme nous pouvons le voir d'après l'erreur, lorsque nous nous référons aux projets basés sur SOAP dans les projets Aspnetcore, nous ne pouvons pas les utiliser directement. Cela est dû à la mise en œuvre de la plate-forme Aspnetcore.

Il pourrait être chargé en utilisant réflexion . Cependant, cela nous permet d'utiliser dynamiquement les types internes. Le support peut être publié dans les versions ultérieures d'Aspnetcore pour sous licence soap assembly etc.

La suppression du dossier bin, etc. est une solution lorsque les versions de DLL sont différentes de X86 ou 64, etc. Le vrai problème est l'implémentation SOAP, WebSocket, Proxy, etc.). Elles ne peuvent pas être utilisées directement avec Aspnetcore. Il y a patch projets pour cela dans github

0
Hamit YILDIRIM