The title says it all - how do I flag a .NET standard library as CLS-compliant?
I wrote a simple library in C# targeting .NET Standard 1.0 framework. It includes two enums:
public enum Alignments { Left, Center, Right }
public enum Actions { None, Total, Average, Count }
When I try to use the library in a .NET 4.6 project it flags the enums as non-CLS-compliant:
Warning CS3001 Argument type 'Actions' is not CLS-compliant
I cannot add anything to AssemblyInfo.cs since this is not used by .NET standard. It does not seem to be supported as a property in the .csproj file either.
Warning CS3014 'Alignments' cannot be marked as CLS-compliant because the assembly does not have a CLSCompliant attribute
- go figure. So I dug through the documents and found the answer: you put the[assembly: CLSCompliant(true)]
statement in regular code. Thanks for the help! – FarnyCLSCompliant
is no longer useful (a link maybe)? Doesn't it still make sense to use it for compatibility with VB.NET, for example? – RabblementCLSCompliant
does check for exposed unsigned integer types (UInt32
, etc). Many popular languages today still don't support unsigned integers and those languages may find themselves in an interop scenario with .NET (such as Python, Java, ECMAScript, and OCaml). Given that those languages would probably interop with .NET through a marshal system instead of the CLR directly then I suppose it's reasonable to abandon the pretense of keeping a library project portable between languages. – Hopping