diff --git a/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems b/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems
index d2a72950212df8..428af3859c2a02 100644
--- a/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems
+++ b/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems
@@ -877,6 +877,7 @@
+
diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/OverloadResolutionPriorityAttribute.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/OverloadResolutionPriorityAttribute.cs
new file mode 100644
index 00000000000000..f38d3195815b1d
--- /dev/null
+++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/OverloadResolutionPriorityAttribute.cs
@@ -0,0 +1,26 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace System.Runtime.CompilerServices
+{
+ ///
+ /// Specifies the priority of a member in overload resolution. When unspecified, the default priority is 0.
+ ///
+ [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
+ public sealed class OverloadResolutionPriorityAttribute : Attribute
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The priority of the attributed member. Higher numbers are prioritized, lower numbers are deprioritized. 0 is the default if no attribute is present.
+ public OverloadResolutionPriorityAttribute(int priority)
+ {
+ Priority = priority;
+ }
+
+ ///
+ /// The priority of the member.
+ ///
+ public int Priority { get; }
+ }
+}
diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs
index a3f2a4b07e2f48..fcfa67c001d8f5 100644
--- a/src/libraries/System.Runtime/ref/System.Runtime.cs
+++ b/src/libraries/System.Runtime/ref/System.Runtime.cs
@@ -13091,6 +13091,12 @@ public sealed partial class NullablePublicOnlyAttribute : System.Attribute
public readonly bool IncludesInternals;
public NullablePublicOnlyAttribute(bool value) { }
}
+ [System.AttributeUsageAttribute(System.AttributeTargets.Method | System.AttributeTargets.Constructor | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)]
+ public sealed partial class OverloadResolutionPriorityAttribute : System.Attribute
+ {
+ public OverloadResolutionPriorityAttribute(int priority) { }
+ public int Priority { get { throw null; } }
+ }
[System.AttributeUsageAttribute(System.AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)]
public sealed partial class ParamCollectionAttribute : System.Attribute
{
diff --git a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Runtime/CompilerServices/AttributesTests.cs b/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Runtime/CompilerServices/AttributesTests.cs
index 6f58cc48e5bfb9..bb7539a4e357e5 100644
--- a/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Runtime/CompilerServices/AttributesTests.cs
+++ b/src/libraries/System.Runtime/tests/System.Runtime.Tests/System/Runtime/CompilerServices/AttributesTests.cs
@@ -399,5 +399,12 @@ public static void RequiresLocationAttributeTests()
{
new RequiresLocationAttribute();
}
+
+ [Fact]
+ public static void OverloadResolutionPriorityAttributeTests()
+ {
+ var attr = new OverloadResolutionPriorityAttribute(42);
+ Assert.Equal(42, attr.Priority);
+ }
}
}