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

Pythonnet导入.NET嵌套程序集报错:无法加载依赖程序集

问题描述

代码仓库

所有代码可查看:github.com/avivs100/pythonnetTest

环境信息

  • Pythonnet版本:3.0.3.0
  • Python版本:3.11.3
  • 操作系统:Win10
  • .NET Runtime:7

问题详情

我创建了一个包含3个.NET7项目的解决方案:2个类库项目和1个控制台项目。其中davidProj是仅含一个带简单属性类的类库;consoleApp1通过System.Text.Json NuGet包创建David实例并保存为JSON文件;Test.Infrastructure.DavidUtils类库包含一个静态类及以下静态方法:

public static David DeserializeDavidFromJsonString(string davidJson)
{
//using the System.Text.Json nuget
    var david = JsonSerializer.Deserialize<David>(davidJson) ?? throw new Exception("error");
    return david;
}

运行.NET程序生成David实例的JSON文件后,我将相关.dll文件和JSON文件复制到新文件夹,在该文件夹中创建Python文件并安装Pythonnet,编写对应调用代码后出现以下问题:

  • 调用含NuGet依赖的方法时,使用System.Text.Json会报错无法加载程序集'System.Memory, Version=7.0.0.0...';
  • 使用Newtonsoft.Json则提示缺失其他依赖程序集。
    调用无NuGet依赖的简单方法(如David类的构造函数、普通方法)均正常,仅含NuGet依赖的方法触发错误。

解决方案

1. 强制复制所有NuGet依赖到输出目录

.NET类库默认不会把NuGet依赖的程序集复制到输出目录,需要修改类库项目的.csproj文件,添加以下配置:

<PropertyGroup>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

重新构建项目后,输出目录会包含所有依赖的.dll文件,把这些文件全部复制到Python运行的文件夹中。

2. 配置Pythonnet的程序集搜索路径

在Python代码里,把当前工作目录添加到.NET的程序集搜索路径,确保能找到所有依赖:

import clr
import sys

# 将当前目录加入.NET程序集搜索路径
sys.path.append(".")

# 加载你的类库
clr.AddReference("Test.Infrastructure.DavidUtils")
clr.AddReference("davidProj")

# 导入并调用方法
from Test.Infrastructure.DavidUtils import DavidUtils
# 读取JSON文件内容
with open("david.json", "r") as f:
    json_content = f.read()
david = DavidUtils.DeserializeDavidFromJsonString(json_content)

3. 发布自包含的.NET类库

如果上述方法无效,直接把Test.Infrastructure.DavidUtils类库发布为自包含部署:

  • 打开项目属性的发布设置,选择自包含模式,目标运行时选win-x64(匹配你的系统架构);
  • 发布完成后,把生成的所有文件复制到Python工作目录,这样.NET运行时会直接使用本地打包的依赖,不会出现缺失问题。

4. 解决版本冲突问题

如果仍然报版本错误,检查并显式指定依赖版本:
在.csproj文件中明确指定NuGet包的版本,确保和.NET 7兼容:

<PackageReference Include="System.Text.Json" Version="7.0.3" />
<PackageReference Include="System.Memory" Version="7.0.0" />

内容的提问来源于stack exchange,提问作者aviv shichman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:06:10