diff --git a/ComponentModel b/ComponentModel index ef79e50..e54a57d 160000 --- a/ComponentModel +++ b/ComponentModel @@ -1 +1 @@ -Subproject commit ef79e5064289d861c934eaf712fc331db8559438 +Subproject commit e54a57d2ddee82128c88c5eb171b4389e09bbce8 diff --git a/Enumerations b/Enumerations index 4159f70..55767bd 160000 --- a/Enumerations +++ b/Enumerations @@ -1 +1 @@ -Subproject commit 4159f7081cc386611bdba39c1cade713175d2a05 +Subproject commit 55767bd1bda2c454e93f938d98d1415026ad7c2e diff --git a/Extensions b/Extensions index 7156781..b0acdc7 160000 --- a/Extensions +++ b/Extensions @@ -1 +1 @@ -Subproject commit 715678129e01dec25fa9c3ffba704a0bff507d84 +Subproject commit b0acdc7e618c3884c258b73437b87711312f15d7 diff --git a/Primitives b/Primitives index 8b6d48e..eebe033 160000 --- a/Primitives +++ b/Primitives @@ -1 +1 @@ -Subproject commit 8b6d48e1cb065e843ec67facb6acd5c21e860f33 +Subproject commit eebe0334926f83d0703db4d712c2151f205f6eea diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/AllowNullAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/AllowNullAttribute.cs new file mode 100644 index 0000000..b9fedb8 --- /dev/null +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/AllowNullAttribute.cs @@ -0,0 +1,9 @@ +namespace System.Diagnostics.CodeAnalysis; + +/// Specifies that null is allowed as an input even if the corresponding type disallows it. +[AttributeUsage( + AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, + Inherited = false +)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNETSTANDARD21ORGREATER)] +internal sealed class AllowNullAttribute : Attribute { } diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/DisallowNullAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/DisallowNullAttribute.cs new file mode 100644 index 0000000..053d914 --- /dev/null +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/DisallowNullAttribute.cs @@ -0,0 +1,9 @@ +namespace System.Diagnostics.CodeAnalysis; + +/// Specifies that null is disallowed as an input even if the corresponding type allows it. +[AttributeUsage( + AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, + Inherited = false +)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNETSTANDARD21ORGREATER)] +internal sealed class DisallowNullAttribute : Attribute { } diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/DoesNotReturnAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/DoesNotReturnAttribute.cs new file mode 100644 index 0000000..3a857a2 --- /dev/null +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/DoesNotReturnAttribute.cs @@ -0,0 +1,6 @@ +namespace System.Diagnostics.CodeAnalysis; + +/// Applied to a method that will never return under any circumstance. +[AttributeUsage(AttributeTargets.Method, Inherited = false)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNETSTANDARD21ORGREATER)] +internal sealed class DoesNotReturnAttribute : Attribute { } diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/DoesNotReturnIfAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/DoesNotReturnIfAttribute.cs index ca6cafb..b1e8a51 100644 --- a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/DoesNotReturnIfAttribute.cs +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/DoesNotReturnIfAttribute.cs @@ -1,8 +1,7 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - namespace System.Diagnostics.CodeAnalysis; +/// Specifies that the method will not return if the associated Boolean parameter is passed the specified value. +[AttributeUsage(AttributeTargets.Parameter, Inherited = false)] internal sealed class DoesNotReturnIfAttribute : Attribute { /// Initializes the attribute with the specified parameter value. diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/MaybeNullAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/MaybeNullAttribute.cs new file mode 100644 index 0000000..2a45b4c --- /dev/null +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/MaybeNullAttribute.cs @@ -0,0 +1,12 @@ +namespace System.Diagnostics.CodeAnalysis; + +/// Specifies that an output may be null even if the corresponding type disallows it. +[AttributeUsage( + AttributeTargets.Field + | AttributeTargets.Parameter + | AttributeTargets.Property + | AttributeTargets.ReturnValue, + Inherited = false +)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNETSTANDARD21ORGREATER)] +internal sealed class MaybeNullAttribute : Attribute { } diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/MaybeNullWhenAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/MaybeNullWhenAttribute.cs new file mode 100644 index 0000000..995b5bb --- /dev/null +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/MaybeNullWhenAttribute.cs @@ -0,0 +1,16 @@ +namespace System.Diagnostics.CodeAnalysis; + +/// Specifies that when a method returns , the parameter may be null even if the corresponding type disallows it. +[AttributeUsage(AttributeTargets.Parameter, Inherited = false)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNETSTANDARD21ORGREATER)] +internal sealed class MaybeNullWhenAttribute : Attribute +{ + /// Initializes the attribute with the specified return value condition. + /// + /// The return value condition. If the method returns this value, the associated parameter may be null. + /// + public MaybeNullWhenAttribute(bool returnValue) => ReturnValue = returnValue; + + /// Gets the return value condition. + public bool ReturnValue { get; } +} diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/MemberNotNullAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/MemberNotNullAttribute.cs new file mode 100644 index 0000000..778de5b --- /dev/null +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/MemberNotNullAttribute.cs @@ -0,0 +1,26 @@ +namespace System.Diagnostics.CodeAnalysis; + +/// Specifies that the method or property will ensure that the listed field and property members have not-null values. +[AttributeUsage( + AttributeTargets.Method | AttributeTargets.Property, + Inherited = false, + AllowMultiple = true +)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNETSTANDARD21ORGREATER)] +internal sealed class MemberNotNullAttribute : Attribute +{ + /// Initializes the attribute with a field or property member. + /// + /// The field or property member that is promised to be not-null. + /// + public MemberNotNullAttribute(string member) => Members = new[] { member }; + + /// Initializes the attribute with the list of field and property members. + /// + /// The list of field and property members that are promised to be not-null. + /// + public MemberNotNullAttribute(params string[] members) => Members = members; + + /// Gets field or property member names. + public string[] Members { get; } +} diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullAttribute.cs index a93d888..6ae3e03 100644 --- a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullAttribute.cs +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullAttribute.cs @@ -1,13 +1,15 @@ -// https://stackoverflow.com/questions/61573959/how-to-resolve-error-notnullwhen-attribute-is-inaccessible-due-to-its-protectio - namespace System.Diagnostics.CodeAnalysis; -/// -/// Specifies that when a method returns , the -/// parameter will not be null even if the corresponding type allows it. -/// -[AttributeUsage(AttributeTargets.Parameter, Inherited = false)] -internal sealed class NotNullAttribute : Attribute +/// Specifies that an output will not be null even if the corresponding type allows it. Specifies that an input argument was not null when the call returns. +[AttributeUsage( + AttributeTargets.Field + | AttributeTargets.Parameter + | AttributeTargets.Property + | AttributeTargets.ReturnValue, + Inherited = false +)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNETSTANDARD21ORGREATER)] +internal sealed class NotNullAttribute() : Attribute { /// /// Initializes the attribute with the specified return value condition. @@ -15,7 +17,8 @@ internal sealed class NotNullAttribute : Attribute /// The return value condition. If the method /// returns this value, the associated parameter will not be null. /// - public NotNullAttribute(bool returnValue) => ReturnValue = returnValue; + public NotNullAttribute(bool returnValue) + : this() => ReturnValue = returnValue; /// /// Gets the return value condition. diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullIfNotNullAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullIfNotNullAttribute.cs new file mode 100644 index 0000000..f75b6af --- /dev/null +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullIfNotNullAttribute.cs @@ -0,0 +1,20 @@ +namespace System.Diagnostics.CodeAnalysis; + +/// Specifies that the output will be non-null if the named parameter is non-null. +[AttributeUsage( + AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, + AllowMultiple = true, + Inherited = false +)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNETSTANDARD21ORGREATER)] +internal sealed class NotNullIfNotNullAttribute : Attribute +{ + /// Initializes the attribute with the associated parameter name. + /// + /// The associated parameter name. The output will be non-null if the argument to the parameter specified is non-null. + /// + public NotNullIfNotNullAttribute(string parameterName) => ParameterName = parameterName; + + /// Gets the associated parameter name. + public string ParameterName { get; } +} diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullWhenAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullWhenAttribute.cs new file mode 100644 index 0000000..f0f0f98 --- /dev/null +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullWhenAttribute.cs @@ -0,0 +1,16 @@ +namespace System.Diagnostics.CodeAnalysis; + +/// Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. +[AttributeUsage(AttributeTargets.Parameter, Inherited = false)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNETSTANDARD21ORGREATER)] +internal sealed class NotNullWhenAttribute : Attribute +{ + /// Initializes the attribute with the specified return value condition. + /// + /// The return value condition. If the method returns this value, the associated parameter will not be null. + /// + public NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue; + + /// Gets the return value condition. + public bool ReturnValue { get; } +} diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullWhenAttributes.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullWhenAttributes.cs deleted file mode 100644 index 4428f91..0000000 --- a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/NotNullWhenAttributes.cs +++ /dev/null @@ -1,24 +0,0 @@ -// https://stackoverflow.com/questions/61573959/how-to-resolve-error-notnullwhen-attribute-is-inaccessible-due-to-its-protectio - -namespace System.Diagnostics.CodeAnalysis; - -/// -/// Specifies that when a method returns , the -/// parameter will not be null even if the corresponding type allows it. -/// -[AttributeUsage(AttributeTargets.Parameter, Inherited = false)] -internal sealed class NotNullWhenAttribute : Attribute -{ - /// - /// Initializes the attribute with the specified return value condition. - /// - /// The return value condition. If the method - /// returns this value, the associated parameter will not be null. - /// - public NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue; - - /// - /// Gets the return value condition. - /// - public bool ReturnValue { get; } -} diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/SetsRequiredMembersAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/SetsRequiredMembersAttribute.cs index 850160a..48195e1 100644 --- a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/SetsRequiredMembersAttribute.cs +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/SetsRequiredMembersAttribute.cs @@ -1,6 +1,6 @@ namespace System.Diagnostics.CodeAnalysis; -[System.AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)] +[global::System.AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)] internal sealed class SetsRequiredMembersAttribute(params string[] members) : Attribute { public string[] Members { get; } = members; diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/StringSyntaxAttribute.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/StringSyntaxAttribute.cs index b6ced2c..e5f8a37 100644 --- a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/StringSyntaxAttribute.cs +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/StringSyntaxAttribute.cs @@ -9,6 +9,7 @@ namespace System.Diagnostics.CodeAnalysis; AllowMultiple = false, Inherited = false )] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNET70ORGREATER)] internal sealed class StringSyntaxAttribute : Attribute { /// Initializes the with the identifier of the syntax used. diff --git a/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/System.Diagnostics.CodeAnalysis.cs b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/System.Diagnostics.CodeAnalysis.cs new file mode 100644 index 0000000..17c4d1c --- /dev/null +++ b/System.Private.CoreLib.Polyfills/System.Diagnostics.CodeAnalysis/System.Diagnostics.CodeAnalysis.cs @@ -0,0 +1,43 @@ +namespace System.Diagnostics.CodeAnalysis; + +/// Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition. +[AttributeUsage( + AttributeTargets.Method | AttributeTargets.Property, + Inherited = false, + AllowMultiple = true +)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNETSTANDARD21ORGREATER)] +internal sealed class MemberNotNullWhenAttribute : Attribute +{ + /// Initializes the attribute with the specified return value condition and a field or property member. + /// + /// The return value condition. If the method returns this value, the associated parameter will not be null. + /// + /// + /// The field or property member that is promised to be not-null. + /// + public MemberNotNullWhenAttribute(bool returnValue, string member) + { + ReturnValue = returnValue; + Members = new[] { member }; + } + + /// Initializes the attribute with the specified return value condition and list of field and property members. + /// + /// The return value condition. If the method returns this value, the associated parameter will not be null. + /// + /// + /// The list of field and property members that are promised to be not-null. + /// + public MemberNotNullWhenAttribute(bool returnValue, params string[] members) + { + ReturnValue = returnValue; + Members = members; + } + + /// Gets the return value condition. + public bool ReturnValue { get; } + + /// Gets field or property member names. + public string[] Members { get; } +} diff --git a/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.Constants.cs b/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.Constants.cs index 3c61908..90e73f4 100644 --- a/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.Constants.cs +++ b/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.Constants.cs @@ -2,16 +2,10 @@ namespace System.Private.CoreLib.Polyfills; public class Constants { - public const string NET8_0_OR_GREATER = nameof(NET8_0_OR_GREATER); - public const string NET7_0_OR_GREATER = nameof(NET7_0_OR_GREATER); - public const string NET6_0_OR_GREATER = nameof(NET6_0_OR_GREATER); - public const string NETSTANDARD = nameof(NETSTANDARD); - public const string NETSTANDARD2_1_OR_GREATER = nameof(NETSTANDARD2_1_OR_GREATER); - public const string NETSTANDARD2_0_OR_GREATER = nameof(NETSTANDARD2_0_OR_GREATER); - public const string NOT_NET8_0_OR_GREATER = nameof(NOT_NET8_0_OR_GREATER); - public const string NOT_NET7_0_OR_GREATER = nameof(NOT_NET7_0_OR_GREATER); - public const string NOT_NET6_0_OR_GREATER = nameof(NOT_NET6_0_OR_GREATER); - public const string NOT_NETSTANDARD = nameof(NOT_NETSTANDARD); - public const string NOT_NETSTANDARD2_1_OR_GREATER = nameof(NOT_NETSTANDARD2_1_OR_GREATER); - public const string NOT_NETSTANDARD2_0_OR_GREATER = nameof(NOT_NETSTANDARD2_0_OR_GREATER); + public const string NOTNET80ORGREATER = nameof(NOTNET80ORGREATER); + public const string NOTNET70ORGREATER = nameof(NOTNET70ORGREATER); + public const string NOTNET60ORGREATER = nameof(NOTNET60ORGREATER); + public const string NOTNETSTANDARD = nameof(NOTNETSTANDARD); + public const string NOTNETSTANDARD21ORGREATER = nameof(NOTNETSTANDARD21ORGREATER); + public const string NOTNETSTANDARD20ORGREATER = nameof(NOTNETSTANDARD20ORGREATER); } diff --git a/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.nuproj b/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.nuproj index 6b86960..94b860f 100644 --- a/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.nuproj +++ b/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.nuproj @@ -8,7 +8,7 @@ - + diff --git a/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.props b/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.props index 965ddfc..126ca69 100644 --- a/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.props +++ b/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.props @@ -1,15 +1,14 @@ - - - - + + $(DefineConstants);NOTNET80ORGREATER + $(DefineConstants);NOTNET70ORGREATER + $(DefineConstants);NOTNET60ORGREATER + $(DefineConstants);NOT_NETSTANDARD + $(DefineConstants);NOTNETSTANDARD20ORGREATER + $(DefineConstants);NOTNETSTANDARD21ORGREATER + + + diff --git a/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.sln b/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.sln index 459f70d..9fabc05 100644 --- a/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.sln +++ b/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.sln @@ -1,6 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B283EBC2-E01F-412D-9339-FD56EF114549}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B283EBC2-E01F-412D-9339-FD56EF114549}" ProjectSection(SolutionItems) = preProject ..\..\..\Directory.Build.props = ..\..\..\Directory.Build.props ..\..\..\Directory.Build.targets = ..\..\..\Directory.Build.targets @@ -8,8 +7,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ..\..\..\Packages\Versions.Local.props = ..\..\..\Packages\Versions.Local.props EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Private.CoreLib.Polyfills", "System.Private.CoreLib.Polyfills.csproj", "{D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Local|Any CPU = Local|Any CPU @@ -20,18 +17,6 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Local|Any CPU.ActiveCfg = Local|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Local|Any CPU.Build.0 = Local|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Testing|Any CPU.ActiveCfg = Testing|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Testing|Any CPU.Build.0 = Testing|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Staging|Any CPU.ActiveCfg = Staging|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Staging|Any CPU.Build.0 = Staging|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Production|Any CPU.ActiveCfg = Local|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Production|Any CPU.Build.0 = Local|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D15EFD5F-3FAA-4EE9-A1E1-65EE9B429DB1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.targets b/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.targets index 78b6ad4..953d007 100644 --- a/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.targets +++ b/System.Private.CoreLib.Polyfills/System.Private.CoreLib.Polyfills.targets @@ -7,10 +7,30 @@ $(DefineConstants);NOT_NETSTANDARD2_0_OR_GREATER $(DefineConstants);NOT_NETSTANDARD2_1_OR_GREATER --> - - - + + + + + + + + + + + + + + + + diff --git a/System.Private.CoreLib.Polyfills/System.Runtime.CompilerServices/CompilerFeatureRequiredAttribute.cs b/System.Private.CoreLib.Polyfills/System.Runtime.CompilerServices/CompilerFeatureRequiredAttribute.cs index 030bd6b..bf1a945 100644 --- a/System.Private.CoreLib.Polyfills/System.Runtime.CompilerServices/CompilerFeatureRequiredAttribute.cs +++ b/System.Private.CoreLib.Polyfills/System.Runtime.CompilerServices/CompilerFeatureRequiredAttribute.cs @@ -4,6 +4,7 @@ namespace System.Runtime.CompilerServices; /// Indicates that compiler support for a particular feature is required for the location where this attribute is applied. /// [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] +[Conditional(global::System.Private.CoreLib.Polyfills.Constants.NOTNET70ORGREATER)] internal sealed class CompilerFeatureRequiredAttribute(string? featureName, bool isOptional) : Attribute {