我正在建立一个最终将在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问题有关,但似乎可能会这样。
非常感谢任何有关如何解决此问题的想法或建议。
答案 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条目 - 解决了问题。