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
.
类型的副本
如果您想使用从 assembly1
到 assembly2
的一些交叉引用,.NET 无法解决它,因为从他们的角度来看,class 是不一样。
当您关闭嵌入式选项时,您的程序集将引用包含互操作类型的其他程序集。通过这种方式,您可以在不同的库中使用互操作类型。
因此,如果您遇到上述问题,则意味着您至少有两个程序集引用了 PCDLRN,您必须关闭所有这些程序集中的 embedded interop type
。
Embed Interop types
没有显示在我的程序集的 属性 页面上(如上面的问题),所以我直接编辑项目文件来解决这个问题:
我在使用 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
.
如果您想使用从 assembly1
到 assembly2
的一些交叉引用,.NET 无法解决它,因为从他们的角度来看,class 是不一样。
当您关闭嵌入式选项时,您的程序集将引用包含互操作类型的其他程序集。通过这种方式,您可以在不同的库中使用互操作类型。
因此,如果您遇到上述问题,则意味着您至少有两个程序集引用了 PCDLRN,您必须关闭所有这些程序集中的 embedded interop type
。
Embed Interop types
没有显示在我的程序集的 属性 页面上(如上面的问题),所以我直接编辑项目文件来解决这个问题: