某项目
运行环境: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,搞定收工。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义