Removed .NET framework versioning where appropriate - #55340
Conversation
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
This PR modernizes .NET documentation by removing many “Starting with .NET Framework X” qualifiers, refreshing some intros, and updating several ms.date values.
Changes:
- Rewords various docs to be more version-agnostic (removing “introduced in/starting with .NET Framework …” phrasing).
- Updates multiple articles’ front matter dates and adds/adjusts some callouts (for example, an IMPORTANT note around legacy async I/O APIs).
- Tightens/shortens some introductory paragraphs across threading, async, interop, GC, and related topics.
Reviewed changes
Copilot reviewed 34 out of 34 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| docs/visual-basic/programming-guide/language-features/data-types/tuples.md | Removes .NET Framework-introduction context from VB tuple description. |
| docs/standard/threading/threads-and-threading.md | Removes the “Starting with .NET Framework 4” qualifier for TPL/PLINQ recommendation. |
| docs/standard/threading/managed-threading-best-practices.md | Removes version qualifier in NOTE about TPL/PLINQ. |
| docs/standard/threading/managed-threading-basics.md | Updates ms.date and removes framework-version qualifier in NOTE. |
| docs/standard/threading/countdownevent.md | Removes version qualifier around unified cancellation model. |
| docs/standard/threading/cancellation-in-managed-threads.md | Removes .NET Framework 4 qualifier from cancellation model intro. |
| docs/standard/threading/canceling-threads-cooperatively.md | Removes pre-.NET Framework 4 historical context for CancellationToken usage. |
| docs/standard/serialization/binaryformatter-migration-guide/choose-a-serializer.md | Removes “introduced in .NET Framework 3.0” phrasing. |
| docs/standard/parallel-programming/index.md | Removes “introduced in .NET Framework 4” phrasing from overview. |
| docs/standard/native-interop/type-equivalence-and-embedded-interop-types.md | Shortens description by removing “introduced in .NET Framework 4”. |
| docs/standard/native-interop/importing-a-type-library-as-an-assembly.md | Removes .NET Framework 4 qualifier from embedded interop technique. |
| docs/standard/mef/index.md | Removes .NET Framework 4 introduction/availability wording. |
| docs/standard/io/asynchronous-file-i-o.md | Updates ms.date, removes version qualifier, and adds IMPORTANT callout for legacy APM APIs. |
| docs/standard/generics.md | Removes “First introduced in .NET Framework 2.0” phrasing. |
| docs/standard/garbage-collection/performance.md | Removes .NET Framework 4 qualifiers from ETW/ARM sections. |
| docs/standard/garbage-collection/large-object-heap.md | Rewords LOH compaction explanation to be less version-centric. |
| docs/standard/collections/sorted-collection-types.md | Removes “Starting with .NET Framework 4” qualifier for SortedSet. |
| docs/standard/base-types/choosing-between-anonymous-and-tuple.md | Rewrites intro paragraphs to be shorter and more direct. |
| docs/standard/asynchronous-programming-patterns/index.md | Removes version-introduction wording for TAP/EAP. |
| docs/standard/asynchronous-programming-patterns/implementing-the-task-based-asynchronous-pattern.md | Updates ms.date and removes .NET Framework 4.5 qualifier in compiler section. |
| docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-eap.md | Removes .NET Framework 4 qualifier from NOTE. |
| docs/standard/asynchronous-programming-patterns/consuming-the-task-based-asynchronous-pattern.md | Updates ms.date and removes framework-version qualifiers about await/cancellation. |
| docs/fundamentals/code-analysis/quality-rules/ca5370.md | Removes version qualifier around XmlValidatingReader obsoletion note. |
| docs/framework/reflection-and-codedom/reflection-for-windows-store-apps.md | Removes .NET Framework 4.5 qualifier from intro sentence. |
| docs/framework/performance/clr-etw-keywords-and-levels.md | Removes redundant “Starting with .NET Framework 4.5” wording in table entries. |
| docs/framework/deployment/initialization-errors-managing-the-user-experience.md | Generalizes in-place update wording to “4.5+”. |
| docs/framework/deployment/how-the-runtime-locates-assemblies.md | Removes “Starting with .NET Framework version 2.0” qualifier about bind failure caching. |
| docs/framework/data/adonet/sql/sqlclient-support-for-high-availability-disaster-recovery.md | Removes “added in .NET Framework 4.5” qualifier from opening. |
| docs/framework/data/adonet/sql/provider-statistics-for-sql-server.md | Rewords intro to remove .NET Framework 2.0 qualifier and tighten text. |
| docs/framework/data/adonet/dataset-datatable-dataview/security-guidance.md | Removes “introduced in .NET Framework 1.0” phrasing. |
| docs/framework/data/adonet/connection-strings-and-configuration-files.md | Adds ai-usage and removes version qualifiers, tightening guidance. |
| docs/framework/configure-apps/how-to-create-a-publisher-policy.md | Removes duplicated NOTE text and simplifies section introduction. |
| docs/core/extensions/httpclient-factory.md | Updates ms.date and rewrites intro/availability claims for IHttpClientFactory. |
| docs/core/extensions/create-resource-files.md | Updates ms.date and removes version qualifier regarding conditional compilation in resource text files. |
Suppressed comments (2)
docs/visual-basic/programming-guide/language-features/data-types/tuples.md:1
- By removing the note about when
System.ValueTupleshipped in-box, this section may mislead .NET Framework readers into thinkingValueTupleis always available without additional references. Consider adding a brief clarification thatSystem.ValueTupletypes are built into newer .NET Framework versions and otherwise require referencing theSystem.ValueTuplepackage, while keeping the rest of the comparison intact.
docs/standard/threading/managed-threading-basics.md:1 - Front-matter date formatting changed from a quoted string to an unquoted value (
\"03/30/2017\"→08/06/2026). If this repo expects a consistentms.dateformat (often quotedMM/DD/YYYY), consider keeping the same style here (and in the other updated files in this PR) to avoid inconsistent metadata formatting.
| This article explains how to use the `IHttpClientFactory` interface to create `HttpClient` types with .NET fundamentals such as dependency injection (DI), logging, and configuration. <xref:System.Net.Http.HttpClient> makes HTTP requests and handles HTTP responses from web resources identified by a <xref:System.Uri>. The HTTP protocol makes up the vast majority of all internet traffic. | ||
|
|
||
| With modern application development principles driving best practices, the <xref:System.Net.Http.IHttpClientFactory> serves as a factory abstraction that can create `HttpClient` instances with custom configurations. <xref:System.Net.Http.IHttpClientFactory> was introduced in .NET Core 2.1. Common HTTP-based .NET workloads can take advantage of resilient and transient-fault-handling third-party middleware with ease. | ||
| To use <xref:System.Net.Http.IHttpClientFactory> in .NET or .NET Framework, reference the [`Microsoft.Extensions.Http`](https://www.nuget.org/packages/microsoft.extensions.http) NuGet package. The factory creates `HttpClient` instances with custom configurations and lets .NET workloads use resilient, transient-fault-handling third-party middleware. |
There was a problem hiding this comment.
Why do we need "in .NET or .NET Framework"?
| ### Work with the Configuration Classes | ||
|
|
||
| Starting with .NET Framework 2.0, <xref:System.Configuration.ConfigurationManager> is used when working with configuration files on the local computer, replacing the deprecated <xref:System.Configuration.ConfigurationSettings> class. <xref:System.Web.Configuration.WebConfigurationManager> is used to work with ASP.NET configuration files. It is designed to work with configuration files on a Web server, and allows programmatic access to configuration file sections such as **system.web**. | ||
| Use <xref:System.Configuration.ConfigurationManager> to work with configuration files on the local computer. It replaces the deprecated <xref:System.Configuration.ConfigurationSettings> class. Use <xref:System.Web.Configuration.WebConfigurationManager> to work with ASP.NET configuration files. It works with configuration files on a web server and provides programmatic access to configuration file sections such as **system.web**. |
There was a problem hiding this comment.
| Use <xref:System.Configuration.ConfigurationManager> to work with configuration files on the local computer. It replaces the deprecated <xref:System.Configuration.ConfigurationSettings> class. Use <xref:System.Web.Configuration.WebConfigurationManager> to work with ASP.NET configuration files. It works with configuration files on a web server and provides programmatic access to configuration file sections such as **system.web**. | |
| Use <xref:System.Configuration.ConfigurationManager> to work with configuration files on the local computer. It replaces the deprecated <xref:System.Configuration.ConfigurationSettings> class. Use <xref:System.Web.Configuration.WebConfigurationManager> to work with legacy (.NET Framework) ASP.NET configuration files. It works with configuration files on a web server and provides programmatic access to configuration file sections such as **system.web**. |
There was a problem hiding this comment.
|
|
||
| > [!NOTE] | ||
| > The .NET Framework 4.5 replaces the .NET Framework 4 (CLR 4) on the user's computer. Therefore, .NET Framework 4 applications run seamlessly, without displaying this dialog box, on Windows 8. | ||
| > The .NET Framework 4.5+ replaces the .NET Framework 4 (CLR 4) on the user's computer. Therefore, .NET Framework 4 applications run seamlessly, without displaying this dialog box, on Windows 8. |
There was a problem hiding this comment.
| > The .NET Framework 4.5+ replaces the .NET Framework 4 (CLR 4) on the user's computer. Therefore, .NET Framework 4 applications run seamlessly, without displaying this dialog box, on Windows 8. | |
| > .NET Framework 4.5+ replaces .NET Framework 4 (CLR 4) on the user's computer. Therefore, .NET Framework 4 applications run seamlessly, without displaying this dialog box, on Windows 8 and later versions. |
| > The .NET Framework 4.5 replaces the .NET Framework 4 (CLR 4) on the user's computer. Therefore, .NET Framework 4 applications run seamlessly, without displaying this dialog box, on Windows 8. | ||
| > The .NET Framework 4.5+ replaces the .NET Framework 4 (CLR 4) on the user's computer. Therefore, .NET Framework 4 applications run seamlessly, without displaying this dialog box, on Windows 8. | ||
|
|
||
| When the .NET Framework 3.5 is installed, users can run applications that depend on .NET Framework 2.0, 3.0, or 3.5 on their Windows 8 computers. They can also run .NET Framework 1.0 and 1.1 applications, provided that those applications are not explicitly configured to run only on the .NET Framework 1.0 or 1.1. See [Migrating from the .NET Framework 1.1](../migration-guide/migrating-from-the-net-framework-1-1.md). |
| |`ExceptionKeyword`|0x00008000|Enables the collection of [exception events](exception-thrown-v1-etw-event.md).| | ||
| |`ThreadingKeyword`|0x00010000|Enables the collection of [thread pool events](thread-pool-etw-events.md).| | ||
| |`OverrideAndSuppressNGenEventsKeyword`|0x00040000|(Available in the .NET Framework 4.5 and later.) Suppresses the high-overhead `NGenKeyword` keyword and prevents the generation of events for methods that are inside NGen modules. Starting with .NET Framework 4.5, profiling tools should use `OverrideAndSuppressNGenEventsKeyword` and `NGenKeyword` together to suppress the generation of events for methods in NGen modules. This enables the profiling tool to use the more efficient NGen PDBs to get information about methods in NGen modules. The CLR in the .NET Framework 4 and earlier versions does not support the creation of NGen PDBs. In these earlier versions, the CLR will not recognize `OverrideAndSuppressNGenEventsKeyword` and will process `NGenKeyword` to generate events for methods in NGen modules.| | ||
| |`OverrideAndSuppressNGenEventsKeyword`|0x00040000|(Available in the .NET Framework 4.5 and later.) Suppresses the high-overhead `NGenKeyword` keyword and prevents the generation of events for methods that are inside NGen modules. Profiling tools should use `OverrideAndSuppressNGenEventsKeyword` and `NGenKeyword` together to suppress the generation of events for methods in NGen modules. This enables the profiling tool to use the more efficient NGen PDBs to get information about methods in NGen modules. The CLR in the .NET Framework 4 and earlier versions does not support the creation of NGen PDBs. In these earlier versions, the CLR will not recognize `OverrideAndSuppressNGenEventsKeyword` and will process `NGenKeyword` to generate events for methods in NGen modules.| |
There was a problem hiding this comment.
| |`OverrideAndSuppressNGenEventsKeyword`|0x00040000|(Available in the .NET Framework 4.5 and later.) Suppresses the high-overhead `NGenKeyword` keyword and prevents the generation of events for methods that are inside NGen modules. Profiling tools should use `OverrideAndSuppressNGenEventsKeyword` and `NGenKeyword` together to suppress the generation of events for methods in NGen modules. This enables the profiling tool to use the more efficient NGen PDBs to get information about methods in NGen modules. The CLR in the .NET Framework 4 and earlier versions does not support the creation of NGen PDBs. In these earlier versions, the CLR will not recognize `OverrideAndSuppressNGenEventsKeyword` and will process `NGenKeyword` to generate events for methods in NGen modules.| | |
| |`OverrideAndSuppressNGenEventsKeyword`|0x00040000|(Available in .NET Framework 4.5 and later.) Suppresses the high-overhead `NGenKeyword` keyword and prevents the generation of events for methods that are inside NGen modules. Profiling tools should use `OverrideAndSuppressNGenEventsKeyword` and `NGenKeyword` together to suppress the generation of events for methods in NGen modules. This enables the profiling tool to use the more efficient NGen PDBs to get information about methods in NGen modules. The CLR in .NET Framework 4 and earlier versions does not support the creation of NGen PDBs. In these earlier versions, the CLR doesn't recognize `OverrideAndSuppressNGenEventsKeyword` and processes `NGenKeyword` to generate events for methods in NGen modules.| |
| |`AppDomainResourceManagementRundownKeyword`|0x00000800|Enables the collection of events for resource monitoring at an <xref:System.AppDomain> level when used with `StartRundownKeyword` or `EndRundownKeyword`.| | ||
| |`ThreadingKeyword`|0x00010000|Enables the collection of thread pool events.| | ||
| |`OverrideAndSuppressNGenEventsRundownKeyword`|0x00040000|(Available in the .NET Framework 4.5 and later.) Suppresses the high-overhead `NGenRundownKeyword` keyword and prevents the generation of events for methods that are inside NGen modules. Starting with .NET Framework 4.5, profiling tools should use `OverrideAndSuppressNGenEventsRundownKeyword` and `NGenRundownKeyword` together to suppress the generation of events for methods in NGen modules. This enables the profiling tool to use the more efficient NGen PDBs to get information about methods in NGen modules. The CLR in the .NET Framework 4 and earlier versions does not support the creation of NGen PDBs. In these earlier versions, the CLR will not recognize `OverrideAndSuppressNGenEventsRundownKeyword` and will process `NGenRundownKeyword` to generate events for methods in NGen modules.| | ||
| |`OverrideAndSuppressNGenEventsRundownKeyword`|0x00040000|(Available in the .NET Framework 4.5 and later.) Suppresses the high-overhead `NGenRundownKeyword` keyword and prevents the generation of events for methods that are inside NGen modules. Profiling tools should use `OverrideAndSuppressNGenEventsRundownKeyword` and `NGenRundownKeyword` together to suppress the generation of events for methods in NGen modules. This enables the profiling tool to use the more efficient NGen PDBs to get information about methods in NGen modules. The CLR in the .NET Framework 4 and earlier versions does not support the creation of NGen PDBs. In these earlier versions, the CLR will not recognize `OverrideAndSuppressNGenEventsRundownKeyword` and will process `NGenRundownKeyword` to generate events for methods in NGen modules.| |
There was a problem hiding this comment.
| |`OverrideAndSuppressNGenEventsRundownKeyword`|0x00040000|(Available in the .NET Framework 4.5 and later.) Suppresses the high-overhead `NGenRundownKeyword` keyword and prevents the generation of events for methods that are inside NGen modules. Profiling tools should use `OverrideAndSuppressNGenEventsRundownKeyword` and `NGenRundownKeyword` together to suppress the generation of events for methods in NGen modules. This enables the profiling tool to use the more efficient NGen PDBs to get information about methods in NGen modules. The CLR in the .NET Framework 4 and earlier versions does not support the creation of NGen PDBs. In these earlier versions, the CLR will not recognize `OverrideAndSuppressNGenEventsRundownKeyword` and will process `NGenRundownKeyword` to generate events for methods in NGen modules.| | |
| |`OverrideAndSuppressNGenEventsRundownKeyword`|0x00040000|(Available in .NET Framework 4.5 and later.) Suppresses the high-overhead `NGenRundownKeyword` keyword and prevents the generation of events for methods that are inside NGen modules. Profiling tools should use `OverrideAndSuppressNGenEventsRundownKeyword` and `NGenRundownKeyword` together to suppress the generation of events for methods in NGen modules. This enables the profiling tool to use the more efficient NGen PDBs to get information about methods in NGen modules. The CLR in .NET Framework 4 and earlier versions does not support the creation of NGen PDBs. In these earlier versions, the CLR doesn't recognize `OverrideAndSuppressNGenEventsRundownKeyword` and processes `NGenRundownKeyword` to generate events for methods in NGen modules.| |
| # Reflection in the .NET Framework for Windows Store Apps | ||
|
|
||
| Starting with .NET Framework 4.5, the .NET Framework includes a set of reflection types and members for use in Windows 8.x Store apps. These types and members are available in the full .NET Framework as well as in the .NET for Windows Store apps. This document explains the major differences between these and their counterparts in the .NET Framework 4 and earlier versions. | ||
| .NET Framework includes a set of reflection types and members for use in Windows 8.x Store apps. These types and members are available in the full .NET Framework as well as in the .NET for Windows Store apps. This document explains the major differences between these and their counterparts in the .NET Framework 4 and earlier versions. |
There was a problem hiding this comment.
| .NET Framework includes a set of reflection types and members for use in Windows 8.x Store apps. These types and members are available in the full .NET Framework as well as in the .NET for Windows Store apps. This document explains the major differences between these and their counterparts in the .NET Framework 4 and earlier versions. | |
| .NET Framework includes a set of reflection types and members for use in Windows 8.x Store apps. These types and members are available in the full .NET Framework and in .NET for Windows Store apps. This article explains the major differences between these and their counterparts in .NET Framework 4 and earlier versions. |
|
|
||
| > [!NOTE] | ||
| > Starting with .NET Framework 4, the Task Parallel Library provides a new model for asynchronous and parallel programming. For more information, see [Task Parallel Library (TPL)](../parallel-programming/task-parallel-library-tpl.md) and [Task-based Asynchronous Pattern (TAP)](task-based-asynchronous-pattern-tap.md). | ||
| > The Task Parallel Library provides a new model for asynchronous and parallel programming. For more information, see [Task Parallel Library (TPL)](../parallel-programming/task-parallel-library-tpl.md) and [Task-based Asynchronous Pattern (TAP)](task-based-asynchronous-pattern-tap.md). |
There was a problem hiding this comment.
| > The Task Parallel Library provides a new model for asynchronous and parallel programming. For more information, see [Task Parallel Library (TPL)](../parallel-programming/task-parallel-library-tpl.md) and [Task-based Asynchronous Pattern (TAP)](task-based-asynchronous-pattern-tap.md). | |
| > The Task Parallel Library provides a newer model for asynchronous and parallel programming. For more information, see [Task Parallel Library (TPL)](../parallel-programming/task-parallel-library-tpl.md) and [Task-based Asynchronous Pattern (TAP)](task-based-asynchronous-pattern-tap.md). |
| ## Visual Basic tuples and tuples in the .NET Framework | ||
|
|
||
| A Visual Basic tuple is an instance of one of the **System.ValueTuple** generic types, which were introduced in .NET Framework 4.7. The .NET Framework also includes a set of generic **System.Tuple** classes. These classes, however, differ from Visual Basic tuples and the **System.ValueTuple** generic types in a number of ways: | ||
| A Visual Basic tuple is an instance of one of the **System.ValueTuple** generic types. The .NET Framework also includes a set of generic **System.Tuple** classes. These classes, however, differ from Visual Basic tuples and the **System.ValueTuple** generic types in a number of ways: |
There was a problem hiding this comment.
| A Visual Basic tuple is an instance of one of the **System.ValueTuple** generic types. The .NET Framework also includes a set of generic **System.Tuple** classes. These classes, however, differ from Visual Basic tuples and the **System.ValueTuple** generic types in a number of ways: | |
| A Visual Basic tuple is an instance of one of the **System.ValueTuple** generic types. .NET Framework also includes a set of generic **System.Tuple** classes. These classes, however, differ from Visual Basic tuples and the **System.ValueTuple** generic types in a number of ways: |
Summary
I gathered all references to various phrases (available in, starting with, etc) centered around a .NET Framework version in an effort to catalog them and then remove these types of references. However, many phrases were appropriate. Here's the criteria I used to exclude them from being removed:
I generally didn't edit for prose or markdown formatting.
Fixes #53865
Internal previews
Toggle expand/collapse
Note
This table shows the first 30 preview links (sorted alphabetically by file path) found in the OPS build report. For the full list, select OpenPublishing.Build Details within checks.