python中调用 .net 的 dll 时,报错:Exception has occurred: TypeLoadException
1、遇到问题
在 python3 中想调用 .net8 的 dll 。在运行时报错:
1 2 3 4 5 6 | Exception has occurred: TypeLoadException 未能从程序集“System.Runtime, Version = 4.0 . 0.0 , Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a”中加载类型“System.Runtime.CompilerServices.NullableContextAttribute”。 在 System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr * typeInstArgs, Int32 typeInstCount, IntPtr * methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type ) 在 System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext) 在 System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) 在 System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object [] attributes, IList derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctor, Boolean& ctorHasParameters, Boolean& isVarArg) |
2、解决办法
这是因为无法加载 .netcore 的运行库。可以用如下方式加载对应的运行库:其中的目录改为你自己的内容。
from clr_loader import get_coreclr from pythonnet import set_runtime rt = get_coreclr(runtime_config="E:/Working/NTrade_New/PyNTrade/bin/Debug/net8.0/PyNTrade.runtimeconfig.json") set_runtime(rt) import clr import sys sys.path.append(r"E:/Working/NTrade_New/PyNTrade/bin/Debug/net8.0") clr.AddReference(r"PyNTrade") from PyNTrade import TestClass tt = TestClass() sum = tt.Add(1, 2) print(sum)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)