System.IO.Compression DLL丢失和可能的版本冲突

时间:2016-09-22 15:22:02

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

我正在建立一个最终将在Azure下运行的ASPNET核心/ EF Core / MVC 6网站。我遇到了一个奇怪的问题,涉及到我以前从未遇到的依赖DLL。

该解决方案包含许多项目。其中一些通过ZipArchive操纵zip文件,因此它们依赖于System.IO.Compression。该解决方案可以毫无问题地编译。

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

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

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

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

但是这一切都让人感觉很糟糕,就像我错过了一些东西。

所以我回过头来看看每个项目中的参考文献,并注意到一些奇怪的事情。

在"子公司" project - ConnellData - 显示引用显示,如预期的那样,依赖于System.IO.Compression,v4.1.0。

但是当我看到" main"项目,依赖于ConnellData,并扩展ConnellData的引用......这是对System.IO.Compression的依赖,但它适用于版本4.0.10。

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

非常感谢任何有关如何解决此问题的想法或建议。

1 个答案:

答案 0 :(得分:0)

问题最终变得容易解决......但难以诊断。

我的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条目 - 解决了问题。