包含非CLS兼容引用的程序集是否可以符合CLS?

问题描述:

我有一个现有的DLL不符合CLS,我从我自己的项目中引用。当我将程序集标记为符合CLS时,我收到编译器警告,说明引用程序集中的名称不符合CLS。包含非CLS兼容引用的程序集是否可以符合CLS?

有没有办法让我的程序集符合CLS并将引用的标记为不是?

是的,只要你的DLL没有公开引用程序集中的任何非CLS兼容成员 - 也就是说,它没有在它自己的公共或受保护的成员或类型。 (它仍然可以在私有和内部成员和类型中使用它们)。

如果您的DLL确实需要直接从不兼容的DLL中公开类型,那么您可以尝试在自己的包装中封装这些类型(例如方法可能会返回MyWrapperAroundNaughtyType而不是NaughtyType),或者您可以标记API CLSCompliant(false)的相关成员,以便只选择那些不在编译器检查中的成员。

+0

我是否还需要将“嵌入互操作类型”标记为false? (这是一个COM库,由于带下划线的名称,它不符合CLS。) – ide 2011-02-12 01:18:47