我正在构建一个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丢失问题有关,但看起来可能是。
任何关于如何解决这个问题的想法或建议都将不胜感激。
发布于 2016-09-24 12:47:51
这个问题最终变得很容易solve...but很难诊断。
我的project.json文件包含以下框架条目:
"frameworks": {
"net46": {
}
},它还在依赖项部分下声明了System.IO.Compression的依赖项。
不幸的是,这是一个>>different<< System.IO.Compression,是Net Core的一部分。我使用的是内置的net46程序集System.IO.Compression。
要将其包含在项目中,您必须将其添加到frameworkAssemblies部分,而不是依赖项部分:
"frameworks": {
"net46": {
"frameworkAssemblies": {
"System.IO.Compression": "4.0.0.0"
},
}
},这样做是我的解决方案中依赖于System.IO.Compression的net46版本的每个项目--并从依赖项部分删除System.IO.Compression条目--解决了问题。
https://stackoverflow.com/questions/39642990
复制相似问题