dotnet / dotnet/runtime

[API Proposal]: Make DynamicallyAccessedMembersAttribute accept member names

Open
#129,415 7 comments 0 reactions 0 assignees View on GitHub
api-suggestion area-Tools-ILLink
Dominant language
C#
Stars
18.3k
Forks
5.6k
PR merge metrics
PR metrics pending

Description

### Background and motivation

Every time I've used DynamicallyAccessedMembersAttribute, I found that it is too broad. I'm supposed to pick all public methods, private methods, etc, but every time I've used it, I only needed members with a specific name, and the attribute as-is will keep much more untrimmed than I need. That's why I'm proposing adding the ability to limit the members to certain member names. This should help a lot with trimming.

### API Proposal

```c#
namespace System.Diagnostics.CodeAnalysis;

public sealed partial class DynamicallyAccessedMembersAttribute : Attribute
{
public DynamicallyAccessedMembersAttribute(DynamicallyAccessedMemberTypes memberTypes, params string[] memberNames);

public string[]? MemberNames { get; }
}
```

### API Usage

```c#
struct S<
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods, "op_Equality", "op_Inequality")]
T>
{
}

struct S2<
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods, "Parse", "TryParse")]
T>
{
}
```

### Alternative Designs

_No response_

### Risks

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.