Ядро Pythonnet dotnet «Без имени модуля»

#python #c# #python.net

Вопрос:

Я пытаюсь использовать библиотеку .NET Core внутри скрипта python для ноутбука Jupyter с помощью PythonNet. Недавно была добавлена поддержка .NET Core (см. https://github.com/pythonnet/pythonnet/issues/984#issuecomment-778786164) но я все еще получаю No module named 'TestAppCore' ошибку.

У меня нет проблем с использованием библиотеки .NET Framework с PythonNet, только .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;
    }
  }
}
 

Вот скрипт на python:

 from clr_loader import get_coreclr
from pythonnet import set_runtime

rt = get_coreclr("D:srcTest.runtimeconfig.json")
set_runtime(rt)

import clr
import sys

sys.path.append(r"D:srcTestAppCore")
clr.AddReference(r"TestAppCore")

from TestAppCore import Foo

foo = Foo(5)
print(foo.ID)

res = foo.Add(1, 2)
print(res)
 

Вот результат:

введите описание изображения здесь

Наконец, вот конфигурация среды выполнения, которую я использую:

 {
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "3.1.0"
    }
  }
}
 
  • .NET Core: 3.1
  • версия python: 3.7
  • pythonnet: 3.0.0.dev1
  • clr-загрузчик: 0.1.6

Ответ №1:

Я подозреваю, что вы неправильно определяете путь к 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()
 

С помощью

 Python 3.8.10
pythonnet 3.0.0a1
clr-loader 0.1.7
 

Библиотека DLL C# (библиотека классов) , предназначенная для .NET Core 3.1

pythonnetconfig.json точно так, как вы опубликовали.