The `T` in `Lazy<T>` is marked `DynamicallyAccessedMemberTypes.PublicParameterlessConstructor`
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 30/100
Research direction
Start by reviewing the Lazy constructors, especially the default constructor and the factory overload, along with their DynamicallyAccessedMemberTypes annotations. Compare the warning produced for the Create(Func) example with default-constructor usage, and determine whether a scoped annotation can avoid the false positive without regressing trimmed applications that use the default constructor.
Written by the indexing model from the issue text.
Description
This is presumably there to support the default constructor which instantiates default instances via the Activator, but it creates false positives in AOT compatible projects consuming Lazy<T> without using reflection. For example, the following method issues a warning:
static Lazy<T> Create<T>(Func<T> factory) => new(factory);
forcing authors to either suppress the warning or virally add DynamicallyAccessedMemberTypes annotations to every generic method consuming Create. I'm not aware of any workarounds other than marking the default constructor as RequiresUnreferencedCode but presumably this would create regressions in trimmed apps using the default constructor. I'm wondering if there's a way we could specify DynamicallyAccessMembers on a type parameter in a way that is scoped to a particular constructor overload.
cc @vitek-karas @eerhardt for thoughts.
- Dominant language
- C#
- Stars
- 18.3k
- Forks
- 5.6k
- PR merge metrics
- PR metrics pending
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from dotnet/runtime
-
agentic-workflows untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
area-System.Reflection blocking-clean-ci-optional Known Build Error os-mac-os-x untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
area-CodeGen-coreclr untriaged
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
agentic-workflows untriaged
Difficulty 1/5 Under an hour Newbie friendliness 78/100
-
area-VM-meta-mono untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SubtitleEdit/subtitleedit#15108 · 1 comment ·
-
area/docs-content Bug pulumi/docs
Difficulty 1/5 1-3 hours Newbie friendliness 94/100
-
Create parent directories only after the containment check in InstallHelper.TryExtractToDirectory Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PowerShell/PSResourceGet#2056 ·