IronPython 3.4调用.NET 6 DLL遇System.Runtime加载失败求助
解决IronPython调用.NET Core 6 DLL时的System.Runtime加载错误
问题背景
使用VS2022创建的.NET Core 6类库(实现整数相加功能),在IronPython 3.4.1中调用时,出现FileNotFoundError,提示找不到System.Runtime, Version=6.0.0.0依赖。
核心原因
IronPython 3.4.1默认依赖的.NET运行时版本与.NET Core 6不兼容,无法自动定位到.NET Core 6的核心依赖集。
解决方案
方案1:将.NET Core类库发布为自包含部署
- 在VS2022中打开类库项目,右键选择「发布」
- 选择「文件夹」作为发布目标,点击「下一步」
- 在发布设置中,将部署模式改为「自包含」,选择与当前系统匹配的目标运行时(如
win-x64) - 完成发布后,发布文件夹会包含所有.NET Core 6的依赖库
- 修改Python代码,将
sys.path指向发布后的文件夹:
import clr import os import sys # 指向自包含发布的文件夹路径 sys.path.append(os.path.abspath("NewTest\bin\Release\publish")) clr.AddReference("NewTest") from NewTest import Class1 # 测试调用 calc = Class1() print(calc.Get_sum(2, 3))
方案2:手动添加.NET Core 6运行时路径
- 找到本地.NET Core 6的安装目录,通常位于
C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.x(x为具体版本号,可通过dotnet --list-runtimes命令查看) - 在Python代码中先添加该路径,再引用目标DLL:
import clr import os import sys # 添加.NET Core 6运行时依赖路径,替换为你的实际版本路径 dotnet_core_runtime_path = r"C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.25" sys.path.append(dotnet_core_runtime_path) # 添加目标DLL所在路径 sys.path.append(os.path.abspath("NewTest\bin\Release\net6.0")) clr.AddReference("NewTest") from NewTest import Class1 # 测试调用 calc = Class1() print(calc.Get_sum(2, 3))
方案3:改用.NET Framework类库(兼容性更好)
如果不需要.NET Core的特定特性,可以将项目改为.NET Framework类库(推荐.NET Framework 4.8):
- 在VS2022中重新创建「.NET Framework类库」项目,编写相同的相加代码
- 编译生成DLL后,直接在IronPython中引用,无需额外配置依赖路径:
import clr import os import sys sys.path.append(os.path.abspath("NewTest\bin\Release")) clr.AddReference("NewTest") from NewTest import Class1 calc = Class1() print(calc.Get_sum(2, 3))
注意事项
- 确保IronPython的位数(32/64位)与编译的类库位数一致,避免因位数不匹配导致加载失败
- 使用自包含部署时,目标运行时必须与当前操作系统匹配(如Windows选
win-x64,Linux选linux-x64)
内容的提问来源于stack exchange,提问作者Rajesh Swain
相关产品推荐
相关产品推荐

