fsharp
fsharp copied to clipboard
AttributeUsage.AllowMultiple is not inherited for attributes defined (subclassed) in C#
Seems related to #9256.
C# attribute definitions:
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class BaseAttribute : Attribute;
public class ChildAttribute : BaseAttribute;
This works fine in C#, i.e., the following compiles:
[Child]
[Child]
public class Foo;
However, the following F# code does not:
[<Child>]
[<Child>]
type Foo() = class end
This fails on the second [<Child>] line with FS0429:
Error FS0429 : The attribute type 'ChildAttribute' has 'AllowMultiple=false'. Multiple instances of this attribute cannot be attached to a single language element.
If ChildAttribute is defined in F# instead, it works.
A simple, but of course suboptimal workaround is to subclass the desired (already subclassed) attribute and set the correct AttributeUsage on it.