随笔 - 4  文章 - 0 评论 - 13 阅读 - 6476
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

某项目

运行环境: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   firstrose  阅读(308)  评论(4编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示