Python 将在哪里搜索 .NET 程序集



我们有一个C#应用程序,我们需要提供Python脚本接口。现在,它的实现方式是:

  • 托管脚本库(编译为 DLL)完成所有核心工作
  • C++/CLI 包装器(环绕托管库并编译为静态库)执行所有本机托管的数据转换
  • 提升扩展项目 (BOOST_PYTHON_MODULE)(编译为动态库,扩展手动更改为 pyd)与 C++/CLI 包装层通信。

我遇到的问题是,每次任何python应用程序尝试使用该接口时,它都会抱怨找不到核心托管程序集。我必须将其放在 Python 安装目录中,或者将其部署到 GAC 中。

我启用了Windows Fusion日志记录,看到它只会探测Python目录中的程序集,我想知道是否有办法指示Python在我们的应用程序安装目录中搜索.NET程序集,或者更确切地说,任何自定义目录?

尝试了这篇文章中的所有方法,但这对我不起作用。任何帮助将不胜感激!

附注:

  • 我们知道还有其他python选项,如IronPython或Python .NET,但我们需要向后兼容,因此还需要C++接口。
  • 如果您好奇我得到什么错误,这里是:

    未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集"脚本接口,版本=1.3.9.0,区域性=中性,公钥令牌=160df4f7a3973cc2"或其依赖项之一。系统找不到指定的文件。在NativeCommunicator。{ctor}(母语沟通者* )

要解决问题,您必须:

  1. 在你的 python 脚本中作为第一行,你必须调用"init"。
  2. "Init"是您在 .pyd 模块中添加的函数
  3. 在 Init 方法中,您只需注册一个用于解析程序集的钩子。
  4. 在钩子中,您有机会从所需的任何目录加载程序集。

以下链接可能对您有所帮助:从非托管 c++ 动态加载混合模式 C++/CLI .dll(和依赖项)

相关内容

最新更新