使用 Python.Net 时 Python 中的 TypeLoadException

TypeLoadException in Python while using Python.Net

我在 Python 使用 Python.Net

使用 2 个 .net class 库

想要在方法调用中将 class 对象作为参数传递

PT.cs

using System;

namespace Point
{
    public class PT
    {
        public int x { get; set; }
        public int y { get; set; }

        public PT()
        {
            x = 0;y = 0;
        }

        public PT(int X,int Y)
        {
            x = X;y = Y;
        }
    }
}

Cal.cs

using System;
using Point;

namespace Calculator
{
    public class Cal
    {
        public double X { get; set; }
        public double Y { get; set; }
        public Cal()
        {
            X = 0.0;
            Y = 0.0;
        }
        public Cal(double x, double y)
        {
            X = x;
            Y = y;
        }
        public static double  Add(double x,double y)
        {
            return x + y;
        }

        public double Add()
        {
            return X + Y;
        }

        public PT AddPoints(PT p1, PT p2)
        {
            int x = Convert.ToInt32(Add(p1.x, p2.x));
            int y = Convert.ToInt32(Add(p1.y, p2.y));

            return new PT(x,y);
        }
    }
}

使用 Jupyter 笔记本

import sys
import clr
sys.path.append(r"/Users/user/Projects/CalculatorCheck/Calculator/bin/Debug/net5.0/")
clr.AddReference("Calculator")
clr.AddReference("Point")

from Calculator import Cal
from Point import PT

p1=PT(10,10)
p2=PT(20,20)

p3=obj.AddPoints(p1,p2)

获取错误

TypeLoadException Traceback(最后一次调用) /var/folders/n7/k0yrxn111wx0wccws6chllth0000gn/T/ipykernel_5171/710681155.py 中 ----> 1 p3=obj.AddPoints(p1,p2)

TypeLoadException: 无法解析来自 typeref 的标记为 01000011 的类型(程序集 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 中的预期 class 'System.Convert') 在(包装管理到本机)System.Reflection.RuntimeMethodInfo.InternalInvoke(System.Reflection.RuntimeMethodInfo,object,object[],System.Exception&) 在System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x0006a] in :0

您可能正在使用 Python.NET 2.5,它不支持 .NET 5.0。

您需要安装 Python.NET 3.0 或更高版本,并且需要将其配置为使用正确的 .NET 运行时(默认使用 Mono,也不支持 .NET 5)。