Невозможно загрузить контрольную сборку для выполнения

Внезапно мой сайт не загружается и выдает ошибку ниже. Я использую VS2017 с.Net Framework 4.7.1 в 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

Какие-либо предложения?

Ответ 1

Нет решения для этого, кроме создания нового экземпляра и переноса всей вашей настройки. Такие ошибки просто случайны и трудны для отслеживания или решения.

Ответ 2

Что сработало для меня, это удаление каталогов bin и obj под моим веб-приложением, а затем восстановление.

Ответ 3

В этом отношении известна проблема с .NET Framework 4.7.1. Предположительно отсортировано в 4.7.2, но что вы можете сделать?

Эта проблема связана с сериализационными сборками, которые вы можете по желанию настроить для генерации или без нее как часть сборки (проект rclick → Свойства → вкладка "Сборка" → см. "Создание сборок сериализации" внизу.)

Что сработало для меня - и я частично стою на плечах других - это убедиться, что для этого параметра установлено значение "Авто". Сделайте полное "чистое решение", и, кроме того, если параноик, этот фрагмент PowerShell удобен, если он запускается в корневой папке вашего решения:

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

Затем добавьте следующие цели в ваш csproj (только внутри тега <Project>:

<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>

Если вам все еще не повезло, явно установите для параметра "Сформировать сборки сериализации" значение "Вкл", чтобы принудительно сгенерировать, и пересоберите & запустить.

Ответ 4

Сегодня я установил Acumatica 2018 R1, и я столкнулся с этой проблемой. Удаление System.IO.Compression.ZipFile из папки bin устранило проблему.

Ответ 5

У меня есть некоторые исследования об ошибке

Как мы видим из ошибки, когда мы ссылаемся на проекты на основе SOAP в проектах Aspnetcore, мы не можем использовать их напрямую. Это связано с реализацией платформы Aspnetcore.

Это может быть загружено с помощью отражения. Тем не менее, это позволяет нам использовать внутренние типы динамически. Поддержка может быть выпущена в более поздних версиях Aspnetcore для лицензионной сборки мыла и т.д.

Удаление папки bin и т.д. Является решением, когда версии dll отличаются X86 или 64 и т.д. Настоящая проблема заключается в реализации протокола SOAP, WebSocket, Proxy и т.д. Они не могут быть использованы напрямую с проектом Aspnetcore. Там патч проекты для этого в github