我刚开始使用IronPython并且使用我的.NET dll时遇到了一些困难
我有两个程序集assemblyA
和assemblyB
,assemblyA
引用assemblyB
。在每个集合中,我都有一个这种原型的类:
assemblyA
using assemblyB
namespace assemblyA
{
public classA
{
private assemblyB.classB property;
public assemblyB.classB Property {get;set;}
}
}
assemblyB
namespace assemblyB
{
public classB
{
private double variable;
public double Variable{get;set;}
}
}
在我的代码中,我首先加载两个程序集:
import clr
clr.AddReferenceToFileAndPath(r'C:\Users\Me\Documents\.....\assemblyA.dll')
clr.AddReferenceToFileAndPath(r'C:\Users\Me\Documents\.....\assemblyB.dll')
import assemblyA
import assemblyB
clA = assemblyA.classA() #ok
clB = assemblyB.classB() #ok
clA.Prop = clB #Error: expected classB, got classB
clA.Prop = assemblyB.classB() #of course same error
有关如何解决问题的任何建议?我想这是因为assemblyB
被加载两次但我只有一个assemblyB.dll所以为什么它不被认为是相同的?
答案 0 :(得分:1)
经过多次试验,我终于找到了解决方案。我只是添加了在系统路径中搜索dll的路径,让IronPython决定加载哪一个:
import sys, os, clr
sys.path.append(r'[MyPath for assemblyA]')
sys.path.append(r'[MyPath for assemblyB]')
clr.AddReferenceToFile('assemblyA.dll')
clr.AddReferenceToFile('assemblyB.dll')
此问题与https://ironpython.codeplex.com/workitem/25124有关,此处我提出了一种解决方法。