c# - System.IO.Compression DLL 丢失且可能存在版本冲突

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

我正在构建一个 ASPNET 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.Compression v4.1.0 的依赖关系。

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

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

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

最佳答案

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

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

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

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

不幸的是,这是一个>>不同的<< 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 条目 - 解决了问题。

关于c# - System.IO.Compression DLL 丢失且可能存在版本冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39642990/

相关文章:

c# - Expression.Call 在简单的 lambda 表达式中。可能吗?

c# - 有没有一种简单的方法可以替换 Azure 云服务引用 dll,而无需重新发布服务?

azure - Application Insights URL Ping 测试 - GUID 实际上是否需要唯一?

c# - 如何使用反射生成直接调用包装器字节码?

c# - WindowsIdentity - 组和声明之间的差异

c# - 当子窗体关闭时,为什么不为在主窗体中创建的窗体上的控件触发 Validated 事件?

silverlight 有时可以在 Mac 上运行,有时则不能

c# - 错误 1001,找不到实际存在的 .manifest c# visual studio 2010

c# - 在 roslyn 中解析 C# 条件编译语句

.net - 如何在 .NET 中通过索引有效地覆盖字符串的一部分?