You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework版本差异致同DLL函数调用空引用异常求助

问题描述
  • 正常运行项目:基于.NET Framework 4.6.1
  • 异常项目:基于.NET Framework 4.7.2

调用代码如下:

return DAL.DALGeneral.SelectScalar("GetYearName", new Dictionary<string, object>() { { "Year", year } }).ToString();

报错信息:

[NullReferenceException: Object reference not set to an instance of an object.]
   DAL.DALGeneral.GetConnectionString(String DataBase) +83
   DAL.DALGeneral.SelectScalar(String spName, Dictionary`2 parameters, String DataBase, String ConnectionString) +123
   OnlineYudGimelDaledSignIn.Models.LookUp.GetYearName(Int32 year) in C:\Users\giln\source\repos\OnlineYudGimelDaledSignIn\OnlineYudGimelDaledSignIn\Models\LookUp.cs:58
   OnlineYudGimelDaledSignIn.Site.Page_Load(Object sender, EventArgs e) in C:\Users\giln\source\repos\OnlineYudGimelDaledSignIn\OnlineYudGimelDaledSignIn\Site.Master.cs:29
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +52
   System.Web.UI.Control.OnLoad(EventArgs e) +97
   System.Web.UI.Control.LoadRecursive() +61
   System.Web.UI.Control.LoadRecursive() +134
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +693

相同路径的同一DLL引用、相同函数及参数在另一项目可正常运行,更换参数会出现其他异常,求问题原因及解决办法。

原因分析
  1. 配置读取行为差异:.NET Framework 4.6.1到4.7.2之间,配置文件(web.config/app.config)的读取逻辑存在行为变更,比如ConfigurationManager的某些API在高版本中返回值为空,导致GetConnectionString方法无法正确获取连接字符串,触发空引用异常。
  2. DLL跨版本兼容性问题:所引用的DAL DLL基于.NET Framework 4.6.1编译,在4.7.2环境下运行时,依赖的系统类库行为变化,导致方法内部对象未正确实例化。
  3. 配置节点缺失或不一致:异常项目的配置文件中缺少GetConnectionString方法依赖的配置节点,或者节点名称、格式与正常项目不一致,导致读取失败返回空值。
解决办法
  • 定位空引用根源:查看DAL.DALGeneral.GetConnectionString方法第83行的代码,确认是哪个对象(如配置读取结果、字典实例、字符串变量等)为空,针对性排查。
  • 对比配置文件:将异常项目的web.config/app.config与正常项目的配置文件对比,重点检查连接字符串节点、<appSettings>节点以及<runtime>下的兼容性配置是否一致。
  • 添加兼容性配置:在异常项目的web.config中添加以下配置,强制框架以4.6.1的兼容模式运行:
    <runtime>
      <AppContextSwitchOverrides value="Switch.System.Configuration.DoNotUseLatestConfigAPIs=true" />
    </runtime>
    
  • 重新编译DAL DLL:将DAL项目升级为.NET Framework 4.7.2后重新编译,替换异常项目中的DLL引用,消除跨版本运行的兼容性问题。
  • 调试验证:在异常项目中启用断点调试,跟踪GetConnectionString方法的执行流程,确认配置读取、参数传递等环节是否正常。

内容的提问来源于stack exchange,提问作者Gil Nevo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:45:32