pythonnet 3.0版本 安装和使用第三方C# DLL库。


2022/4/6更新
pythonnet 3.0 版本在Linux使用方法。
ubuntu 20.04 系统只需要安装使用如下命令安装mono开发环境即可正常使用 pythonnet

apt install mono-devel

使用的 pythonnet 为尚在测试的 3.0 版本。该版本直接舍弃了一大堆依赖,安装非常简单。
这个pythonnet据说在windows和linux都可以正常使用,当前我只在windows上测试,linux上有空再试

# 当前最新(截止至2022/3/29)的预发行版本
pip install pythonnet==3.0.0a2

3.0.0 版本不再限定某个 python 3.X 版本,而是全部 python 3.X 版本都可以直接安装。
因为自3.0.0版本开始,pythonnet 把对 C# 的依赖全都变成了动态依赖于系统的 Net库,而不是再封装到wheel里面。

简单的基于pythonnet 导入第三方库的DLL和使用第三方库方法的示例。

import sys
import os

# 把第三方C#库的DLL所在的文件夹包含到 sys.path 路径列表里面
# 一定要把第三方DLL的所有第三方子依赖DLL的文件夹都弄进去,不然后面会导入失败
# 或者把这些DLL都丢在执行的py文件所在目录,那也没问题,这样可以省去该步。
sys.path.append(os.path.dirname(__file__)+'/dll')

import pythonnet
import clr
from System import String
from System.IO import SeekOrigin
from System.IO import MemoryStream
from System.Collections import *

# 导入第三方C#库
# 我的 DLL 的名称是 IC.SlideServices.FileFormat.Tronmedi.Common.dll
# 所以导入名称为 IC.SlideServices.FileFormat.Tronmedi.Common
# 不需要包含 .dll 后缀,也不需要包含它所在的文件夹
# 注意,如果目标DLL缺少没找到某些子依赖DLL,该步不会报错,但会在下一步导入时提示找不到对应的命名空间,这个十分坑爹,很难查错。
clr.AddReference("IC.SlideServices.FileFormat.Tronmedi.Common")

# 从第三方C#库中导入类 TronArchive
# 该步有时报错找不到某些子依赖DLL,这个还好,可以手动添加
# 有时报错指定的命名空间不存在,这个就很坑爹,很难查
from IC.SlideServices.FileFormat.Tronmedi import TronArchive

# 使用该类打开文件
arc = TronArchive(r'C012.tron')

# 随便打印一些信息
print(arc.Metadata.Name)
print(arc.Metadata.Version)
print(arc.Metadata.MaximumZoomLevel)
print(arc.Metadata.VerticalResolution)
print(arc.Metadata.HorizontalResolution)

你可能感兴趣的:(python,python,pythonnet,C#)