使用 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)。
我在 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)。