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