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

Pythonnet调用C# DLL遇初始化/空引用异常及Grpc依赖问题

排查建议

针对TypeInitializationException/NullReferenceException异常

  • 排查GetReleaseNumber方法的依赖逻辑:检查该方法是否读取了注册表、环境变量、相对路径文件等依赖项。Pythonnet/TestStand的运行上下文(工作目录、权限、环境变量)和纯C#程序可能存在差异,比如纯C#运行时工作目录是DLL所在路径,而Python/TestStand可能在其他路径,导致相对路径读取失败;或者需要管理员权限的注册表项在普通用户权限下无法读取,返回null触发空引用。
  • 给静态构造函数添加日志:在ProductPaths静态构造函数的GetReleaseNumber调用前后,写入详细日志到本地文件(比如记录读取的路径、返回值、当前工作目录),通过日志定位具体哪一步抛出了异常(TypeInitializationException通常是内部静态构造执行失败的包装,需要看内部异常细节)。
  • 统一运行上下文:在Python代码或TestStand配置中,强制设置工作目录为C# DLL所在的绝对路径;或者修改GetReleaseNumber方法,所有文件/注册表操作使用绝对路径。
  • 验证权限差异:对比纯C#程序和Python/TestStand的运行权限,若GetReleaseNumber涉及高权限操作,尝试以管理员身份启动Python或TestStand测试。

针对Grpc.Core版本不匹配异常

  • 确认依赖来源:使用dnSpy、ILDasm等工具检查C# DLL的直接/间接依赖,确认是自身引用了Grpc.Core 2.0.0.0,还是依赖的第三方库引用了旧版本。
  • 添加绑定重定向配置:在Python脚本的运行目录下创建app.config文件,添加绑定重定向规则,将旧版本的Grpc.Core定向到你已有的2.42.0或2.46.6版本。配置示例:
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Grpc.Core" publicKeyToken="d754f35622e28bad" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.46.6.0" newVersion="2.46.6.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
  • 确保依赖DLL可被加载:将你拥有的Grpc.Core.dll(2.42.0或2.46.6版本)复制到以下路径之一:C# DLL所在目录、Python的site-packages目录、TestStand的执行引擎目录,确保运行时能找到对应版本的库。
  • 检查Pythonnet加载方式:使用clr.LoadAssemblyFromFile指定C# DLL的绝对路径进行加载,避免依赖自动查找路径导致的版本不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:03:26