无法调用采用在不同程序集中定义的类型的参数的函数

Can't call a function which takes a parameter of a type that is defined in a different assembly

假设有 2 个用 C# 编写的程序集。第一个程序集的代码是:

namespace VSInterface
{
    public class X
    {

    }
}

第二次组装的代码是:

namespace VSInterface
{
    public class TestIPY
    {
        public static void foo(X bar)
        {

        }
    }
}

当我从以下 IPY 代码调用函数 foo 时:

import clr
clr.AddReferenceToFileAndPath(r"SomeFolder\FirstAssembly.dll")
clr.AddReferenceToFileAndPath(r"SomeOtherFolder\SecondAssembly.dll")

from VSInterface import TestIPY, X

TestIPY.foo(X())

我得到一个错误:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
TypeError: expected X, got X

只有当 类 XTestIPY 在单独的程序集中定义时,我才会收到此错误。当它们在同一个程序集中定义时,代码工作正常。

当 类 包含在单独的程序集中时,为什么它不起作用?

我猜这个问题和我去年报道过的这个有点关系: IronPython: How to call a function that expects an array of value-types?

我放弃了寻找相关问题的解决方案,因为我认为 LabView 发生了一些有趣的事情。但是,现在我想与我自己的 C# 代码进行交互,但我得到了类似(相同?)的错误。

2016 年 1 月 12 日更新 不幸的是,这个问题对我来说并没有完全解决。当 SomeOtherFolder 包含 FirstAssembly.dll 的副本时会出现问题。这可以通过从 SomeOtherFolder 中删除 FirstAssembly 轻松解决。 但是,如果SomeFolder(我意识到我应该选择更好的目录名称...)是一个相对路径,问题也会发生.这对我来说是个问题,因为我必须为我的项目使用相对路径。我可以通过使用以下代码导入程序集来避免这个问题:

import clr
import os
clr.AddReferenceToFileAndPath(os.path.abspath(r"SomeFolder\FirstAssembly.dll"))

我真的不明白为什么在使用相对路径时它不起作用,我不确定这是否是 IronPython 中的错误。

当程序集 FirstAssembly.dll 位于以下文件夹中时会出现此问题:SomeFolderSomeOtherFolder。因为在那种情况下,类型 X 被加载了两次,并且它不再与 foo.

的签名匹配