Can an assembly that includes a non-CLS-compliant reference be CLS-compliant?
Yes, your DLL can be CLS-compliant as long as it doesn't expose any non-CLS-compliant members from the referenced assembly -- that is, it doesn't mention them in any of its own public or protected members or types. (It can still use them in private and internal members and types.)
If your DLL does need to expose types directly from the non-compliant DLL, you can either try encapsulating those types in your own wrappers (e.g. a method might return a MyWrapperAroundNaughtyType
instead of a NaughtyType
), or you can mark the relevant members of your API CLSCompliant(false)
to opt just those members out of compiler checking.