dotnet/runtime

MetadataLoadContext assembly binding behavior is documented incorrectly

Open

#113.353 aberto em 11 de mar. de 2025

Ver no GitHub
 (2 comments) (0 reactions) (0 assignees)C# (5.445 forks)batch import
area-System.Reflectiondocumentationhelp wanted

Métricas do repositório

Stars
 (17.886 stars)
Métricas de merge de PR
 (Mesclagem média 12d 11h) (661 fundiu PRs em 30d)

Description

When MetadataLoadContext is resolving an assembly and its MetadataAssemblyResolver returns null, it throws an exception with this message: https://github.com/dotnet/runtime/blob/a49ed697037bad503e32daa23f4339ebfb8962ea/src/libraries/System.Reflection.MetadataLoadContext/src/Resources/Strings.resx#L181 The message suggests that 'pre-loading' the assembly with LoadFromAssemblyPath will populate the MetadataLoadContext's assembly binding cache.

The API documentation for the LoadFrom methods also suggests this is the case:

MetadataLoadContext.LoadFromAssemblyPath Loads an assembly from a specific path on the disk and binds its assembly name to it in the MetadataLoadContext.

But these methods do not do this: https://github.com/dotnet/runtime/blob/a49ed697037bad503e32daa23f4339ebfb8962ea/src/libraries/System.Reflection.MetadataLoadContext/src/System/Reflection/MetadataLoadContext.Loading.cs#L47-L49

It looks like this behavior was changed, but the documentation and exception message was not updated: https://github.com/dotnet/runtime/commit/2ef74f6be9ac1a70902facdc4047c49682e75005#diff-7a38392b94b0c17ee62172e5b642b77f0b3a1bb8d79a6488d24f1729345c46fbL49

Guia do colaborador