Мне нужно получить доступ к dll С#, встроенному в ядро .net (версия .NETCore = v1.1). Я пробовал следующим образом, но получаю ошибку импорта.
import clr
clr.AddReference("dllname") - No error
from dllname import *
Получил исключение «Ошибка импорта», в котором говорится, что нет модуля с именем имя_dll.
Примечание. Я пробовал как в Iron python, так и в python, и оба они дают мне одно и то же исключение.





Я пытаюсь использовать Fedora 29, используя mono 5.18, python3.7 и netcore 3.0.100-preview-009812, и, кажется, работает, если вы используете абсолютные пути для разрешения сетевой DLL
import clr
import os
clr.AddReference(os.path.abspath('./bin/Debug/netstandard2.0/sample.dll'))
import sample
p = sample.Person(name='Peter')
проект netcore был сгенерирован так
dotnet new classlib -o sample
Класс человека
using System;
namespace sample
{
public class Person
{
public string Name { get; set; }
}
}
ОБНОВИТЬ
Основываясь на данных, предоставленных @SMHP, похоже, что несовместимость между основной платформой .NET/mono (среда выполнения pythonnet) и библиотекой, предназначенной для .netcoreapp 2.0.
просто чтобы получить больше информации. В какой операционной системе вы пытаетесь? и какая версия питона? Можете ли вы попробовать предыдущий минимальный образец?
Я только что попробовал в Windows 10 с python2.7 и netcore 2.2, все работает отлично. Можете ли вы дать больше информации о dll, которую вы пытаетесь загрузить? возможно ли, что существует какой-то конфликт между другим модулем Python с тем же именем?
я установил pythonnet 2.3.0 для доступа к .net dll, также установил .net core sdk версии 2.2.105. я подтвердил, что в имени этой dll нет существующего модуля python. я получил эту dll от другой команды, я полагаю его встроенный 64-битный компьютер.
// xxxx, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null // Глобальный тип: <Module> // Архитектура: AnyCPU (предпочтительно 64-разрядная) // Время выполнения: .NET 4.0 [сборка: CompilationRelaxations(8) ] [сборка: RuntimeCompatibility(WrapNonExceptionThrows = true)] [сборка: TargetFramework(".NETCoreApp,Version=v2.1", FrameworkDisplayName = "")]
Вы получаете ошибку импорта, потому что используете имя dll в операторе импорта. Вместо использования dllname используйте пространство имен dll. PS: не используйте одно и то же имя для dll и пространства имен, это приведет к ошибке при импорте в python
import clr
clr.AddReference("dllname") - No error
from namespace import *
Спасибо за ваш комментарий, я пытался, но у меня не получилось.