Cannot load a reference assembly for execution

34,678

Solution 1

What worked for me was deleting the bin and obj directories under my web app then rebuilding.

Solution 2

There's a known issue with .NET Framework 4.7.1 in this regard. Supposedly sorted in 4.7.2, but in the meantime what can you do?

The issue is related to the serialization assemblies, which you can optionally set to generate or not as part of your build (rclick project -> Properties -> Build tab -> see 'Generate serialization assemblies' at bottom.)

What worked for me - and I'm standing on the shoulders of others in part here - is to ensure this setting is set to 'Auto'. Do a full 'clean solution', and additionally if paranoid, this PowerShell snippet is handy if run in your solution root folder:

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

Next, add the following targets to your csproj (just inside the enclosing <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>

If still no luck, explicitly set 'Generate serialization assemblies' to 'On' to force generation, and rebuild & run.

Solution 3

Today I have installed Acumatica 2018 R1 and I have come across this issue. Removing System.IO.Compression.ZipFile from bin folder fixed the problem.

Solution 4

I also faced this issue multiple time, This error may cause by reference or loading issue of dll's in your bin folder. just remove .bin folder and rebuild your application It will work.

Happy coding.

Solution 5

I have some research about the error

As we can see from the error, when we refer to SOAP based projects in Aspnetcore projects, we cannot use them directly. This is due to the implementation of the platform Aspnetcore.

It could be loaded using reflection. However, it allows us to use internal types dynamically. Support may be released in later versions of Aspnetcore for licenced soap assembly etc.

Deleting the bin folder, etc. is a solution when dll versions are different X86 or 64 etc. The real problem is the SOAP protocol, WebSocket, Proxy etc implementation. They cannot be used directly with Aspnetcore project. There's patch projects for that in github

Share:
34,678

Related videos on Youtube

Krunal
Author by

Krunal

Sound knowledge on .Net, MVC and Acumatica ERP Implementation, Customizations and Support Projects.

Updated on November 16, 2020

Comments

  • Krunal
    Krunal over 3 years

    All of a sudden my website is not loading and giving me below error. I am running VS2017 with .Net Framework 4.7.1 on 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
    

    Any suggestions?

    • Brendan
      Brendan over 6 years
      Assuming this is an Acumatica website, did you recently upgrade it? Do you get this error as soon as you try to access the site in your browser?
    • Krunal
      Krunal over 6 years
      I installed new instance of 2018 R1 and yes as soon as I try to access the site, I am getting above error.
    • RuslanDev
      RuslanDev over 6 years
      Did you try to restart Windows on your machine? Sometimes these issues might be caused by pending OS/.Net updates...
    • Krunal
      Krunal over 6 years
      Restarted Windows, reinstalled .Net Framework 4.7.1 and also repaired Acumatica, nothing worked. Still on the same error. Not sure what is happening.
    • Krunal
      Krunal over 6 years
      Seems no solution to this. Has to create a new website and bind all projects.
    • Kirill Bestemyanov
      Kirill Bestemyanov over 6 years
      you can just remove this assembly (System.IO.Compression.ZipFile.dll) from bin folder of site.
    • Krunal
      Krunal over 6 years
      Yes, I remember I tried that but after that it keeps on throwing different error one after other. I guess it was something messed up in my website web.config file which I couldn't fix it.
    • Mir
      Mir about 6 years
      I have a similar problem (under Visual Studio 2015) that started as soon as I retargeted to .NET 4.7.1. Nothing in my project actually uses that .dll, but it seems to be getting included by the compilation process for some reason.
  • Mike Gledhill
    Mike Gledhill about 6 years
    I am so depressed. I wasted an hour on this, did plenty of Clean's, but yes, you were right... deleting the obj and bin folders solved this issue for me. Many thanks. (Sigh...!)
  • Mike Brunner
    Mike Brunner almost 6 years
    Same for me. I did cleans, reboots NuGet restores & updates and nothing worked. I even deleted my bin folder. Apparently deleting both the bin and the obj is the trick.
  • Huy Hoang
    Huy Hoang over 5 years
    Yep, this did the trick! You need to indeed delete the directories (just emptying it won't work)
  • T.S.
    T.S. over 5 years
    Cheeze. I usually clean out all projects and reload fresh from TFS. But this time, got latest, rebuilt... and got this. Once I got rid of all obj folders - smooth sailing
  • Darth Scitus
    Darth Scitus almost 4 years
    This worked for me. However I just moved on to another dll problem. Sigh back to it.
  • Yura
    Yura over 3 years
    Had exactly same issue with "System.IO" loading - everything worked as usual after manual cleanup of "bin" folder.
  • Eleomosynator
    Eleomosynator almost 3 years
    I got OP's issue in a .NET 4.7.2 project, FWIW. @VG8TS 's solution worked immediately and permanently (erase bin and obj).
  • Eleomosynator
    Eleomosynator almost 3 years
    Worked immediately for me in a .NET 4.7.2 project.