programing

실행할 참조 어셈블리를 로드할 수 없습니다.

magicmemo 2023. 8. 14. 22:46
반응형

실행할 참조 어셈블리를 로드할 수 없습니다.

갑자기 제 웹사이트가 로딩되지 않고 아래 오류가 나타납니다.와 함께 VS2017을 실행하고 있습니다.윈도우즈 10 홈의 Net Framework 4.7.1.

[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

좋은 의견이라도 있나?

제게 효과가 있었던 것은 제 웹 앱 아래에 있는 bin과 obj 디렉토리를 삭제한 다음 다시 구축하는 것이었습니다.

에 대해 알려진 문제가 있습니다.이와 관련하여 NET Framework 4.7.1.4.7.2에 정렬된 것으로 추정되지만, 그 동안 무엇을 할 수 있습니까?

이 문제는 직렬화 어셈블리와 관련이 있으며, 이 어셈블리를 빌드의 일부로 생성하거나 생성하지 않도록 선택적으로 설정할 수 있습니다(rclick project -> Properties -> Build 탭 -> 하단의 '직렬화 어셈블리 생성'을 참조하십시오).

제게 도움이 된 것은 이 설정이 '자동'으로 설정되어 있는지 확인하는 것입니다.전체 '깨끗한 솔루션'을 수행하고 편집증적인 경우 솔루션 루트 폴더에서 실행할 경우 이 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>

그래도 운이 없으면 '직렬화 어셈블리 생성'을 '켜기'로 명시적으로 설정하여 강제 생성하고 재구성 및 실행합니다.

오늘 Acumia 2018 R1을 설치했는데 이 문제가 발생했습니다.시스템을 제거하는 중입니다.IO.압축.bin 폴더의 ZipFile이 문제를 해결했습니다.

또한 여러 번 이 문제에 직면했습니다. 이 오류는 bin 폴더의 dll 참조 또는 로드 문제로 인해 발생할 수 있습니다..bin 폴더를 제거하고 응용프로그램을 다시 빌드하기만 하면 됩니다.

해피 코딩.

저는 그 오류에 대한 조사가 있습니다.

오류에서 알 수 있듯이, 우리가 Asnetcore 프로젝트에서 SOAP 기반 프로젝트를 참조할 때, 우리는 그것들을 직접 사용할 수 없습니다.이는 플랫폼 Aspnetcore의 구현 때문입니다.

반사를 사용하여 로드할 수 있습니다.그러나 내부 유형을 동적으로 사용할 수 있습니다.이후 버전의 Asnetcore에서는 라이센스 비누 어셈블리 등을 지원할 수 있습니다.

dll 버전이 다른 X86 또는 64 등일 때 bin 폴더 등을 삭제하는 것이 해결책입니다.진짜 문제는 SOAP 프로토콜, 웹소켓, 프록시 등의 구현입니다.Aspnetcore 프로젝트에서 직접 사용할 수 없습니다.그 github에 대한 패치 프로젝트가 있습니다.

nbin 폴더/obj 폴더/clean/rebuild를 모두 삭제한 후에는 아무것도 작동하지 않습니다.오류는 문제가 있는 어셈블리를 명확하게 알려줍니다.web.config 파일로 이동하여 해당 어셈블리를 찾습니다.제거한 후 다시 참조합니다.

4.6.2에서 4.8로 업그레이드할 때 이 문제가 발생했습니다.

수정:

  1. web.config에서 어셈블리 리디렉션 삭제
  2. 프로젝트 재구성
  3. 어셈블리 바인딩 경고를 두 번 클릭하여 필요한 리디렉션을 다시 생성합니다.
  4. 경고 없이 재구축

스타트업 프로젝트의 bin과 obj 폴더를 삭제했습니다.그런 다음 솔루션을 다시 빌드합니다.효과가 있었습니다.

에서 마이그레이션한 후에도 동일한 문제가 발생했습니다.NET Framework 4.6.2에서 4.8로 프로젝트를 최신 버전으로 업데이트하기 전까지는 권장되는 수정 사항이 없었습니다.NET Framework 4.8.1.나는 삭제를 진행했습니다.bin했습니다.

언급URL : https://stackoverflow.com/questions/48709542/cannot-load-a-reference-assembly-for-execution

반응형