c# - Python for .NET : Using same . 多个版本的 NET 程序集

标签 c# python .net ironpython python.net

我的问题:我有两个版本的程序集,想在我的 Python 项目中同时使用它们。

.NET 库安装在 GAC (MSIL) 中,具有相同的公共(public) token :

lib.dll (1.0.0.0)
lib.dll (2.0.0.0)

在 Python 中我想要这样的东西:

import clr
clr.AddReference("lib, Version=1.0.0.0, ...")
from lib import Class
myClass1 = Class()
myClass1.Operation()

*magic*

clr.AddReference("lib, Version=2.0.0.0, ...")
from lib import class
myClass2 = Class()
myClass2.Operation()
myClass2.OperationFromVersion2()

*other stuff*

# both objects should be accessibly
myClass1.Operation() 
myClass2.OperationFromVersion2()

有办法吗?与 AppDomains 或 bindingRedirect 有关吗?

注意:当然 myClass1.operationFromVersion2() 可能会失败...

最佳答案

好吧,我找到了一个解决方案:Python for .NET 也支持反射!

代替

clr.AddReference("lib, Version=1.0.0.0, ...")

你必须使用

assembly1 = clr.AddReference("lib, Version=1.0.0.0, ...")

通过该程序集,您可以像在 C# 中一样使用所有反射功能。在我的示例中,我必须使用以下代码(与版本 2 相同):

from System import Type
type1 = assembly1.GetType(...)
constructor1 = type1.GetConstructor(Type.EmptyTypes)
myClass1 = constructor1.Invoke([])

关于c# - Python for .NET : Using same . 多个版本的 NET 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31408391/

相关文章:

python - matplotlib 中带有 LineCollection 的水平线?

python - C++ Boost Multiprecision 与 Python 的 mpmath 之间的互操作性

c# - 返回 ICollection<T> 而不是 List<T> 的真正优势是什么?

.net - 我该如何解决?错误 : Select is not a member of 'System.Collections.Generic.List(Of String)'

.net - DataGridRow 上的 WPF DataGrid MouseOver

c# - Acrobat SDK C# 教程

c# - 如何读取在 C# 中打开的文件?

c# - 如何在Msbuild中使用Property函数找到当前工作目录盘符?

带有附加 Windows 服务的 C# Windows 窗体

python - 如何用汉字打印 tesseract 结果