Python3.9.7+.NET5环境下pythonnet添加/查找NuGet包的简便方法
pythonnet调用.NET 5 NuGet包加载失败解决方案
核心结论
不需要手动逐个查找NuGet包路径添加,可通过以下几种更简便的方式解决两类加载报错问题:
方案1:统一收集所有依赖程序集到单目录
新建一个.NET 5类库项目,在项目中安装所有你需要用到的NuGet包,执行dotnet publish -c Release命令,将发布输出目录下的所有dll文件统一放在一个文件夹中,Python初始化时只需要将这个文件夹路径添加到sys.path即可,运行时会自动扫描该目录下的所有程序集,不需要逐个添加每个NuGet包的单独路径。
优化后的Python初始化代码示例:from clr_loader import get_coreclr from pythonnet import set_runtime rt = get_coreclr("c:\\Temp\\runtimeconfig.json") set_runtime(rt) import clr import sys # 仅需添加发布后的dll统一目录 sys.path.append("C:\\your_publish_dll_folder")方案2:通过runtimeconfig.json配置全局包探测路径
直接在你的runtimeconfig.json中添加additionalProbingPaths配置,将本地NuGet全局包缓存路径、自定义包源路径都加入进去,.NET运行时会自动在这些路径下查找匹配版本的程序集,不需要手动调用sys.path.append添加单个包路径。
修改后的runtimeconfig.json示例:{ "runtimeOptions": { "tfm": "net5.0", "framework": { "name": "Microsoft.NETCore.App", "version": "5.0.0" }, "additionalProbingPaths": [ "C:\\Users\\xyz\\.nuget\\packages", "C:\\your_custom_nuget_source_path" ] } }简化程序集引用操作
你可以把所有需要加载的程序集名整理成一个列表,循环调用clr.AddReference即可,不需要逐行写引用代码:# 批量添加引用 asm_list = ["Newtonsoft.Json", "Microsoft.Extensions.DependencyInjection", "Microsoft.Extensions.DependencyInjection.Abstractions"] for asm in asm_list: clr.AddReference(asm) # 之后再执行导入操作 from Newtonsoft.Json import JsonConvert from Microsoft.Extensions.DependencyInjection import ServiceCollection
内容的提问来源于stack exchange,提问作者Klamsi
相关产品推荐
相关产品推荐

