某项目

运行环境:net core 2.2
数据库:mysql
引用:Surging.Hero,一个经过某人改造的Surging框架。不知为何,这个Surging.Hero的github repo已经被删。

在开发过程中,碰到了各种各样的坑,今记述如下:


一、条件查询结果完全错误

该框架内置了一个Dapper的扩展组件,支持linq查询。但是不知为何,查询的结果一直为空。用Profiler一查,发现select的where里,部分字段的字段名和值错位。例如:

1 DateTime now=DateTime.Now;
2 
3 Table.Where(v=>v.A==1&&v.Date=now&&v.B="City");


最后生成的结果居然是

1 where A=1 AND Date is null AND B='2019-12-20'


最后发现是Surging.Hero的作者不知从哪里扒来个根据linq生成表达式树的类,而这个类有bug,导致生成的sql错误。解决方案只能是自己写sql.


二、BadImageFormatException

三台机器:开发机A,服务器B,服务器C

编译的代码用dotnet xxxx.dll运行,在A和B上一切正常,但是在C上报BadImageFormatException异常。

通过出错信息得知错误点在Surging.Core.CPlatform\Module\ModuleProvider.cs的Initialize方法。加了点log语句后发现是在加载AutoMapperModule时异常的。

这个异常一般和32/64位的dll有关。但是查看项目设置未发现端倪。而且直接在C上编译也不行。

纠结几天后怀疑是框架引用的AutoMapper太旧。但是由于最新版AutoMapper改了不少东西,在框架源码里引入最新版AutoMapper后直接编译出错。这时注意到框架引用了AutoMapper.Attributes。AutoMapper.Attributes的最新版是6.0.1,引用了AutoMapper 5.0.2。于是去翻AutoMapper的github,发现AutoMapper7.0.0的Release Note里有一条,加入对net standard 2.0的支持。

于是事情清楚了。

在Surging.Core.AutoMapper里引入AutoMapper7.0.1,搞定收工。

posted on 2020-01-09 11:06  firstrose  阅读(308)  评论(4编辑  收藏  举报