【问题标题】:C# Cannot be used across assembly boundaries because it has a generic type parameters that is an embedded interop typeC# 不能跨程序集边界使用,因为它具有作为嵌入式互操作类型的泛型类型参数
【发布时间】:2016-05-18 04:23:31
【问题描述】:

我在使用 C# (wpf) 时遇到此错误。 这个链接没有用

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 --> 我的程序 myPcd.obcPcdlrnDimensionCommands

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

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

【问题讨论】:

  • 那么库是作为嵌入式互操作类型添加的吗?你能把它改成不嵌入,看看是否能解决问题?
  • 感谢您的回答,请查看我的编辑。

标签: c# wpf dll compiler-errors .net-assembly


【解决方案1】:

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

换句话说,如果你有assembly1,它引用了一些interopAssembly,和assembly2,它引用了相同的interopAssembly,并且你将embedded interop type切换到true,那么你将拥有两个来自interopAssembly的类型副本。

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 2022-06-17
      • 1970-01-01
      • 2014-12-01
      相关资源
      最近更新 更多