【问题标题】:System.IO.Compression DLL Missing and Possible Version ConflictSystem.IO.Compression DLL 丢失和可能的版本冲突
【发布时间】:2017-01-31 06:20:57
【问题描述】:

我正在构建一个最终将在 Azure 下运行的 ASPNET Core/EF Core/MVC 6 网站。我遇到了一个奇怪的问题,涉及我以前从未遇到过的依赖 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.Compression,v4.1.0 的依赖。

但是当我查看依赖于 ConnellData 的“主”项目并扩展 ConnellData 的引用时...存在对 System.IO.Compression 的依赖,但它适用于版本 4.0.10。

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

任何关于如何解决此问题的想法或建议将不胜感激。

【问题讨论】:

  • 据我所知,如果您发现 dll 丢失并将其上传到 Azure。这将有助于解决问题。然而重要的是修复 dll 冲突。

标签: c# .net azure asp.net-core asp.net-core-mvc


【解决方案1】:

问题最终很容易解决......但很难诊断。

我的 project.json 文件有以下框架条目:

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

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

不幸的是,这是一个>>不同

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

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

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

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 2017-02-09
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2023-01-10
    • 2019-10-06
    相关资源
    最近更新 更多