C# 不能跨程序集边界使用,因为它的泛型类型参数是嵌入式互操作类型

C# Cannot be used across assembly boundaries because it has a generic type parameters that is an embedded interop type

我在使用 C# (wpf) 时遇到了这个错误。 这个link没用

Cannot be used across assembly boundaries because it has a generic type parameters that is an embedded interop type

只是为了解释我的程序的结构,我可以说:

我正在使用外部公司制作的库。我们可以称之为 PCDLRN

在解决方案中,我有一个项目是我自己做的,它包含了之前库中的类型。在我的图书馆我定义:

public ObservableCollection<PCDLRN.DimensionCmd> obcPcdlrnDimensionCommands = new ObservableCollection<PCDLRN.DimensionCmd>();

为了在我的主程序中使用。 简而言之:

PCDLRN->MYLIB obcPcdlrnDimensionCommands --> MY PROGRAM myPcd.obcPcdlrnDimensionCommands

在我的程序中,我想访问前面提到的 ObservableCollection,但它没有构建,在标题中给出了错误。

--编辑--- 正如所建议的那样,我已经通过更改图片中的道具从 embedded = true 更改为 false 但错误仍然存​​在

正如 WasGoodDone 所说,您需要对用于泛型的两个(所有)程序集使用相同的 class。

换句话说,如果您有 assembly1,它引用了一些 interopAssembly,而 assembly2 引用了相同的 interopAssembly,然后您切换 [=14] =] 到 true,那么你将有 两个 个来自 interopAssembly.

类型的副本

如果您想使用从 assembly1assembly2 的一些交叉引用,.NET 无法解决它,因为从他们的角度来看,class 是不一样。

当您关闭嵌入式选项时,您的程序集将引用包含互操作类型的其他程序集。通过这种方式,您可以在不同的库中使用互操作类型。

因此,如果您遇到上述问题,则意味着您至少有两个程序集引用了 PCDLRN,您必须关闭所有这些程序集中的 embedded interop type

Embed Interop types 没有显示在我的程序集的 属性 页面上(如上面的问题),所以我直接编辑项目文件来解决这个问题: