2020年2月14日 星期五

[研究] 無法載入檔案或組件 'System.IO.Compression' 或其相依性的其中之一。

[研究] 無法載入檔案或組件 'System.IO.Compression' 或其相依性的其中之一。

2020-02-14



'/' 應用程式中發生伺服器錯誤。
無法載入參考組件供執行之用。
描述: 在執行目前 Web 要求的過程中發生未處理的例外狀況。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

例外狀況詳細資訊: System.BadImageFormatException: 無法載入參考組件供執行之用。

原始程式錯誤:

在執行目前 Web 要求期間,產生未處理的例外狀況。如需有關例外狀況來源與位置的資訊,可以使用下列的例外狀況堆疊追蹤取得。


堆疊追蹤:



[BadImageFormatException: 無法載入參考組件供執行之用。]

[BadImageFormatException: 無法載入檔案或組件 'System.IO.Compression' 或其相依性的其中之一。 不應載入參考組件供執行之用。它們只能在反映專用載入器的環境下載入。 (發生例外狀況於 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.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +37
   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +159
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +80
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +22
   System.Reflection.Assembly.Load(String assemblyString) +29
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +38

[ConfigurationErrorsException: 無法載入檔案或組件 'System.IO.Compression' 或其相依性的其中之一。 不應載入參考組件供執行之用。它們只能在反映專用載入器的環境下載入。 (發生例外狀況於 HRESULT: 0x80131058)]
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +726
   System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +196
   System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +45
   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +172
   System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +91
   System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +111
   System.Web.Compilation.BuildManager.ExecutePreAppStart() +156
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +695

[HttpException (0x80004005): 無法載入檔案或組件 'System.IO.Compression' 或其相依性的其中之一。 不應載入參考組件供執行之用。它們只能在反映專用載入器的環境下載入。 (發生例外狀況於 HRESULT: 0x80131058)]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +660
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +89
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +190



版本資訊: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.8.4075.0

********************************************************************************

嘗試解決

* 在方案按下滑鼠右鍵選「清除方案」,再選「重建方案」,執行,仍有問題。

*
packages.config 中有這些

<package id="System.IO" version="4.3.0" targetFramework="net472" />
  <package id="System.IO.Compression" version="4.3.0" targetFramework="net472" />
  <package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net472" />
  <package id="System.IO.FileSystem" version="4.3.0" targetFramework="net472" />
  <package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net472" />
  <package id="System.IO.Packaging" version="4.7.0" targetFramework="net472" />

把 System.IO.Compression 這行註解,用 NuGet 重新安裝,執行,仍有問題。

* 到 bin 目錄,把 System.IO.dll 和 System.IO.Compression.dll 砍了,執行,正常了。

* 昨天剛把 Visual Studio 2019 v16.4.4 升級 v16.4.5,不知是否為影響原因。

(待續)