Python调用.NET 5编写的C# DLL时遇TypeLoadException问题求助
问题排查与解决方案
问题根源
这个错误是因为pythonnet 3.0.1对.NET 5的兼容性不足,加上.NET 5中System.Diagnostics.DebuggerStepThroughAttribute的程序集归属与.NET Framework存在差异,导致加载时出现类型找不到的问题。
具体解决方法
1. 升级pythonnet到最新稳定版
pythonnet 3.0.1属于较旧版本,对.NET 5+的支持不完善,直接升级到最新稳定版(如3.1.0及以上)可解决大部分兼容性问题:
pip install --upgrade pythonnet
2. 切换C#项目的目标框架为.NET Framework
如果暂时无法升级pythonnet,可将C#项目的目标框架改为.NET Framework 4.7.2或更高版本:
- 右键C#项目 → 属性 → 应用 → 目标框架,选择对应.NET Framework版本
- 重新编译生成DLL后再用Python调用
3. 添加.NET绑定重定向配置(针对坚持用.NET5的场景)
在Python脚本的运行目录下创建python.runtime.config文件,内容如下,强制将旧版本的System.Runtime绑定到.NET5的版本:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
4. 检查C#代码的引用(可选)
如果你的C#代码中显式使用了DebuggerStepThroughAttribute,确保引用正确的命名空间:
using System.Diagnostics; // 此命名空间是DebuggerStepThroughAttribute的正确归属
额外提示
你的C#代码中SendMessage方法里的client、url、request变量未定义,后续运行时需要补全这些变量的初始化代码,否则会出现新的错误。
内容的提问来源于stack exchange,提问作者Erika
相关产品推荐
相关产品推荐

