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问题有关,但似乎可能。
如果您对如何解决这个问题有任何想法或建议,我将不胜感激。
这个问题最终很容易解决…但很难诊断。
我的项目。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条目-解决了问题。