2016-09-22 157 views
0

我正在构建将最终在Azure下运行的ASPNET核心/ EF核心/ MVC 6网站。我遇到了一个涉及依赖DLL的奇怪问题,这是我从未遇到过的。System.IO.Compression 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的“main”项目,并展开ConnellData的引用时...... System.IO.Compression有一个依赖关系,但它是用于版本4.0.10。

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

任何想法或建议如何解决这个问题将不胜感激。

+0

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

回答

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