dotnet/runtime

MetadataLoadContext assembly binding behavior is documented incorrectly

オープン

#113,353 opened on 2025/03/11

 (2 件のコメント) (0 件のリアクション) (0 人の担当者)C# (5,445 件のフォーク)batch import
area-System.Reflectiondocumentationhelp wanted

Repository metrics

Stars
 (17,886 個のスター)
PR merge metrics
 (PR metrics pending)

説明

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

コントリビューターガイド