diff --git a/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs b/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs new file mode 100644 index 00000000000000..71a4cb434583d1 --- /dev/null +++ b/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs @@ -0,0 +1,32 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Xunit; +using System.Reflection.Metadata; +using System.Reflection; + +namespace System.Runtime.Loader.Tests +{ + public unsafe class AssemblyExtensionsTest + { + [Fact] + public void TryGetRawMetadata() + { + bool supportsRawMetadata = PlatformDetection.IsNotMonoRuntime && PlatformDetection.IsNotNativeAot; + + Assembly assembly = typeof(AssemblyExtensionsTest).Assembly; + bool hasMetadata = assembly.TryGetRawMetadata(out byte* blob, out int length); + + Assert.Equal(supportsRawMetadata, hasMetadata); + Assert.Equal(supportsRawMetadata, blob != null); + Assert.Equal(supportsRawMetadata, length > 0); + + if (supportsRawMetadata) + { + var metadataReader = new MetadataReader(blob, length); + string assemblyName = metadataReader.GetString(metadataReader.GetAssemblyDefinition().Name); + Assert.Equal(assembly.GetName().Name, assemblyName); + } + } + } +} diff --git a/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj b/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj index 03138144a9db7b..d047aa0b74dc72 100644 --- a/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj +++ b/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj @@ -2,6 +2,7 @@ System.Runtime.Loader.Tests $(NetCoreAppCurrent) + true true true @@ -16,6 +17,7 @@ + diff --git a/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs b/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs index 9c677baa4bda0a..7eafc1a560964e 100644 --- a/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs +++ b/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs @@ -8,6 +8,13 @@ namespace System.Reflection.Metadata public static class AssemblyExtensions { [CLSCompliant(false)] - public static unsafe bool TryGetRawMetadata(this Assembly assembly, out byte* blob, out int length) => throw new NotImplementedException(); + public static unsafe bool TryGetRawMetadata(this Assembly assembly, out byte* blob, out int length) + { + ArgumentNullException.ThrowIfNull(assembly); + + blob = null; + length = 0; + return false; + } } }