From 08cdf3b9180afc0060022784d42bc45bdf098892 Mon Sep 17 00:00:00 2001 From: Levi Broderick Date: Fri, 5 Jun 2020 18:59:29 -0700 Subject: [PATCH 1/3] Obsolete PrincipalPermissionAttribute ctor as error --- eng/CodeAnalysis.ruleset | 3 ++- .../ref/System.Security.Permissions.cs | 3 +++ .../ref/System.Security.Permissions.csproj | 3 +++ .../src/System.Security.Permissions.csproj | 3 +++ .../Security/Permissions/PrincipalPermissionAttribute.cs | 3 +++ .../System.Security.Permissions/tests/PermissionTests.cs | 7 ------- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/eng/CodeAnalysis.ruleset b/eng/CodeAnalysis.ruleset index 66a6af943a1ef7..0a84dcdbdffd9b 100644 --- a/eng/CodeAnalysis.ruleset +++ b/eng/CodeAnalysis.ruleset @@ -126,7 +126,8 @@ - + + diff --git a/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.cs b/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.cs index d561bdfab37289..b704880acd7706 100644 --- a/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.cs +++ b/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.cs @@ -1128,6 +1128,9 @@ public void FromXml(System.Security.SecurityElement elem) { } [System.AttributeUsageAttribute(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)] public sealed partial class PrincipalPermissionAttribute : System.Security.Permissions.CodeAccessSecurityAttribute { +#if CAS_OBSOLETIONS + [System.ObsoleteAttribute("PrincipalPermissionAttribute is not honored by the runtime and must not be used.", true, DiagnosticId = "BCL0002", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")] +#endif public PrincipalPermissionAttribute(System.Security.Permissions.SecurityAction action) : base (default(System.Security.Permissions.SecurityAction)) { } public bool Authenticated { get { throw null; } set { } } public string Name { get { throw null; } set { } } diff --git a/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.csproj b/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.csproj index 7d70b43e941c5a..4ce8d257cba967 100644 --- a/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.csproj +++ b/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.csproj @@ -8,6 +8,9 @@ true + + $(DefineConstants);CAS_OBSOLETIONS + diff --git a/src/libraries/System.Security.Permissions/src/System.Security.Permissions.csproj b/src/libraries/System.Security.Permissions/src/System.Security.Permissions.csproj index 174f60d9b0688f..179d85488f5a4c 100644 --- a/src/libraries/System.Security.Permissions/src/System.Security.Permissions.csproj +++ b/src/libraries/System.Security.Permissions/src/System.Security.Permissions.csproj @@ -5,6 +5,9 @@ true true + + $(DefineConstants);CAS_OBSOLETIONS + diff --git a/src/libraries/System.Security.Permissions/src/System/Security/Permissions/PrincipalPermissionAttribute.cs b/src/libraries/System.Security.Permissions/src/System/Security/Permissions/PrincipalPermissionAttribute.cs index 28ef1a2705a1a1..bd5fa7c4888940 100644 --- a/src/libraries/System.Security.Permissions/src/System/Security/Permissions/PrincipalPermissionAttribute.cs +++ b/src/libraries/System.Security.Permissions/src/System/Security/Permissions/PrincipalPermissionAttribute.cs @@ -7,6 +7,9 @@ namespace System.Security.Permissions [AttributeUsage((AttributeTargets)(68), AllowMultiple = true, Inherited = false)] public sealed partial class PrincipalPermissionAttribute : CodeAccessSecurityAttribute { +#if CAS_OBSOLETIONS + [Obsolete("PrincipalPermissionAttribute is not honored by the runtime and must not be used.", error: true, DiagnosticId = "BCL0002", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")] +#endif public PrincipalPermissionAttribute(SecurityAction action) : base(default(SecurityAction)) { } public bool Authenticated { get; set; } public string Name { get; set; } diff --git a/src/libraries/System.Security.Permissions/tests/PermissionTests.cs b/src/libraries/System.Security.Permissions/tests/PermissionTests.cs index 8494d5c2328d32..5ab5d595cf5063 100644 --- a/src/libraries/System.Security.Permissions/tests/PermissionTests.cs +++ b/src/libraries/System.Security.Permissions/tests/PermissionTests.cs @@ -210,13 +210,6 @@ public static void PrincipalPermissionCallMethods() pp.ToXml(); } - [Fact] - public static void PrincipalPermissionAttributeCallMethods() - { - PrincipalPermissionAttribute ppa = new PrincipalPermissionAttribute(new Permissions.SecurityAction()); - IPermission ip = ppa.CreatePermission(); - } - [Fact] public static void PublisherIdentityPermissionCallMethods() { From 290ae3c9b40e6a980b0c7787c4319b8441aec46c Mon Sep 17 00:00:00 2001 From: Levi Broderick Date: Wed, 10 Jun 2020 16:48:31 -0700 Subject: [PATCH 2/3] Update diagnostic id; maintain centralized list --- docs/project/list-of-obsoletions.md | 17 +++++++++++++++++ .../ref/System.Security.Permissions.cs | 2 +- .../Permissions/PrincipalPermissionAttribute.cs | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 docs/project/list-of-obsoletions.md diff --git a/docs/project/list-of-obsoletions.md b/docs/project/list-of-obsoletions.md new file mode 100644 index 00000000000000..5083069cb799de --- /dev/null +++ b/docs/project/list-of-obsoletions.md @@ -0,0 +1,17 @@ +List of Obsoletions +================== + +Per https://github.com/dotnet/designs/blob/master/accepted/2020/better-obsoletion/better-obsoletion.md, we now have a strategy in place for marking existing APIs as `[Obsolete]`. This takes advantage of the new diagnostic id and URL template mechanisms introduced to `ObsoleteAttribute` in .NET 5. + +When obsoleting an API, use the diagnostic ID `MSLIB####`, where _\#\#\#\#_ is the next four-digit identifier in the sequence, and add it to the list below. This helps us maintain a centralized location of all APIs that were obsoleted using this mechanism. + +The URL template we use for obsoletions is `https://aka.ms/dotnet-warnings/{0}`. + +Currently the identifiers `MSLIB0001` through `MSLIB0999` are carved out for obsoletions. If we wish to introduce analyzer warnings not related to obsoletion in the future, we should begin at a different range, such as `MSLIB2000`. + +## Current obsoletions (`MSLIB0001` - `MSLIB0999`) + +| Diagnostic ID | Description | +| :--------------- | :---------- | +| __`MSLIB0001`__ | (Reserved for `Encoding.UTF7`.) | +| __`MSLIB0002`__ | `PrincipalPermissionAttribute` is not honored by the runtime and must not be used. | diff --git a/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.cs b/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.cs index b704880acd7706..7cfd44259d70ea 100644 --- a/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.cs +++ b/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.cs @@ -1129,7 +1129,7 @@ public void FromXml(System.Security.SecurityElement elem) { } public sealed partial class PrincipalPermissionAttribute : System.Security.Permissions.CodeAccessSecurityAttribute { #if CAS_OBSOLETIONS - [System.ObsoleteAttribute("PrincipalPermissionAttribute is not honored by the runtime and must not be used.", true, DiagnosticId = "BCL0002", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")] + [System.ObsoleteAttribute("PrincipalPermissionAttribute is not honored by the runtime and must not be used.", true, DiagnosticId = "MSLIB0002", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")] #endif public PrincipalPermissionAttribute(System.Security.Permissions.SecurityAction action) : base (default(System.Security.Permissions.SecurityAction)) { } public bool Authenticated { get { throw null; } set { } } diff --git a/src/libraries/System.Security.Permissions/src/System/Security/Permissions/PrincipalPermissionAttribute.cs b/src/libraries/System.Security.Permissions/src/System/Security/Permissions/PrincipalPermissionAttribute.cs index bd5fa7c4888940..cbf5ac54ade29d 100644 --- a/src/libraries/System.Security.Permissions/src/System/Security/Permissions/PrincipalPermissionAttribute.cs +++ b/src/libraries/System.Security.Permissions/src/System/Security/Permissions/PrincipalPermissionAttribute.cs @@ -8,7 +8,7 @@ namespace System.Security.Permissions public sealed partial class PrincipalPermissionAttribute : CodeAccessSecurityAttribute { #if CAS_OBSOLETIONS - [Obsolete("PrincipalPermissionAttribute is not honored by the runtime and must not be used.", error: true, DiagnosticId = "BCL0002", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")] + [Obsolete("PrincipalPermissionAttribute is not honored by the runtime and must not be used.", error: true, DiagnosticId = "MSLIB0002", UrlFormat = "https://aka.ms/dotnet-warnings/{0}")] #endif public PrincipalPermissionAttribute(SecurityAction action) : base(default(SecurityAction)) { } public bool Authenticated { get; set; } From bcd66622969122e00182ed5ba6dea7448b7f7620 Mon Sep 17 00:00:00 2001 From: Levi Broderick Date: Wed, 17 Jun 2020 15:01:30 -0700 Subject: [PATCH 3/3] Code review: remove ExcludeCurrentNetCoreAppFromPackage --- .../ref/System.Security.Permissions.csproj | 1 - .../src/System.Security.Permissions.csproj | 1 - 2 files changed, 2 deletions(-) diff --git a/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.csproj b/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.csproj index 4ce8d257cba967..ec7d4c444af70f 100644 --- a/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.csproj +++ b/src/libraries/System.Security.Permissions/ref/System.Security.Permissions.csproj @@ -1,7 +1,6 @@ $(NetCoreAppCurrent);netstandard2.0;net461;netcoreapp3.0;$(NetFrameworkCurrent) - true true diff --git a/src/libraries/System.Security.Permissions/src/System.Security.Permissions.csproj b/src/libraries/System.Security.Permissions/src/System.Security.Permissions.csproj index 179d85488f5a4c..ab56a608e193cf 100644 --- a/src/libraries/System.Security.Permissions/src/System.Security.Permissions.csproj +++ b/src/libraries/System.Security.Permissions/src/System.Security.Permissions.csproj @@ -2,7 +2,6 @@ true $(NetCoreAppCurrent);netcoreapp3.0;netstandard2.0;net461;$(NetFrameworkCurrent) - true true