fsharp icon indicating copy to clipboard operation
fsharp copied to clipboard

AttributeUsage.AllowMultiple is not inherited for attributes defined (subclassed) in C#

Open cmeeren opened this issue 1 year ago • 0 comments

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.

cmeeren avatar Apr 30 '24 13:04 cmeeren