System.IO.Compression DLL丢失,可能存在版本冲突

本文关键字:存在 版本 冲突 IO Compression DLL 丢失 System | 更新日期: 2023-09-27 18:08:24

我正在构建一个asp.net Core/EF Core/MVC 6网站,最终将在Azure下运行。我遇到了一个奇怪的问题,涉及到一个依赖DLL,这是我以前从未遇到过的。

解决方案由许多项目组成。其中一些通过ZipArchive操作zip文件,因此它们依赖于System.IO.Compression。解决方案编译没有问题。

但是,System.IO.Compression DLL没有复制到最终的bin目录,这自然会导致站点在试图访问该程序集中的例程时崩溃。

我通过手动复制System.IO.Compression.dll到最终的bin目录来"解决"这个问题。该网站在我的开发系统上运行良好。

但是当我将站点发布到Azure时,System.IO.Compression.dll没有被部署,并且Azure站点在试图访问丢失的程序集时崩溃。

我不确定我是否可以手动复制缺失的DLL到Azure,但如果我可以,我想这是一个解决方案。

但这一切都感觉很笨拙,好像我错过了什么。

所以我回头看了看每个项目的参考资料,发现了一些奇怪的事情。

在"附属"项目——ConnellData——中显示引用,如预期的那样,显示了对System.IO的依赖。压缩,v4.1.0 .

但是当我看"主要"项目,这取决于ConnellData,并扩展ConnellData的引用…它依赖于System.IO。压缩,但这是4.0.10版本。

我不知道这是否与缺失的DLL问题有关,但似乎可能。

如果您对如何解决这个问题有任何想法或建议,我将不胜感激。

System.IO.Compression DLL丢失,可能存在版本冲突

这个问题最终很容易解决…但很难诊断。

我的项目。Json文件有以下框架条目:

  "frameworks": {
    "net46": {
    }
  },

它还在System.IO.Compression的依赖项部分下声明了一个依赖项。

不幸的是,这是一个>>不同的<<先。压缩,Net Core的一部分。我使用的是内置net46汇编System.IO.Compression.

要将其包含在项目中,您必须将其添加到frameworkAssemblies部分,而不是依赖部分:

  "frameworks": {
    "net46": {
      "frameworkAssemblies": {
        "System.IO.Compression": "4.0.0.0"
      },
    }
  },

这样做是我的解决方案中依赖于net46版本的System.IO.Compression的每个项目-并从依赖项部分删除System.IO.Compression条目-解决了问题。