Skip to content

Removed .NET framework versioning where appropriate - #55340

Open
adegeo wants to merge 2 commits into
mainfrom
adegeo/53865/clean-framework
Open

Removed .NET framework versioning where appropriate#55340
adegeo wants to merge 2 commits into
mainfrom
adegeo/53865/clean-framework

Conversation

@adegeo

@adegeo adegeo commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

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:

  • A what's new for .NET Framework article.
  • Compatibility or deprecation context.
  • A .NET Framework-only technology (for example WF, ADO, WCF).
  • Migration guides.
  • Config file schema for .NET Framework.
  • Unmanaged API information.
  • Articles related to code languages.
  • If the reference was relatively close to the latest version of .NET Framework, I made a judgement call.
  • Calling out that something is/isn't available in .NET Framework when comparing to .NET.
  • Article was very specific to an old version or had many version-specific differences pointed out.

I generally didn't edit for prose or markdown formatting.

Fixes #53865


Internal previews

Toggle expand/collapse
File Preview link
docs/core/extensions/create-resource-files.md docs/core/extensions/create-resource-files
docs/core/extensions/httpclient-factory.md docs/core/extensions/httpclient-factory
docs/csharp/language-reference/builtin-types/default-values.md docs/csharp/language-reference/builtin-types/default-values
docs/csharp/language-reference/builtin-types/record.md docs/csharp/language-reference/builtin-types/record
docs/csharp/language-reference/builtin-types/ref-struct.md docs/csharp/language-reference/builtin-types/ref-struct
docs/csharp/language-reference/builtin-types/struct.md docs/csharp/language-reference/builtin-types/struct
docs/csharp/language-reference/compiler-messages/record-declaration-errors.md docs/csharp/language-reference/compiler-messages/record-declaration-errors
docs/csharp/language-reference/compiler-messages/ref-modifiers-errors.md docs/csharp/language-reference/compiler-messages/ref-modifiers-errors
docs/csharp/language-reference/operators/equality-operators.md docs/csharp/language-reference/operators/equality-operators
docs/csharp/language-reference/operators/with-expression.md docs/csharp/language-reference/operators/with-expression
docs/csharp/programming-guide/generics/constraints-on-type-parameters.md docs/csharp/programming-guide/generics/constraints-on-type-parameters
docs/framework/configure-apps/how-to-create-a-publisher-policy.md docs/framework/configure-apps/how-to-create-a-publisher-policy
docs/framework/data/adonet/connection-strings-and-configuration-files.md docs/framework/data/adonet/connection-strings-and-configuration-files
docs/framework/data/adonet/dataset-datatable-dataview/security-guidance.md docs/framework/data/adonet/dataset-datatable-dataview/security-guidance
docs/framework/data/adonet/sql/provider-statistics-for-sql-server.md docs/framework/data/adonet/sql/provider-statistics-for-sql-server
docs/framework/data/adonet/sql/sqlclient-support-for-high-availability-disaster-recovery.md docs/framework/data/adonet/sql/sqlclient-support-for-high-availability-disaster-recovery
docs/framework/deployment/how-the-runtime-locates-assemblies.md docs/framework/deployment/how-the-runtime-locates-assemblies
docs/framework/deployment/initialization-errors-managing-the-user-experience.md docs/framework/deployment/initialization-errors-managing-the-user-experience
docs/framework/performance/clr-etw-keywords-and-levels.md docs/framework/performance/clr-etw-keywords-and-levels
docs/framework/reflection-and-codedom/reflection-for-windows-store-apps.md docs/framework/reflection-and-codedom/reflection-for-windows-store-apps
docs/fundamentals/code-analysis/quality-rules/ca5370.md docs/fundamentals/code-analysis/quality-rules/ca5370
docs/standard/asynchronous-programming-patterns/consuming-the-task-based-asynchronous-pattern.md docs/standard/asynchronous-programming-patterns/consuming-the-task-based-asynchronous-pattern
docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-eap.md docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-eap
docs/standard/asynchronous-programming-patterns/implementing-the-task-based-asynchronous-pattern.md docs/standard/asynchronous-programming-patterns/implementing-the-task-based-asynchronous-pattern
docs/standard/asynchronous-programming-patterns/index.md docs/standard/asynchronous-programming-patterns/index
docs/standard/base-types/choosing-between-anonymous-and-tuple.md docs/standard/base-types/choosing-between-anonymous-and-tuple
docs/standard/collections/sorted-collection-types.md docs/standard/collections/sorted-collection-types
docs/standard/garbage-collection/large-object-heap.md docs/standard/garbage-collection/large-object-heap
docs/standard/garbage-collection/performance.md docs/standard/garbage-collection/performance
docs/standard/generics.md docs/standard/generics

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.

Copilot AI review requested due to automatic review settings August 6, 2026 20:24
@adegeo
adegeo requested review from a team, BillWagner, gewarren and jkoritzinsky as code owners August 6, 2026 20:24
@dotnetrepoman dotnetrepoman Bot added this to the August 2026 milestone Aug 6, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.ValueTuple shipped in-box, this section may mislead .NET Framework readers into thinking ValueTuple is always available without additional references. Consider adding a brief clarification that System.ValueTuple types are built into newer .NET Framework versions and otherwise require referencing the System.ValueTuple package, 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 consistent ms.date format (often quoted MM/DD/YYYY), consider keeping the same style here (and in the other updated files in this PR) to avoid inconsistent metadata formatting.

Comment thread docs/core/extensions/httpclient-factory.md Outdated
Comment thread docs/standard/threading/canceling-threads-cooperatively.md
Comment thread docs/core/extensions/create-resource-files.md
@adegeo
adegeo enabled auto-merge (squash) August 6, 2026 22:49
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.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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**.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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**.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


> [!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.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
> 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).

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Delete this paragraph?

|`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.|

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
|`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.|

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
|`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.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
.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).

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
> 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:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Scrub "introduced in .NET Framework XYZ" from the documentation

3 participants