You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pythonnet调用Windows目标.NET DLL遇导入错误求助

解决pythonnet调用Windows特定.NET 9框架库时的ModuleNotFoundError问题

可能的原因及解决步骤

1. 检查C#库的输出结构

当目标框架切换为net9.0-windows10.0.17763时,编译后的DLL会被放在Windows平台特定的子目录中(例如bin/Debug/net9.0-windows10.0.17763/win-x64),而非net9.0的根目录。需确保Python代码中添加的dll_path指向DLL实际所在的目录,而非项目父目录。

2. 直接指定DLL完整路径加载

跳过程序集名称查找逻辑,直接用绝对路径加载DLL,避免名称解析失败:

import sys
import clr

# 替换为实际的DLL绝对路径
dll_full_path = r"/path/to/actual/dll/location/PyCsLib.dll"
clr.AddReference(dll_full_path)

from PyCsLib import TestClass

3. 确认pythonnet与.NET运行时兼容性

  • 确保Python环境运行在Windows系统上(目标框架为Windows专属,无法跨平台加载)
  • 升级pythonnet到最新稳定版:执行pip install --upgrade pythonnet,3.0+版本已支持.NET 5及以上框架
  • 安装对应版本的**.NET 9 Windows Desktop Runtime**,而非仅基础.NET 9 Runtime

4. 验证程序集加载状态

添加调试代码确认PyCsLib是否被正确加载:

import sys
import clr
from System import Reflection

dll_path = r"/path/to/dll/folder"
sys.path.append(dll_path)

clr.AddReference("PyCsLib")

# 打印所有已加载的引用程序集名称
for asm in Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies():
    print(asm.Name)

如果输出中没有PyCsLib,说明程序集未被正确识别,需重新检查路径或DLL文件完整性。

5. 检查C#代码的可见性

确保PyCsLib命名空间和TestClass都添加了public修饰符,避免因访问权限导致无法被pythonnet识别。

内容的提问来源于stack exchange,提问作者tm.crz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:05:54