asp.net - 해결 - 실행을위한 참조 어셈블리를로드 할 수 없습니다.




visual studio 2017 웹 게시 (3)

갑자기 내 웹 사이트가로드되지 않고 오류가 발생합니다. Windows 10 Home에서 .Net Framework 4.7.1을 사용하여 VS2017을 실행하고 있습니다.

[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 프로젝트 -> 속성 -> 빌드 탭 -> 하단의 '직렬화 어셈블리 생성'참조).

나를 위해 일한 것은 - 그리고 나는 다른 사람들의 어깨에 부분적으로 서 있습니다 -이 설정이 '자동'으로 설정되어 있는지 확인하는 것입니다. 전체 '깨끗한 솔루션'을 수행하고, 편집증 인 경우 솔루션 루트 폴더에서 실행되는 경우이 PowerShell 스 니펫이 유용합니다.

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

다음으로, 당신의 csproj에 다음 타겟들을 추가하십시오.

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

여전히 운이 없다면 명시 적으로 '직렬화 어셈블리 생성'을 'On'으로 설정하여 생성을 강제하고 다시 빌드하고 실행하십시오.





acumatica