JCh*_*ten 7 c# python python.net
我正在尝试使用 PythonNet 在 Jupyter Notebook python 脚本中使用 .NET Core 库。最近添加了对 .NET Core 的支持(请参阅https://github.com/pythonnet/pythonnet/issues/984#issuecomment-778786164),但我仍然收到No module named 'TestAppCore'错误。
我在 PythonNet 中使用 .NET Framework 库没有问题,只有 .NET Core 没有问题。任何有关诊断和解决问题的帮助将不胜感激。
我尝试使用的 C# 库是一个简单的类库项目,根本没有依赖项。下面是完整的代码:
namespace TestAppCore
{
public class Foo
{
public int ID { get; set; }
public Foo(int id)
{
ID = id;
}
public int Add(int a, int b)
{
return a + b;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是 python 脚本:
from clr_loader import get_coreclr
from pythonnet import set_runtime
rt = get_coreclr("D:\src\Test.runtimeconfig.json")
set_runtime(rt)
import clr
import sys
sys.path.append(r"D:\src\TestAppCore")
clr.AddReference(r"TestAppCore")
from TestAppCore import Foo
foo = Foo(5)
print(foo.ID)
res = foo.Add(1, 2)
print(res)
Run Code Online (Sandbox Code Playgroud)
这是输出:
最后,这是我正在使用的运行时配置:
{
"runtimeOptions": {
"tfm": "netcoreapp3.1",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "3.1.0"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑你的DLL路径有误。这对我有用:
from clr_loader import get_coreclr
from pythonnet import set_runtime
set_runtime(get_coreclr("pythonnetconfig.json"))
import clr
clr.AddReference("C:/Path/To/Interface.dll")
from Interface import Foo
foo = Foo()
Run Code Online (Sandbox Code Playgroud)
使用
Python 3.8.10
pythonnet 3.0.0a1
clr-loader 0.1.7
Run Code Online (Sandbox Code Playgroud)
面向 .NET Core 3.1 的 C# DLL(类库)
pythonnetconfig.json 与您发布的完全相同。