从 Python 加载 C#:访问方法时无法加载 .NET 依赖项

分享于2022年07月17日 .net c# python 问答
【问题标题】:从 Python 加载 C#:访问方法时无法加载 .NET 依赖项(Load C# from Python: Unable to Load the .NET dependencies while accessing the methods)
【发布时间】:2022-07-11 20:20:26
【问题描述】:

环境

Pythonnet 版本:3.0.0a2 预发布 Python版本:3.10.5 操作系统:Windows 10 .NET 运行时:.Net core 6.0 和 5.0

详情

已经创建了一个简单的程序来

  1. 添加 2 个号码
  2. 从文件中读取 XML
  3. 转换 Base64 编码 使用 PythonNet CLR 导入 dll 并访问上述所有方法

在 .NET 核心 6.0 上:

  • 添加 2 个号码就像魅力一样
  • 读取 XML 和 Covert Base64 抛出错误
  • System.TypeLoadException:无法从程序集“System.Text.Encoding,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”加载类型“System.Text.Encoding”。 在 DllExport.XMLReader(String filePath)

在 .NET core 5.0 上:

添加 2 个数字有效 读取 XML 有效 转换 Base64 不起作用并抛出错误 System.TypeLoadException:无法从程序集“System.Runtime,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”加载类型“System.Convert”。 在 ReusableLibariesConsole.Program.Base64_Encode(Byte[] data)

我们已将 .NET 版本设置为 2.0 然后所有 3 个错误都消失了,但是其他方法(例如加密)不再起作用 System.TypeLoadException:无法从程序集“System.Security.Cryptography.Csp,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”加载类型“System.Security.Cryptography.PasswordDeriveBytes”。 在 DllExport.EncryptionManagerClass.Encrypt(String inputData, String password, Int32 bits)

我们尝试了很多修复,例如将 CPU 设置为 x64,更改目标框架,但没有任何效果。 如果您需要更多信息,请告诉我们


【解决方案1】:

大约一周前我碰巧一直在与类似的问题作斗争

出现错误:System.TypeLoadException:无法从程序集“System.Data.Common”加载类型“System.Data.Dataset”,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a

为了解决这个问题,我将 .NET 版本降级为 4.8