10

我有一个不符合 CLS 的现有 DLL,我从自己的项目中引用了该 DLL。当我将我的程序集标记为符合 CLS 时,我收到编译器警告,指出所引用程序集中的名称不符合 CLS。

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

4

2 回答 2

11

是的,您的 DLL 可以符合 CLS,只要它不从引用的程序集中公开任何不符合 CLS 的成员——也就是说,它没有在其自己的任何公共或受保护成员或类型中提及它们. (它仍然可以在私有和内部成员和类型中使用它们。)

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

于 2011-02-12T01:16:08.423 回答
0

由于其他建议不起作用,我最终做的是Embed Interop Types将引用的 dll(具有不符合 CLS 的成员)的属性设置为 false。

于 2020-01-17T09:13:26.207 回答