我有一个不符合 CLS 的现有 DLL,我从自己的项目中引用了该 DLL。当我将我的程序集标记为符合 CLS 时,我收到编译器警告,指出所引用程序集中的名称不符合 CLS。
有没有办法让我的程序集符合 CLS 并将引用的程序集标记为不符合?
我有一个不符合 CLS 的现有 DLL,我从自己的项目中引用了该 DLL。当我将我的程序集标记为符合 CLS 时,我收到编译器警告,指出所引用程序集中的名称不符合 CLS。
有没有办法让我的程序集符合 CLS 并将引用的程序集标记为不符合?
是的,您的 DLL 可以符合 CLS,只要它不从引用的程序集中公开任何不符合 CLS 的成员——也就是说,它没有在其自己的任何公共或受保护成员或类型中提及它们. (它仍然可以在私有和内部成员和类型中使用它们。)
如果您的 DLL 确实需要直接从不兼容的 DLL 公开类型,您可以尝试将这些类型封装在您自己的包装器中(例如,方法可能返回 aMyWrapperAroundNaughtyType
而不是 a NaughtyType
),或者您可以将 API 的相关成员标记CLSCompliant(false)
为只选择那些成员退出编译器检查。
由于其他建议不起作用,我最终做的是Embed Interop Types
将引用的 dll(具有不符合 CLS 的成员)的属性设置为 false。