Skip to content
Closed
8 changes: 6 additions & 2 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
<!-- This is false for local development, but set to true in the CI system -->
<TreatWarningsAsErrors Condition=" '$(TreatWarningsAsErrors)' == '' ">false</TreatWarningsAsErrors>

<!-- TODO: depends on https://github.com/dotnet/extensions/pull/4086#issuecomment-1597726254 -->
<NoWarn>$(NoWarn);NETSDK1206</NoWarn>

<!-- TODO: to be reenabled and all warnings fixed (https://github.com/dotnet/r9/issues/177) -->
<NoWarn>$(NoWarn);IL2026;IL2087;IL2067;IL2075;IL2091;IL2072;IL2090;CA1825;IL2070;IL2098;IL2057</NoWarn>

Expand All @@ -25,7 +28,6 @@
<!-- R9A029 is for customers, not for this repo -->
<NoWarn>$(NoWarn);R9A029</NoWarn>


<!-- NU5104: A stable release of a package should not have a prerelease dependency -->
<NoWarn>$(NoWarn);NU5104</NoWarn>

Expand Down Expand Up @@ -66,7 +68,9 @@
</Target>

<ItemGroup Condition="'$(Stage)' == 'dev' AND '$(OutputType)' != 'Exe' AND '$(Api)' != 'false'">
<AssemblyAttribute Include="System.Diagnostics.CodeAnalysis.ExperimentalAttribute" />
<AssemblyAttribute Include="System.Diagnostics.CodeAnalysis.ExperimentalAttribute">
<_Parameter1></_Parameter1>
</AssemblyAttribute>
</ItemGroup>

<Target Name="AddInternalsVisibleToDynamicProxyGenAssembly2" BeforeTargets="BeforeCompile">
Expand Down
9 changes: 9 additions & 0 deletions docs/list-of-diagnostics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# List of Diagnostics Produced by .NET Extensions Libraries APIs

## Analyzer Warnings

### NETEXT (`NETEXT0001`)

| Diagnostic ID | Description |
| :---------------- | :---------- |
| __`NETEXT0001`__ | Experimental API |
164 changes: 82 additions & 82 deletions eng/Version.Details.xml

Large diffs are not rendered by default.

82 changes: 41 additions & 41 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -25,48 +25,48 @@
-->
<PropertyGroup Label="Automated">
<!-- Packages from dotnet/runtime -->
<MicrosoftBclTimeProviderVersion>8.0.0-preview.6.23314.15</MicrosoftBclTimeProviderVersion>
<MicrosoftExtensionsCachingAbstractionsVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsCachingAbstractionsVersion>
<MicrosoftExtensionsCachingMemoryVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsCachingMemoryVersion>
<MicrosoftExtensionsConfigurationAbstractionsVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsConfigurationAbstractionsVersion>
<MicrosoftExtensionsConfigurationBinderVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsConfigurationBinderVersion>
<MicrosoftExtensionsConfigurationCommandLineVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsConfigurationCommandLineVersion>
<MicrosoftExtensionsConfigurationJsonVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsConfigurationJsonVersion>
<MicrosoftExtensionsConfigurationVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsConfigurationVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsDependencyInjectionAbstractionsVersion>
<MicrosoftExtensionsDependencyInjectionVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsDependencyInjectionVersion>
<MicrosoftExtensionsHostingAbstractionsVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsHostingAbstractionsVersion>
<MicrosoftExtensionsHostingVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsHostingVersion>
<MicrosoftExtensionsHttpVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsHttpVersion>
<MicrosoftExtensionsLoggingAbstractionsVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsLoggingAbstractionsVersion>
<MicrosoftExtensionsLoggingConfigurationVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsLoggingConfigurationVersion>
<MicrosoftExtensionsLoggingConsoleVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsLoggingConsoleVersion>
<MicrosoftExtensionsLoggingVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsLoggingVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsOptionsConfigurationExtensionsVersion>
<MicrosoftExtensionsOptionsDataAnnotationsVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsOptionsDataAnnotationsVersion>
<MicrosoftExtensionsOptionsVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsOptionsVersion>
<MicrosoftExtensionsPrimitivesVersion>8.0.0-preview.6.23314.15</MicrosoftExtensionsPrimitivesVersion>
<SystemCollectionsImmutableVersion>8.0.0-preview.6.23314.15</SystemCollectionsImmutableVersion>
<SystemConfigurationConfigurationManagerVersion>8.0.0-preview.6.23314.15</SystemConfigurationConfigurationManagerVersion>
<SystemDiagnosticsDiagnosticSourceVersion>8.0.0-preview.6.23314.15</SystemDiagnosticsDiagnosticSourceVersion>
<SystemDiagnosticsPerformanceCounterVersion>8.0.0-preview.6.23314.15</SystemDiagnosticsPerformanceCounterVersion>
<SystemIOHashingVersion>8.0.0-preview.6.23314.15</SystemIOHashingVersion>
<SystemNetHttpJsonVersion>8.0.0-preview.6.23314.15</SystemNetHttpJsonVersion>
<SystemSecurityCryptographyPkcsVersion>8.0.0-preview.6.23314.15</SystemSecurityCryptographyPkcsVersion>
<SystemSecurityCryptographyXmlVersion>8.0.0-preview.6.23314.15</SystemSecurityCryptographyXmlVersion>
<SystemTextEncodingsWebVersion>8.0.0-preview.6.23314.15</SystemTextEncodingsWebVersion>
<SystemTextJsonVersion>8.0.0-preview.6.23314.15</SystemTextJsonVersion>
<SystemRuntimeCachingVersion>8.0.0-preview.6.23314.15</SystemRuntimeCachingVersion>
<MicrosoftBclTimeProviderVersion>8.0.0-preview.6.23318.9</MicrosoftBclTimeProviderVersion>
<MicrosoftExtensionsCachingAbstractionsVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsCachingAbstractionsVersion>
<MicrosoftExtensionsCachingMemoryVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsCachingMemoryVersion>
<MicrosoftExtensionsConfigurationAbstractionsVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsConfigurationAbstractionsVersion>
<MicrosoftExtensionsConfigurationBinderVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsConfigurationBinderVersion>
<MicrosoftExtensionsConfigurationCommandLineVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsConfigurationCommandLineVersion>
<MicrosoftExtensionsConfigurationJsonVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsConfigurationJsonVersion>
<MicrosoftExtensionsConfigurationVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsConfigurationVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsDependencyInjectionAbstractionsVersion>
<MicrosoftExtensionsDependencyInjectionVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsDependencyInjectionVersion>
<MicrosoftExtensionsHostingAbstractionsVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsHostingAbstractionsVersion>
<MicrosoftExtensionsHostingVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsHostingVersion>
<MicrosoftExtensionsHttpVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsHttpVersion>
<MicrosoftExtensionsLoggingAbstractionsVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsLoggingAbstractionsVersion>
<MicrosoftExtensionsLoggingConfigurationVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsLoggingConfigurationVersion>
<MicrosoftExtensionsLoggingConsoleVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsLoggingConsoleVersion>
<MicrosoftExtensionsLoggingVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsLoggingVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsOptionsConfigurationExtensionsVersion>
<MicrosoftExtensionsOptionsDataAnnotationsVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsOptionsDataAnnotationsVersion>
<MicrosoftExtensionsOptionsVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsOptionsVersion>
<MicrosoftExtensionsPrimitivesVersion>8.0.0-preview.6.23318.9</MicrosoftExtensionsPrimitivesVersion>
<SystemCollectionsImmutableVersion>8.0.0-preview.6.23318.9</SystemCollectionsImmutableVersion>
<SystemConfigurationConfigurationManagerVersion>8.0.0-preview.6.23318.9</SystemConfigurationConfigurationManagerVersion>
<SystemDiagnosticsDiagnosticSourceVersion>8.0.0-preview.6.23318.9</SystemDiagnosticsDiagnosticSourceVersion>
<SystemDiagnosticsPerformanceCounterVersion>8.0.0-preview.6.23318.9</SystemDiagnosticsPerformanceCounterVersion>
<SystemIOHashingVersion>8.0.0-preview.6.23318.9</SystemIOHashingVersion>
<SystemNetHttpJsonVersion>8.0.0-preview.6.23318.9</SystemNetHttpJsonVersion>
<SystemSecurityCryptographyPkcsVersion>8.0.0-preview.6.23318.9</SystemSecurityCryptographyPkcsVersion>
<SystemSecurityCryptographyXmlVersion>8.0.0-preview.6.23318.9</SystemSecurityCryptographyXmlVersion>
<SystemTextEncodingsWebVersion>8.0.0-preview.6.23318.9</SystemTextEncodingsWebVersion>
<SystemTextJsonVersion>8.0.0-preview.6.23318.9</SystemTextJsonVersion>
<SystemRuntimeCachingVersion>8.0.0-preview.6.23318.9</SystemRuntimeCachingVersion>
<!-- Dependencies from https://github.com/aspnet/AspNetCore -->
<MicrosoftAspNetCoreAppRuntimewinx64Version>8.0.0-preview.6.23315.13</MicrosoftAspNetCoreAppRuntimewinx64Version>
<MicrosoftAspNetCoreMvcTestingVersion>8.0.0-preview.6.23315.13</MicrosoftAspNetCoreMvcTestingVersion>
<MicrosoftAspNetCoreTestHostVersion>8.0.0-preview.6.23315.13</MicrosoftAspNetCoreTestHostVersion>
<MicrosoftExtensionsCachingStackExchangeRedisVersion>8.0.0-preview.6.23315.13</MicrosoftExtensionsCachingStackExchangeRedisVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsVersion>8.0.0-preview.6.23315.13</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksVersion>8.0.0-preview.6.23315.13</MicrosoftExtensionsDiagnosticsHealthChecksVersion>
<MicrosoftExtensionsFeaturesVersion>8.0.0-preview.6.23315.13</MicrosoftExtensionsFeaturesVersion>
<MicrosoftExtensionsHttpPollyVersion>8.0.0-preview.6.23315.13</MicrosoftExtensionsHttpPollyVersion>
<MicrosoftExtensionsObjectPoolVersion>8.0.0-preview.6.23315.13</MicrosoftExtensionsObjectPoolVersion>
<MicrosoftAspNetCoreAppRuntimewinx64Version>8.0.0-preview.6.23319.18</MicrosoftAspNetCoreAppRuntimewinx64Version>
<MicrosoftAspNetCoreMvcTestingVersion>8.0.0-preview.6.23319.18</MicrosoftAspNetCoreMvcTestingVersion>
<MicrosoftAspNetCoreTestHostVersion>8.0.0-preview.6.23319.18</MicrosoftAspNetCoreTestHostVersion>
<MicrosoftExtensionsCachingStackExchangeRedisVersion>8.0.0-preview.6.23319.18</MicrosoftExtensionsCachingStackExchangeRedisVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsVersion>8.0.0-preview.6.23319.18</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksVersion>8.0.0-preview.6.23319.18</MicrosoftExtensionsDiagnosticsHealthChecksVersion>
<MicrosoftExtensionsFeaturesVersion>8.0.0-preview.6.23319.18</MicrosoftExtensionsFeaturesVersion>
<MicrosoftExtensionsHttpPollyVersion>8.0.0-preview.6.23319.18</MicrosoftExtensionsHttpPollyVersion>
<MicrosoftExtensionsObjectPoolVersion>8.0.0-preview.6.23319.18</MicrosoftExtensionsObjectPoolVersion>
</PropertyGroup>
<!--

Expand Down
4 changes: 2 additions & 2 deletions global.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"sdk": {
"version": "8.0.100-preview.6.23309.5"
"version": "8.0.100-preview.6.23316.32"
},
"tools": {
"dotnet": "8.0.100-preview.6.23309.5",
"dotnet": "8.0.100-preview.6.23316.32",
"runtimes": {
"dotnet/x64": [
"3.1.32",
Expand Down
39 changes: 21 additions & 18 deletions src/LegacySupport/ExperimentalAttribute/ExperimentalAttribute.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#if !NET8_0_OR_GREATER

namespace System.Diagnostics.CodeAnalysis;

/// <summary>
Expand All @@ -24,30 +26,31 @@ internal sealed class ExperimentalAttribute : Attribute
/// <summary>
/// Initializes a new instance of the <see cref="ExperimentalAttribute"/> class.
/// </summary>
public ExperimentalAttribute()
/// <param name="diagnosticId">Human readable explanation for marking experimental API.</param>
public ExperimentalAttribute(string diagnosticId)
{
// Intentionally left empty.
DiagnosticId = diagnosticId;
}

/// <summary>
/// Initializes a new instance of the <see cref="ExperimentalAttribute"/> class.
/// Gets the ID that the compiler will use when reporting a use of the API the attribute applies to.
/// </summary>
/// <param name="message">Human readable explanation for marking experimental API.</param>
public ExperimentalAttribute(string message)
{
#pragma warning disable R9A014 // Use the 'Microsoft.Extensions.Diagnostics.Throws' class instead of explicitly throwing exception for improved performance
#pragma warning disable R9A039 // Remove superfluous null check when compiling in a nullable context
#pragma warning disable R9A060 // Consider removing unnecessary null coalescing (??) since the left-hand value is statically known not to be null
#pragma warning disable SA1101 // Prefix local calls with this
Message = message ?? throw new ArgumentNullException(nameof(message));
#pragma warning restore SA1101 // Prefix local calls with this
#pragma warning restore R9A060 // Consider removing unnecessary null coalescing (??) since the left-hand value is statically known not to be null
#pragma warning restore R9A039 // Remove superfluous null check when compiling in a nullable context
#pragma warning restore R9A014 // Use the 'Microsoft.Extensions.Diagnostics.Throws' class instead of explicitly throwing exception for improved performance
}
/// <value>The unique diagnostic ID.</value>
/// <remarks>
/// The diagnostic ID is shown in build output for warnings and errors.
/// <para>This property represents the unique ID that can be used to suppress the warnings or errors, if needed.</para>
/// </remarks>
public string DiagnosticId { get; }

/// <summary>
/// Gets a human readable explanation for marking API as experimental.
/// Gets or sets the URL for corresponding documentation.
/// The API accepts a format string instead of an actual URL, creating a generic URL that includes the diagnostic ID.
/// </summary>
public string? Message { get; }
/// <value>The format string that represents a URL to corresponding documentation.</value>
/// <remarks>An example format string is <c>https://contoso.com/obsoletion-warnings/{0}</c>.</remarks>
#pragma warning disable S3996 // URI properties should not be strings
public string? UrlFormat { get; set; }
#pragma warning restore S3996 // URI properties should not be strings
}

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public class LoggingOptions
/// <value>
/// The default value is <see cref="HttpRouteParameterRedactionMode.Strict"/>.
/// </value>
[Experimental]
[Experimental(diagnosticId: "NETEXT0001", UrlFormat = "https://aka.ms/dotnet-extensions-warnings/{0}")]
public HttpRouteParameterRedactionMode RequestPathParameterRedactionMode { get; set; } = DefaultPathParameterRedactionMode;

/// <summary>
Expand Down Expand Up @@ -208,7 +208,7 @@ public class LoggingOptions
/// };
/// </code>
/// </example>
[Experimental]
[Experimental(diagnosticId: "NETEXT0001", UrlFormat = "https://aka.ms/dotnet-extensions-warnings/{0}")]
[Required]
[SuppressMessage("Usage", "CA2227:Collection properties should be read only",
Justification = "Options pattern.")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class RequestHeadersLogEnricherOptions
/// Default value is an empty dictionary.
/// </remarks>
[Required]
[Experimental]
[Experimental(diagnosticId: "NETEXT0001", UrlFormat = "https://aka.ms/dotnet-extensions-warnings/{0}")]
#pragma warning disable CA2227 // Collection properties should be read only
public IDictionary<string, DataClassification> HeadersDataClasses { get; set; } = new Dictionary<string, DataClassification>();
#pragma warning restore CA2227 // Collection properties should be read only
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public static TracerProviderBuilder AddHttpTraceEnricher(this TracerProviderBuil
/// <param name="services">The <see cref="IServiceCollection"/> to add this enricher.</param>
/// <returns><see cref="IServiceCollection"/> for chaining.</returns>
/// <exception cref="ArgumentNullException">The argument <paramref name="services"/> is <see langword="null"/>.</exception>
[Experimental]
[Experimental(diagnosticId: "NETEXT0001", UrlFormat = "https://aka.ms/dotnet-extensions-warnings/{0}")]
public static IServiceCollection AddHttpTraceEnricher<T>(this IServiceCollection services)
where T : class, IHttpTraceEnricher
{
Expand All @@ -132,7 +132,7 @@ public static IServiceCollection AddHttpTraceEnricher<T>(this IServiceCollection
/// <param name="enricher">Enricher to be added.</param>
/// <returns><see cref="TracerProviderBuilder"/> for chaining.</returns>
/// <exception cref="ArgumentNullException">The argument <paramref name="services"/> or <paramref name="enricher"/> is <see langword="null" />.</exception>
[Experimental]
[Experimental(diagnosticId: "NETEXT0001", UrlFormat = "https://aka.ms/dotnet-extensions-warnings/{0}")]
public static IServiceCollection AddHttpTraceEnricher(this IServiceCollection services, IHttpTraceEnricher enricher)
{
_ = Throw.IfNull(services);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public class HttpTracingOptions
/// <remarks>
/// This property is applicable when the <see cref="IncludePath"/> option is enabled.
/// </remarks>
[Experimental]
[Experimental(diagnosticId: "NETEXT0001", UrlFormat = "https://aka.ms/dotnet-extensions-warnings/{0}")]
public HttpRouteParameterRedactionMode RequestPathParameterRedactionMode { get; set; } = DefaultPathParameterRedactionMode;

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace Microsoft.Extensions.AsyncState;
/// </summary>
/// <typeparam name="T">The type of the asynchronous state.</typeparam>
/// <remarks>This type is intended for internal use. Use <see cref="IAsyncContext{T}"/> instead.</remarks>
[Experimental]
[Experimental(diagnosticId: "NETEXT0001", UrlFormat = "https://aka.ms/dotnet-extensions-warnings/{0}")]
[EditorBrowsable(EditorBrowsableState.Never)]
#pragma warning disable S4023 // Interfaces should not be empty
public interface IAsyncLocalContext<T> : IAsyncContext<T>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public static IServiceCollection AddTelemetryHealthCheckPublisher(this IServiceC
/// <param name="section">Configuration for <see cref="TelemetryHealthCheckPublisherOptions"/>.</param>
/// <returns>The value of <paramref name="services"/>.</returns>
/// <exception cref="ArgumentNullException"><paramref name="services" /> or <paramref name="section"/> are <see langword="null" />.</exception>
[Experimental]
[Experimental(diagnosticId: "NETEXT0001", UrlFormat = "https://aka.ms/dotnet-extensions-warnings/{0}")]
public static IServiceCollection AddTelemetryHealthCheckPublisher(this IServiceCollection services, IConfigurationSection section)
=> Throw.IfNull(services)
.Configure<TelemetryHealthCheckPublisherOptions>(Throw.IfNull(section))
Expand All @@ -44,7 +44,7 @@ public static IServiceCollection AddTelemetryHealthCheckPublisher(this IServiceC
/// <param name="configure">Configuration for <see cref="TelemetryHealthCheckPublisherOptions"/>.</param>
/// <returns>The value of <paramref name="services"/>.</returns>
/// <exception cref="ArgumentNullException"><paramref name="services" /> or <paramref name="configure"/> are <see langword="null" />.</exception>
[Experimental]
[Experimental(diagnosticId: "NETEXT0001", UrlFormat = "https://aka.ms/dotnet-extensions-warnings/{0}")]
public static IServiceCollection AddTelemetryHealthCheckPublisher(this IServiceCollection services, Action<TelemetryHealthCheckPublisherOptions> configure)
=> Throw.IfNull(services)
.Configure(Throw.IfNull(configure))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks;
/// <summary>
/// Options for the telemetry health check publisher.
/// </summary>
[Experimental]
[Experimental(diagnosticId: "NETEXT0001", UrlFormat = "https://aka.ms/dotnet-extensions-warnings/{0}")]
public class TelemetryHealthCheckPublisherOptions
{
/// <summary>
Expand Down
Loading