无法调用采用在不同程序集中定义的类型的参数的函数
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
只有当 类 X
和 TestIPY
在单独的程序集中定义时,我才会收到此错误。当它们在同一个程序集中定义时,代码工作正常。
当 类 包含在单独的程序集中时,为什么它不起作用?
我猜这个问题和我去年报道过的这个有点关系:
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
位于以下文件夹中时会出现此问题:SomeFolder
和 SomeOtherFolder
。因为在那种情况下,类型 X
被加载了两次,并且它不再与 foo
.
的签名匹配
假设有 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
只有当 类 X
和 TestIPY
在单独的程序集中定义时,我才会收到此错误。当它们在同一个程序集中定义时,代码工作正常。
当 类 包含在单独的程序集中时,为什么它不起作用?
我猜这个问题和我去年报道过的这个有点关系: 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
位于以下文件夹中时会出现此问题:SomeFolder
和 SomeOtherFolder
。因为在那种情况下,类型 X
被加载了两次,并且它不再与 foo
.