python中调用 .net 的 dll 时,报错:Exception has occurred: TypeLoadException

1、遇到问题

     在 python3 中想调用 .net8 的 dll 。在运行时报错:

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)

    

 

posted @ 2024-11-23 21:03  神游虚空  阅读(221)  评论(0)    收藏  举报