diff --git a/.openpublishing.redirection.csharp.json b/.openpublishing.redirection.csharp.json
index 643dee94558de..43036829fd283 100644
--- a/.openpublishing.redirection.csharp.json
+++ b/.openpublishing.redirection.csharp.json
@@ -400,17 +400,21 @@
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/array-declaration-errors"
},
{
- "source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs7000.md",
- "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/using-directive-errors"
+ "source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs4013.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
},
{
- "source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8400.md",
- "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/feature-version-errors"
+ "source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs7000.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/using-directive-errors"
},
{
"source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8153.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/lambda-expression-errors#conversion-to-expression-trees"
},
+ {
+ "source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8154.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
+ },
{
"source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8155.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/lambda-expression-errors#conversion-to-expression-trees"
@@ -435,6 +439,10 @@
"source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8175.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/lambda-expression-errors#syntax-limitations-in-lambda-expressions"
},
+ {
+ "source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8176.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
+ },
{
"source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8373.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/ref-modifiers-errors"
@@ -443,6 +451,10 @@
"source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8374.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/ref-modifiers-errors"
},
+ {
+ "source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8400.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/feature-version-errors"
+ },
{
"source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8401.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/feature-version-errors"
@@ -1668,18 +1680,50 @@
"source_path_from_root": "/docs/csharp/misc/cs1621.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/lambda-expression-errors#syntax-limitations-in-lambda-expressions"
},
+ {
+ "source_path_from_root": "/docs/csharp/misc/cs1622.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
+ },
{
"source_path_from_root": "/docs/csharp/misc/cs1623.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/ref-modifiers-errors"
},
+ {
+ "source_path_from_root": "/docs/csharp/misc/cs1624.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
+ },
+ {
+ "source_path_from_root": "/docs/csharp/misc/cs1625.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
+ },
+ {
+ "source_path_from_root": "/docs/csharp/misc/cs1626.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
+ },
+ {
+ "source_path_from_root": "/docs/csharp/misc/cs1627.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
+ },
{
"source_path_from_root": "/docs/csharp/misc/cs1628.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/lambda-expression-errors#syntax-limitations-in-lambda-expressions"
},
+ {
+ "source_path_from_root": "/docs/csharp/misc/cs1629.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
+ },
+ {
+ "source_path_from_root": "/docs/csharp/misc/cs1631.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
+ },
{
"source_path_from_root": "/docs/csharp/misc/cs1632.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/lambda-expression-errors#syntax-limitations-in-lambda-expressions"
},
+ {
+ "source_path_from_root": "/docs/csharp/misc/cs1637.md",
+ "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/iterator-yield"
+ },
{
"source_path_from_root": "/docs/csharp/misc/cs1649.md",
"redirect_url": "/dotnet/csharp/language-reference/compiler-messages/ref-modifiers-errors"
diff --git a/docfx.json b/docfx.json
index b072d87ddc5ac..dbb9e33ccc7cc 100644
--- a/docfx.json
+++ b/docfx.json
@@ -851,6 +851,10 @@
"docs/ai/**/**.yml": "ce-skilling-ai-copilot"
},
"no-loc": {
+ "docs/orleans/**/**.md": [
+ "Grain",
+ "Grains"
+ ],
"**/**.md": [
"Orleans"
]
diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md
index 5999b5f4b758d..d4317ca1f72c9 100644
--- a/docs/azure/includes/dotnet-all.md
+++ b/docs/azure/includes/dotnet-all.md
@@ -355,7 +355,7 @@
| Common | NuGet [2.2.1](https://www.nuget.org/packages/Microsoft.Azure.Common/2.2.1) | | |
| Common - Dependencies | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Common.Dependencies/1.0.0) | | |
| Computer Vision | NuGet [7.0.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Vision.ComputerVision/7.0.1) | | GitHub [7.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Vision.ComputerVision_6.0.0-preview.1/sdk/cognitiveservices/Vision.ComputerVision) |
-| Cosmos DB | NuGet [3.41.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.41.0) | [docs](https://learn.microsoft.com/dotnet/api/overview/azure/cosmosdb) | GitHub [3.41.0](https://github.com/Azure/azure-cosmos-dotnet-v3/tree/3.12.0/Microsoft.Azure.Cosmos) |
+| Cosmos DB | NuGet [3.41.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.41.0)
NuGet [3.42.0-preview.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.42.0-preview.0) | [docs](https://learn.microsoft.com/dotnet/api/overview/azure/cosmosdb) | GitHub [3.41.0](https://github.com/Azure/azure-cosmos-dotnet-v3/tree/3.12.0/Microsoft.Azure.Cosmos) |
| Custom Image Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingCustomImageSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingCustomImageSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingCustomImageSearch) |
| Custom Image Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.CustomImageSearch/2.0.0) | | |
| Custom Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingCustomSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingCustomSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingCustomSearch) |
diff --git a/docs/core/distribution-packaging.md b/docs/core/distribution-packaging.md
index db9fb6ffe9307..56aa9682f0c9c 100644
--- a/docs/core/distribution-packaging.md
+++ b/docs/core/distribution-packaging.md
@@ -27,7 +27,7 @@ When installed, .NET consists of several components that are laid out as follows
│ └── (3)
├── sdk-manifests (4) (*)
│ └──
-├── library-packs (4) (*)
+├── library-packs (20) (*)
├── metadata (4) (*)
│ └── workloads
│ └──
@@ -45,8 +45,10 @@ When installed, .NET consists of several components that are laid out as follows
│ │ └── (15)
│ ├── Microsoft.NETCore.App.Runtime. (*)
│ │ └── (18)
-│ └── Microsoft.AspNetCore.App.Runtime. (*)
-│ └── (18)
+│ ├── Microsoft.AspNetCore.App.Runtime. (*)
+│ │ └── (18)
+│ └── runtime..Microsoft.DotNet.ILCompiler (*)
+│ └── (19)
├── shared (*)
│ ├── Microsoft.NETCore.App (*)
│ │ └── (5)
@@ -77,7 +79,7 @@ While there's a single host, most of the other components are in versioned direc
- (3) **sdk/\** The SDK (also known as "the tooling") is a set of managed tools that are used to write and build .NET libraries and applications. The SDK includes the .NET CLI, the managed languages compilers, MSBuild, and associated build tasks and targets, NuGet, new project templates, and so on.
-- (4) **sdk-manifests/\** The names and versions of the assets that an optional workload installation requires are maintained in workload manifests stored in this folder. The folder name is the feature band version of the SDK. So for an SDK version such as 7.0.102, this folder would still be named 7.0.100. When a workload is installed, the following folders are created as needed for the workload's assets: *library-packs*, *metadata*, and *template-packs*. A distribution can create an empty */metadata/workloads/\/userlocal* file if workloads should be installed under a user path rather than in the *dotnet* folder. For more information, see GitHub issue [dotnet/installer#12104](https://github.com/dotnet/installer/issues/12104).
+- (4) **sdk-manifests/\** The names and versions of the assets that an optional workload installation requires are maintained in workload manifests stored in this folder. The folder name is the feature band version of the SDK. So for an SDK version such as 7.0.102, this folder would still be named 7.0.100. When a workload is installed, the following folders are created as needed for the workload's assets: *metadata* and *template-packs*. A distribution can create an empty */metadata/workloads/\/userlocal* file if workloads should be installed under a user path rather than in the *dotnet* folder. For more information, see GitHub issue [dotnet/installer#12104](https://github.com/dotnet/installer/issues/12104).
The **shared** folder contains frameworks. A shared framework provides a set of libraries at a central location so they can be used by different applications.
@@ -105,8 +107,18 @@ The **shared** folder contains frameworks. A shared framework provides a set of
- (18) **Microsoft.NETCore.App.Runtime.\/\,Microsoft.AspNetCore.App.Runtime.\/\** These files enable building self-contained applications. These directories contain symbolic links to files in (2), (5) and (6).
+- (19) **runtime.\.Microsoft.DotNet.ILCompiler/\** These files enable building NativeAOT applications for the target platform.
+
+- (20) **library-packs** contains NuGet package files. The SDK is configured to use this folder as a NuGet source. The list of NuGet packages provided by a .NET build is described below.
+
The folders marked with `(*)` are used by multiple packages. Some package formats (for example, `rpm`) require special handling of such folders. The package maintainer must take care of this.
+Package files added to `library-packs` (20) can be packages that Microsoft does not distribute for the target platform. The files can also be packages that Microsoft distributes and for which `library-packs` provides a package that was built from source to meet platform package distribution guidelines. The following packages are included by the .NET build:
+
+| Package name | Published by Microsoft | Needed for |
+|----|----|----|
+| `Microsoft.DotNet.ILCompiler..nupkg`
`Microsoft.NET.ILLink.Tasks..nupkg` | ☑ | NativeAOT |
+
## Recommended packages
.NET versioning is based on the runtime component `[major].[minor]` version numbers.
@@ -121,9 +133,15 @@ The following lists the recommended packages:
- `dotnet-sdk-[major].[minor]` - Installs the latest SDK for specific runtime
- **Version:** \
- **Example:** dotnet-sdk-7.0
- - **Contains:** (3),(4),(18)
+ - **Contains:** (3),(4),(18),(20)
- **Dependencies:** `dotnet-runtime-[major].[minor]`, `aspnetcore-runtime-[major].[minor]`, `dotnet-targeting-pack-[major].[minor]`, `aspnetcore-targeting-pack-[major].[minor]`, `netstandard-targeting-pack-[netstandard_major].[netstandard_minor]`, `dotnet-apphost-pack-[major].[minor]`, `dotnet-templates-[major].[minor]`
+- `dotnet-sdk-aot-[major].[minor]` - Installs the SDK components for platform NativeAOT
+ - **Version:** \
+ - **Example:** dotnet-sdk-aot-9.0
+ - **Contains:** (19)
+ - **Dependencies:** `dotnet-sdk-[major].[minor]`, _compiler toolchain and developer packages for libraries that the .NET runtime depends on_
+
- `aspnetcore-runtime-[major].[minor]` - Installs a specific ASP.NET Core runtime
- **Version:** \
- **Example:** aspnetcore-runtime-7.0
diff --git a/docs/core/testing/unit-testing-platform-faq.md b/docs/core/testing/unit-testing-platform-faq.md
new file mode 100644
index 0000000000000..7ca8ad233a777
--- /dev/null
+++ b/docs/core/testing/unit-testing-platform-faq.md
@@ -0,0 +1,21 @@
+---
+title: Microsoft.Testing.Platform FAQ
+description: Get answers to frequently asked questions about Microsoft.Testing.Platform.
+author: Evangelink
+ms.author: amauryleve
+ms.date: 07/09/2024
+---
+
+# Microsoft.Testing.Platform FAQ
+
+This article contains answers to commonly asked questions about `Microsoft.Testing.Platform`.
+
+## error CS8892: Method 'TestingPlatformEntryPoint.Main(string[])' will not be used as an entry point because a synchronous entry point 'Program.Main(string[])' was found
+
+Manually defining an entry point (`Main`) in test project, or referencing a test project into an application that already has an entry point, will result in conflict with the entry point generated by `Microsoft.Testing.Platform`. To avoid this issue take one of these steps:
+
+- Remove your manually defined entry point, typically `Main` method in _Program.cs_, and let testing platform to generate one for you.
+
+- Disable the generation of the entry point by setting `false` MSBuild property.
+
+- Completely disable the transitive dependency to `Microsoft.Testing.Platform.MSBuild` by setting `false` MSBuild property. This is needed when you are referencing test project from a non-test project, for example: You have a console application referencing a test application.
diff --git a/docs/core/testing/unit-testing-platform-intro.md b/docs/core/testing/unit-testing-platform-intro.md
index a8ad609880785..722a484aa09ef 100644
--- a/docs/core/testing/unit-testing-platform-intro.md
+++ b/docs/core/testing/unit-testing-platform-intro.md
@@ -209,6 +209,18 @@ Specifies the minimum number of tests that are expected to run. By default, at l
The directory where the test results are going to be placed. If the specified directory doesn't exist, it's created. The default is `TestResults` in the directory that contains the test application.
+## MSBuild integration
+
+The NuGet package [Microsoft.Testing.Platform.MSBuild](https://www.nuget.org/packages/Microsoft.Testing.Platform.MSBuild) provides various integrations for `Microsoft.Testing.Platform` with MSBuild:
+
+- Support for `dotnet test`, see [dotnet test integration](./unit-testing-platform-integration-dotnet-test.md) for more information.
+- Support for `ProjectCapability` required by `Visual Studio` and `Visual Studio Code` Test Explorers.
+- Automatic generation of the entry point (`Main` method)
+- Automatic generation of the configuration file
+
+> [!NOTE]
+> This integration works in a transitive way (a project that references another project referencing this package will behave as if it references the package) and can be disabled through the `IsTestingPlatformApplication` MSBuild property.
+
## See also
- [Microsoft.Testing.Platform and VSTest comparison](unit-testing-platform-vs-vstest.md)
diff --git a/docs/core/whats-new/dotnet-8/sdk.md b/docs/core/whats-new/dotnet-8/sdk.md
index e45093bfc9e87..7a14c52df866a 100644
--- a/docs/core/whats-new/dotnet-8/sdk.md
+++ b/docs/core/whats-new/dotnet-8/sdk.md
@@ -31,7 +31,7 @@ MSBuild includes a new feature that makes it easier to incorporate data from MSB
|-----------------------------------|----------------------------------------------------------|
| `--getProperty:` | Retrieves the MSBuild property with the specified name. |
| `--getItem:` | Retrieves MSBuild items of the specified type. |
-| `--getTargetResults:` | Retrieves the outputs from running the specified target. |
+| `--getTargetResult:` | Retrieves the outputs from running the specified target. |
Values are written to the standard output. Multiple or complex values are output as JSON, as shown in the following examples.
diff --git a/docs/csharp/fundamentals/types/anonymous-types.md b/docs/csharp/fundamentals/types/anonymous-types.md
index 0f64898a3b4de..f4523239ad885 100644
--- a/docs/csharp/fundamentals/types/anonymous-types.md
+++ b/docs/csharp/fundamentals/types/anonymous-types.md
@@ -37,7 +37,7 @@ If you don't specify member names in the anonymous type, the compiler gives the
> [!TIP]
> You can use .NET style rule [IDE0037](../../../fundamentals/code-analysis/style-rules/ide0037.md) to enforce whether inferred or explicit member names are preferred.
-It is also possible to define a field by object of another type: class, struct or even another anonymous type. It is done by using the variable holding this object just like in the following example, where two anonymous types are created using already instantiated user-defined types. In both cases the `product` field in the anonymous type `shipment` and `shipmentWithBonus` will be of type `Product` containing it's default values of each field. And the `bonus` field will be of anonymous type created by the compiler.
+It is also possible to define a field by object of another type: class, struct or even another anonymous type. It is done by using the variable holding this object just like in the following example, where two anonymous types are created using already instantiated user-defined types. In both cases the `product` field in the anonymous type `shipment` and `shipmentWithBonus` will be of type `Product` containing its default values of each field. And the `bonus` field will be of anonymous type created by the compiler.
:::code language="csharp" source="snippets/anonymous-types/Program.cs" ID="snippet03":::
diff --git a/docs/csharp/language-reference/compiler-messages/cs4013.md b/docs/csharp/language-reference/compiler-messages/cs4013.md
deleted file mode 100644
index 71d12c75fe017..0000000000000
--- a/docs/csharp/language-reference/compiler-messages/cs4013.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-description: "Compiler Error CS4013"
-title: "Compiler Error CS4013"
-ms.date: 06/28/2024
-f1_keywords:
- - "CS4013"
-helpviewer_keywords:
- - "CS4013"
----
-# Compiler Error CS4013
-
-Instance of type cannot be used inside a nested function, query expression, iterator block or async method
-
-Beginning with C# 13, `ref struct` types can be used in iterator methods, if they aren't accessed across `yield return` statement.
-
-## Example
-
- The following sample generates CS4013:
-
-```csharp
-public class C
-{
- public static IEnumerable Lines(char[] text)
- {
- ReadOnlySpan chars = text;
- var index = chars.IndexOf('\n');
- while (index > 0)
- {
- yield return chars[..index].ToString();
- chars = chars[(index + 1)..];
- index = chars.IndexOf('\n');
- }
-
- yield return chars.ToString();
- }
-}
-```
-
-This enumerator method extracts lines of text from a character array. It naively tries to use `ReadOnlySpan` to improve performance. The preceding example exhibits the same error in C# 13, because the `ReadOnlySpan` instance `chars` is in scope at the `yield return` statement.
-
-## To correct this error
-
-`Lines(char[] text)` is an enumerator function. An enumerator function compiles the method's body into a state machine that manages the sequence of states the iterator function goes through while processing. That state machine is implemented as a generated class, and the state is implemented as variables within that class. That captured local state is forced from a stack context to a heap context. Since `ref struct`s like `ReadOnlySpan` can't be stored in the heap, the CS4013 error is raised. To continue to use a `ReadOnlySpan`, to correct this error, the method must be reimplemented as a noniterator function, for example:
-
-```csharp
- public static IEnumerable Lines2(char[] text)
- {
- ReadOnlySpan chars = text;
-
- var lines = new List();
- var index = chars.IndexOf('\n');
- while (index > 0)
- {
- lines.Add(chars[..index].ToString());
- chars = chars[(index+1)..];
- index = chars.IndexOf('\n');
- }
-
- lines.Add(chars.ToString());
- return lines;
- }
-```
-
-To continue to use an iterator function, to correct this error, the method must be reimplemented to avoid using `ReadOnlySpan`, for example:
-
-```csharp
- public static IEnumerable Lines2(char[] chars)
- {
- var startIndex = 0;
- var index = Array.IndexOf(chars,'\n');
- while (index > 0)
- {
- yield return new string(chars, startIndex, index);
- startIndex = index+1;
- index = Array.IndexOf(chars, '\n', startIndex);
- }
- yield return new string(chars, startIndex, chars.Length - startIndex);
- }
-```
-
-In C# 13, a `ReadOnlySpan` can be used, but can only be used in code segments without a `yield return`:
-
-```csharp
-static IEnumerable Lines2(char[] text)
-{
- ReadOnlySpan chars = text;
-
- var lines = new List();
- var index = chars.IndexOf('\n');
- while (index > 0)
- {
- lines.Add(chars[..index].ToString());
- chars = chars[(index + 1)..];
- index = chars.IndexOf('\n');
- }
-
- lines.Add(chars.ToString());
- foreach(var line in lines)
- {
- yield return line;
- }
-}
-```
diff --git a/docs/csharp/language-reference/compiler-messages/cs8154.md b/docs/csharp/language-reference/compiler-messages/cs8154.md
deleted file mode 100644
index dbd5e8ae64258..0000000000000
--- a/docs/csharp/language-reference/compiler-messages/cs8154.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-description: "Compiler Error CS8154"
-title: "Compiler Error CS8154"
-ms.date: 9/19/2022
-f1_keywords:
- - "CS8154"
-helpviewer_keywords:
- - "CS8154"
----
-# Compiler Error CS8154
-
-The body cannot be an iterator block because it returns by reference
-
-## Example
-
- The following sample generates CS8154:
-
-```csharp
-// CS8154.cs (12,17)
-
-class TestClass
-{
- int x = 0;
- ref int TestFunction()
- {
- if (true)
- {
- yield return x;
- }
-
- ref int localFunction()
- {
- if (true)
- {
- yield return x;
- }
- }
-
- yield return localFunction();
- }
-}
-```
-
-## To correct this error
-
-Iterator methods cannot return by reference, refactoring to return by value corrects this error:
-
-```csharp
-class TestClass
-{
- int x = 0;
- IEnumerable TestFunction()
- {
- if (true)
- {
- yield return x;
- }
-
- IEnumerable localFunction()
- {
- if (true)
- {
- yield return x;
- }
- }
-
- foreach (var item in localFunction())
- yield return item;
- }
-}
-```
diff --git a/docs/csharp/language-reference/compiler-messages/cs8176.md b/docs/csharp/language-reference/compiler-messages/cs8176.md
deleted file mode 100644
index 21a94a76614c2..0000000000000
--- a/docs/csharp/language-reference/compiler-messages/cs8176.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-description: "Compiler Error CS8176"
-title: "Compiler Error CS8176"
-ms.date: 06/28/2024
-f1_keywords:
- - "CS8176"
-helpviewer_keywords:
- - "CS8176"
----
-# Compiler Error CS8176
-
-Iterators cannot have by-reference locals
-
-Iterator blocks use deferred execution, where the evaluation of an expression is delayed until its realized value is required. To manage that deferred execution state, iterator blocks use a state machine, capturing variable state in closures implemented in compiler-generated classes and properties. A local variable reference (on the stack) can't be captured within the instance of a class in the heap, so the compiler issues an error.
-
-Beginning with C# 13, this restriction was removed.
-
-## Example
-
- The following sample generates CS8176:
-
-```csharp
-// CS8176.cs (7,26)
-
-using System.Collections.Generic;
-class C
-{
- IEnumerable M()
- {
- ref readonly int x = ref (new int[1])[0];
- int i = x;
- yield return i;
- }
-}
-```
-
-## To correct this error
-
-Removing use of by-reference corrects this error:
-
-```csharp
-class C
-{
- IEnumerable M()
- {
- int x = (new int[1])[0];
- int i = x;
- yield return i;
- }
-}
-```
diff --git a/docs/csharp/language-reference/compiler-messages/iterator-yield.md b/docs/csharp/language-reference/compiler-messages/iterator-yield.md
new file mode 100644
index 0000000000000..306a689a7f730
--- /dev/null
+++ b/docs/csharp/language-reference/compiler-messages/iterator-yield.md
@@ -0,0 +1,108 @@
+---
+title: Errors and warnings for iterator methods and `yield return`
+description: Use article to diagnose and correct compiler errors and warnings when you write iterator methods that use `yield return` to enumerate a sequence of elements.
+f1_keywords:
+ - "CS1622"
+ - "CS1624"
+ - "CS1625"
+ - "CS1626"
+ - "CS1627"
+ - "CS1629"
+ - "CS1631"
+ - "CS1637"
+ - "CS4013"
+ - "CS8154"
+ - "CS8176"
+ - "CS9237"
+ - "CS9238"
+ - "CS9239"
+helpviewer_keywords:
+ - "CS1622"
+ - "CS1624"
+ - "CS1625"
+ - "CS1626"
+ - "CS1627"
+ - "CS1629"
+ - "CS1631"
+ - "CS1637"
+ - "CS4013"
+ - "CS8154"
+ - "CS8176"
+ - "CS9237"
+ - "CS9238"
+ - "CS9239"
+ms.date: 07/02/2024
+---
+# Errors and warnings related to the `yield return` statement and iterator methods
+
+There are numerous *errors* related to the `yield return` statement and iterator methods:
+
+
+- [**CS1622**](#structure-of-an-iterator-method): *Cannot return a value from an iterator. Use the yield return statement to return a value, or yield break to end the iteration.*
+- [**CS1624**](#structure-of-an-iterator-method): *The body of 'accessor' cannot be an iterator block because 'type' is not an iterator interface type*
+- [**CS1625**](#restrictions-on-iterator-methods): *Cannot yield in the body of a finally clause*
+- [**CS1626**](#restrictions-on-iterator-methods): *Cannot yield a value in the body of a try block with a catch clause*
+- [**CS1627**](#structure-of-an-iterator-method): *Expression expected after yield return*
+- [**CS1629**](#restrictions-on-iterator-methods): *Unsafe code may not appear in iterators*
+- [**CS1631**](#restrictions-on-iterator-methods): *Cannot yield a value in the body of a catch clause*
+- [**CS1637**](#structure-of-an-iterator-method): *Iterators cannot have unsafe parameters or yield types*
+- [**CS4013**](#ref-safety-in-iterator-methods): *Instance of type cannot be used inside a nested function, query expression, iterator block or async method*
+- [**CS8154**](#structure-of-an-iterator-method): *The body cannot be an iterator block because it returns by reference*
+- [**CS8176**](#ref-safety-in-iterator-methods): *Iterators cannot have by-reference locals*
+- [**CS9237**](#restrictions-on-iterator-methods): *'yield return' should not be used in the body of a lock statement*
+- [**CS9238**](#restrictions-on-iterator-methods): *Cannot use 'yield return' in an 'unsafe' block*
+- [**CS9239**](#restrictions-on-iterator-methods): *The `&` operator cannot be used on parameters or local variables in iterator methods.*
+
+## Structure of an iterator method
+
+An iterator method must conform to several rules in C#. The compiler issues the following errors when your iterator method violates one or more of those rules:
+
+- **CS1622**: *Cannot return a value from an iterator. Use the yield return statement to return a value, or yield break to end the iteration.*
+- **CS1624**: *The body of 'accessor' cannot be an iterator block because 'type' is not an iterator interface type*
+- **CS1627**: *Expression expected after yield return*
+- **CS1637**: *Iterators cannot have unsafe parameters or yield types*
+- **CS8154**: *The body cannot be an iterator block because it returns by reference*
+
+Your iterator method must follow the following rules:
+
+- An iterator method (using `yield return` and optionally `yield break`) can't also use a `return` statement to return a sequence.
+- An iterator method must declare an *iterator interface type* as the return type. The *iterator interface types* are: , , , .
+- A `yield return` statement must include an expression to return as part of a sequence. `yield return;` isn't valid.
+- An iterator method can't use unsafe types as parameters, such as pointers.
+- An iterator method can't `yield return` unsafe type, such as pointers.
+- An iterator method can't `yield return` by `ref`. You must return by value.
+
+## Restrictions on iterator methods
+
+The body of an iterator method must conform to restrictions on the `yield return` statement and its context. The compiler issues the following errors when your iterator violates one of these restrictions:
+
+- **CS1625**: *Cannot yield in the body of a finally clause*
+- **CS1626**: *Cannot yield a value in the body of a try block with a catch clause*
+- **CS1631**: *Cannot yield a value in the body of a catch clause*
+- **CS1629**: *Unsafe code may not appear in iterators*
+- **CS9237**: *''yield return' should not be used in the body of a lock statement*
+- **CS9238**: *Cannot use 'yield return' in an 'unsafe' block*
+- **CS9239**: *The `&` operator cannot be used on parameters or local variables in iterator methods.*
+
+These errors indicate that your code violates safety rules because an iterator returns an element and resumes to generate the next element:
+
+- You can't `yield return` from a `catch` or `finally` clause.
+- You can't `yield return` from a `try` block with a catch clause.
+- You can't `yield return` from inside a `lock` statement block. Doing so can cause deadlocks.
+- You can't `yield return` from an `unsafe` block. The context for an iterator creates a nested `safe` block within the enclosing `unsafe` block.
+- You can't use the `&` operator to take the address of a variable in an iterator method.
+
+Before C# 13, iterators can't contain `unsafe` code (CS1629). Beginning with C# 13, this restriction is relaxed. All `yield return` statements must be in a safe context, but an iterator method can contain `unsafe` code.
+
+## ref safety in iterator methods
+
+Iterator methods have special ref safety restrictions. These rules are relaxed in C# 13:
+
+- **CS4013**: *Instance of type cannot be used inside a nested function, query expression, iterator block or async method*
+- **CS8176**: *Iterators cannot have by-reference locals*
+
+Before C# 13, iterators couldn't declare `ref` local variables. They could not declare any variables of a `ref struct` type.
+
+Beginning with C# 13, `ref struct` types can be used in iterator methods, if they aren't accessed across `yield return` statement. Beginning with C# 13, iterator methods can declare `ref` local variables.
diff --git a/docs/csharp/language-reference/operators/stackalloc.md b/docs/csharp/language-reference/operators/stackalloc.md
index a1439c242370b..90aadd7b05185 100644
--- a/docs/csharp/language-reference/operators/stackalloc.md
+++ b/docs/csharp/language-reference/operators/stackalloc.md
@@ -49,7 +49,10 @@ The amount of memory available on the stack is limited. If you allocate too much
- Avoid using `stackalloc` inside loops. Allocate the memory block outside a loop and reuse it inside the loop.
-The content of the newly allocated memory is undefined. You should initialize it before the use. For example, you can use the method that sets all the items to the default value of type `T`.
+The content of the newly allocated memory is undefined. You should initialize it, either with a `stackalloc` initializer, or a method like before it's used.
+
+> [!IMPORTANT]
+> Not initializing memory allocated by `stackalloc` is an important difference from the `new` operator. Memory allocated using the `new` operator is initialized to the 0 bit pattern.
You can use array initializer syntax to define the content of the newly allocated memory. The following example demonstrates various ways to do that:
diff --git a/docs/csharp/language-reference/toc.yml b/docs/csharp/language-reference/toc.yml
index fad57332f76bd..57a0061e10f59 100644
--- a/docs/csharp/language-reference/toc.yml
+++ b/docs/csharp/language-reference/toc.yml
@@ -464,6 +464,11 @@ items:
CS8351, CS8373, CS8374, CS8388, CS8977, CS9072, CS9077, CS9078, CS9079, CS9085, CS9086, CS9087, CS9089, CS9091, CS9092,
CS9093, CS9094, CS9095, CS9096, CS9097, CS9101, CS9102, CS9104, CS9190, CS9191, CS9192, CS9193, CS9195, CS9196, CS9197,
CS9198, CS9199, CS9200, CS9201
+ - name: Iterator methods
+ href: ./compiler-messages/iterator-yield.md
+ displayName: >
+ yield return, yield break,
+ CS1622, CS1624, CS1625, CS1626, CS1627, CS1629, CS1631, CS1637, CS4013, CS8154, CS8176, CS9237, CS9238, CS9239
- name: Params modifier
href: ./compiler-messages/params-arrays.md
displayName: >
@@ -1649,22 +1654,8 @@ items:
href: ../misc/cs1619.md
- name: CS1620
href: ../misc/cs1620.md
- - name: CS1622
- href: ../misc/cs1622.md
- - name: CS1624
- href: ../misc/cs1624.md
- - name: CS1625
- href: ../misc/cs1625.md
- - name: CS1626
- href: ../misc/cs1626.md
- - name: CS1627
- href: ../misc/cs1627.md
- - name: CS1629
- href: ../misc/cs1629.md
- name: CS1630
href: ../misc/cs1630.md
- - name: CS1631
- href: ../misc/cs1631.md
- name: CS1637
href: ../misc/cs1637.md
- name: CS1638
@@ -1913,8 +1904,6 @@ items:
href: ./compiler-messages/cs4008.md
- name: CS4009
href: ../misc/CS4009.md
- - name: CS4013
- href: ./compiler-messages/cs4013.md
- name: CS4032
href: ./compiler-messages/cs4032.md
- name: CS4033
@@ -1959,8 +1948,6 @@ items:
href: ./compiler-messages/cs8151.md
- name: CS8152
href: ./compiler-messages/cs8152.md
- - name: CS8154
- href: ./compiler-messages/cs8154.md
- name: CS8156
href: ./compiler-messages/cs8156.md
- name: CS8157
@@ -1987,8 +1974,6 @@ items:
href: ./compiler-messages/cs8173.md
- name: CS8174
href: ./compiler-messages/cs8174.md
- - name: CS8176
- href: ./compiler-messages/cs8176.md
- name: CS8177
href: ./compiler-messages/cs8177.md
- name: CS8178
diff --git a/docs/csharp/misc/cs1622.md b/docs/csharp/misc/cs1622.md
deleted file mode 100644
index b25da53b5fb37..0000000000000
--- a/docs/csharp/misc/cs1622.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-description: "Compiler Error CS1622"
-title: "Compiler Error CS1622"
-ms.date: 07/20/2015
-f1_keywords:
- - "CS1622"
-helpviewer_keywords:
- - "CS1622"
-ms.assetid: 6b53a777-4cd8-423a-84ff-22ff588044d3
----
-# Compiler Error CS1622
-
-Cannot return a value from an iterator. Use the yield return statement to return a value, or yield break to end the iteration.
-
- An iterator is a special function that returns a value via the yield statement rather than the return statement. For more information, see **iterators**.
-
- The following sample generates CS1622:
-
-```csharp
-// CS1622.cs
-// compile with: /target:library
-using System.Collections;
-
-class C : IEnumerable
-{
- public IEnumerator GetEnumerator()
- {
- return (IEnumerator) this; // CS1622
- yield return this; // OK
- }
-}
-```
diff --git a/docs/csharp/misc/cs1624.md b/docs/csharp/misc/cs1624.md
deleted file mode 100644
index 0da881f4f26ac..0000000000000
--- a/docs/csharp/misc/cs1624.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-description: "Compiler Error CS1624"
-title: "Compiler Error CS1624"
-ms.date: 07/20/2015
-f1_keywords:
- - "CS1624"
-helpviewer_keywords:
- - "CS1624"
-ms.assetid: af7d049d-27e2-4ce1-973c-5c2cb3e56a63
----
-# Compiler Error CS1624
-
-The body of 'accessor' cannot be an iterator block because 'type' is not an iterator interface type
-
- This error occurs if an iterator accessor is used but the return type is not one of the iterator interface types: , , , . To avoid this error, use one of the iterator interface types as a return type.
-
-## Example
-
- The following sample generates CS1624:
-
-```csharp
-// CS1624.cs
-using System;
-using System.Collections;
-
-class C
-{
- public int Iterator
- // Try this instead:
- // public IEnumerable Iterator
- {
- get // CS1624
- {
- yield return 1;
- }
- }
-}
-```
diff --git a/docs/csharp/misc/cs1625.md b/docs/csharp/misc/cs1625.md
deleted file mode 100644
index 6408b0c97fea5..0000000000000
--- a/docs/csharp/misc/cs1625.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-description: "Compiler Error CS1625"
-title: "Compiler Error CS1625"
-ms.date: 07/20/2015
-f1_keywords:
- - "CS1625"
-helpviewer_keywords:
- - "CS1625"
-ms.assetid: 0b25b7f9-a585-49b0-9ee6-4384e87fcea6
----
-# Compiler Error CS1625
-
-Cannot yield in the body of a finally clause
-
- A yield statement is not allowed in the body of a finally clause. To avoid this error, move the yield statement out of the finally clause.
-
- The following sample generates CS1625:
-
-```csharp
-// CS1625.cs
-using System.Collections;
-
-class C : IEnumerable
-{
- public IEnumerator GetEnumerator()
- {
- try
- {
- }
- finally
- {
- yield return this; // CS1625
- }
- }
-}
-
-public class CMain
-{
- public static void Main() { }
-}
-```
diff --git a/docs/csharp/misc/cs1626.md b/docs/csharp/misc/cs1626.md
deleted file mode 100644
index 0d2d22e10da50..0000000000000
--- a/docs/csharp/misc/cs1626.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-description: "Compiler Error CS1626"
-title: "Compiler Error CS1626"
-ms.date: 07/20/2015
-f1_keywords:
- - "CS1626"
-helpviewer_keywords:
- - "CS1626"
-ms.assetid: 3ba03383-eb24-4fd8-bf40-8b0f7d6baf0d
----
-# Compiler Error CS1626
-
-Cannot yield a value in the body of a try block with a catch clause
-
- A yield statement is not allowed in a try block if there is a catch clause associated with the try block. To avoid this error, either move the yield statement out of the try/catch/finally block, or remove the catch block.
-
- The following sample generates CS1626:
-
-```csharp
-// CS1626.cs
-using System.Collections;
-
-class C : IEnumerable
-{
- public IEnumerator GetEnumerator()
- {
- try
- {
- yield return this; // CS1626
- }
- catch
- {
-
- }
- finally
- {
-
- }
- }
-}
-
-public class CMain
-{
- public static void Main() { }
-}
-```
diff --git a/docs/csharp/misc/cs1627.md b/docs/csharp/misc/cs1627.md
deleted file mode 100644
index ddc77233f6631..0000000000000
--- a/docs/csharp/misc/cs1627.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-description: "Compiler Error CS1627"
-title: "Compiler Error CS1627"
-ms.date: 07/20/2015
-f1_keywords:
- - "CS1627"
-helpviewer_keywords:
- - "CS1627"
-ms.assetid: 58dd6e22-e9ed-4e5c-ae04-ce255f07064e
----
-# Compiler Error CS1627
-
-Expression expected after yield return
-
- This error occurs if `yield` is used without an expression. To avoid this error, insert the appropriate expression in the statement.
-
- The following sample generates CS1627:
-
-```csharp
-// CS1627.cs
-using System.Collections;
-
-class C : IEnumerable
-{
- public IEnumerator GetEnumerator()
- {
- yield return; // CS1627
- // To resolve, add the following line:
- // yield return 0;
- }
-}
-
-public class CMain
-{
- public static void Main() { }
-}
-```
diff --git a/docs/csharp/misc/cs1629.md b/docs/csharp/misc/cs1629.md
deleted file mode 100644
index 5f404a55550c8..0000000000000
--- a/docs/csharp/misc/cs1629.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-description: "Compiler Error CS1629"
-title: "Compiler Error CS1629"
-ms.date: 06/28/2024
-f1_keywords:
- - "CS1629"
-helpviewer_keywords:
- - "CS1629"
----
-# Compiler Error CS1629
-
-Unsafe code may not appear in iterators
-
-The C# language specification doesn't allow unsafe code in iterators. This restriction is relaxed in C# 13. You can use `unsafe` blocks, but the `yield return` statement can't be used in an `unsafe` block.
-
-The following sample generates CS1629:
-
-```csharp
-// CS1629.cs
-// compile with: /unsafe
-using System.Collections.Generic;
-class C
-{
- IEnumerator IteratorMethod()
- {
- int i;
- unsafe // CS1629
- {
- int *p = &i;
- yield return *p;
- }
- }
-}
-```
diff --git a/docs/csharp/misc/cs1631.md b/docs/csharp/misc/cs1631.md
deleted file mode 100644
index 91822185e6bc3..0000000000000
--- a/docs/csharp/misc/cs1631.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-description: "Compiler Error CS1631"
-title: "Compiler Error CS1631"
-ms.date: 07/20/2015
-f1_keywords:
- - "CS1631"
-helpviewer_keywords:
- - "CS1631"
-ms.assetid: bf0c5ff9-90a3-4db6-b4ee-0b93e31614e0
----
-# Compiler Error CS1631
-
-Cannot yield a value in the body of a catch clause
-
- The yield statement is not allowed from within the body of a catch clause. To avoid this error, move the yield statement outside the body of the catch clause.
-
- The following sample generates CS1631:
-
-```csharp
-// CS1631.cs
-using System;
-using System.Collections;
-
-public class C : IEnumerable
-{
- public IEnumerator GetEnumerator()
- {
- try
- {
- }
- catch(Exception e)
- {
- yield return this; // CS1631
- }
- }
-
- public static void Main()
- {
- }
-}
-```
diff --git a/docs/csharp/misc/cs1637.md b/docs/csharp/misc/cs1637.md
deleted file mode 100644
index 14f9812a1cb60..0000000000000
--- a/docs/csharp/misc/cs1637.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-description: "Compiler Error CS1637"
-title: "Compiler Error CS1637"
-ms.date: 07/20/2015
-f1_keywords:
- - "CS1637"
-helpviewer_keywords:
- - "CS1637"
-ms.assetid: 95aa82ab-bd52-4def-b5f3-d65e6dcb3855
----
-# Compiler Error CS1637
-
-Iterators cannot have unsafe parameters or yield types
-
- Check the argument list of the iterator and the type of any yield statements to verify that you are not using any unsafe types.
-
-## Example
-
- The following sample generates CS1637:
-
-```csharp
-// CS1637.cs
-// compile with: /unsafe
-using System.Collections;
-
-public unsafe class C
-{
- public IEnumerator Iterator1(int* p) // CS1637
- {
- yield return null;
- }
-}
-```
diff --git a/docs/csharp/nullable-references.md b/docs/csharp/nullable-references.md
index cd90f5fbf7de8..4cddf00616a5f 100644
--- a/docs/csharp/nullable-references.md
+++ b/docs/csharp/nullable-references.md
@@ -37,6 +37,28 @@ int length = message.Length; // dereferencing "message"
When you dereference a variable whose value is `null`, the runtime throws a .
+Similarly warnings can be produced when `[]` notation is used to access a member of an object when the object is `null`:
+
+```csharp
+using System;
+
+public class Collection
+{
+ private T[] array = new T[100];
+ public T this[int index]
+ {
+ get => array[index];
+ set => array[index] = value;
+ }
+}
+
+public static void Main()
+{
+ Collection c = default;
+ c[10] = 1; // CS8602: Possible derefence of null
+}
+```
+
You'll learn about:
- The compiler's [null-state analysis](#null-state-analysis): how the compiler determines if an expression is not-null, or maybe-null.
@@ -372,3 +394,4 @@ In the preceding example, the declaration of the array shows it holds non-nullab
- [Unconstrained type parameter annotations](~/_csharplang/proposals/csharp-9.0/unconstrained-type-parameter-annotations.md)
- [Intro to nullable references tutorial](tutorials/nullable-reference-types.md)
- [**Nullable** (C# Compiler option)](language-reference/compiler-options/language.md#nullable)
+- [CS8602: Possible dereference of null warning](language-reference/compiler-messages/nullable-warnings.md#possible-dereference-of-null)
diff --git a/docs/csharp/whats-new/csharp-13.md b/docs/csharp/whats-new/csharp-13.md
index c076bc3ebeccb..bdc7ad3933082 100644
--- a/docs/csharp/whats-new/csharp-13.md
+++ b/docs/csharp/whats-new/csharp-13.md
@@ -82,7 +82,7 @@ In C# 13, `async` methods can declare `ref` local variables, or local variables
This relaxed restriction enables the compiler to allow verifiably safe use of `ref` local variables and `ref struct` types in more places. You can safely use types like in these methods. The compiler tells you if you violate safety rules.
-In the same fashion, C# 13 allows `unsafe` contexts in iterator methods, provided no unsafe code appears in the same context as the `yield return` statements.
+In the same fashion, C# 13 allows `unsafe` contexts in iterator methods. However, all `yield return` and `yield break` statements must be in safe contexts.
## See also
diff --git a/docs/framework/release-notes/2024/07-09-july-security-and-quality-rollup.md b/docs/framework/release-notes/2024/07-09-july-security-and-quality-rollup.md
new file mode 100644
index 0000000000000..a8c1d2a266535
--- /dev/null
+++ b/docs/framework/release-notes/2024/07-09-july-security-and-quality-rollup.md
@@ -0,0 +1,105 @@
+---
+title: July 2024 security and quality rollup
+description: Learn about the improvements in the .NET Framework July 2024 security and quality rollup.
+ms.date: 07/09/2024
+---
+# July 2024 security and quality rollup
+
+_Released July 9, 2024_
+
+## Summary of what's new in this release
+
+- [Security improvements](#security-improvements)
+- [Quality and reliability improvements](#quality-and-reliability-improvements)
+
+### Security improvements
+
+#### CVE-2024-38081 – Remote code execution vulnerability
+
+This security update addresses an elevation of privilege vulnerability detailed in [CVE 2024-38081](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-38081).
+
+### Quality and reliability improvements
+
+This release contains the following quality and reliability improvements.
+
+#### .NET fundamentals
+
+Addresses an issue with x509 certificate use under PPL in Azure AD. (*Applies to: .NET Framework 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1.*)
+
+#### Winforms
+
+Addresses an issue with the size of memory leaks associated with AccessibleObjects held in memory due to ref-counting. (*Applies to: .NET Framework 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1.*)
+
+## Known issues
+
+This release contains no known issues.
+
+## Summary tables
+
+The following table outlines the updates in this release.
+
+| Product version | Cumulative update |
+| --- | --- |
+| **Microsoft server operating system, version 23H2** | |
+| .NET Framework 3.5, 4.8.1 | [5039892](https://support.microsoft.com/kb/5039892) |
+| **Windows 11, version 22H2 and Windows 11, version 23H2** | |
+| .NET Framework 3.5, 4.8.1 | [5039895](https://support.microsoft.com/kb/5039895) |
+| **Microsoft server operating system, version 22H2** | **[5041025](https://support.microsoft.com/kb/5041025)** |
+| .NET Framework 3.5, 4.8 | [5039889](https://support.microsoft.com/kb/5039889) |
+| .NET Framework 3.5, 4.8.1 | [5039907](https://support.microsoft.com/kb/5039907) |
+| **Windows 11, version 21H2** | **[5037037](https://support.microsoft.com/kb/5037037)** |
+| .NET Framework 3.5, 4.8 | [5039887](https://support.microsoft.com/kb/5039887) |
+| .NET Framework 3.5, 4.8.1 | [5039906](https://support.microsoft.com/kb/5039906) |
+| **Microsoft server operating system, version 21H2** | **[5041016](https://support.microsoft.com/kb/5041016)** |
+| .NET Framework 3.5, 4.8 | [5039889](https://support.microsoft.com/kb/5039889) |
+| .NET Framework 3.5, 4.8.1 | [5039907](https://support.microsoft.com/kb/5039907) |
+| **Windows 10, version 22H2** | **[5041019](https://support.microsoft.com/kb/5041019)** |
+| .NET Framework 3.5, 4.8 | [5039884](https://support.microsoft.com/kb/5039884) |
+| .NET Framework 3.5, 4.8.1 | [5039893](https://support.microsoft.com/kb/5039893) |
+| **Windows 10, version 21H2** | **[5041018](https://support.microsoft.com/kb/5041018)** |
+| .NET Framework 3.5, 4.8 | [5039884](https://support.microsoft.com/kb/5039884) |
+| .NET Framework 3.5, 4.8.1 | [5039893](https://support.microsoft.com/kb/5039893) |
+| **Windows 10 1809 and Windows Server 2019** | **[5041017](https://support.microsoft.com/kb/5041017)** |
+| .NET Framework 3.5, 4.7.2 | [5039879](https://support.microsoft.com/kb/5039879) |
+| .NET Framework 3.5, 4.8 | [5039886](https://support.microsoft.com/kb/5039886) |
+| **Windows 10 1607 and Windows Server 2016** | |
+| .NET Framework 3.5, 4.6.2, 4.7, 4.7.1, 4.7.2 | [5040434](https://support.microsoft.com/kb/5040434) |
+| .NET Framework 4.8 | [5039885](https://support.microsoft.com/kb/5039885) |
+| **Windows 10 1507** | |
+| .NET Framework 3.5, 4.6, 4.6.2 | [5040448](https://support.microsoft.com/kb/5040448) |
+
+The following table is for earlier Windows and Windows Server versions for Security and Quality Rollup updates.
+
+| Product version | Security and quality rollup |
+| --- | --- |
+| **Windows Server 2012 R2** | **[5041023](https://support.microsoft.com/kb/5041023)** |
+| .NET Framework 3.5 | [5039910](https://support.microsoft.com/kb/5039910) |
+| .NET Framework 4.6.2, 4.7, 4.7.1, 4.7.2 | [5039881](https://support.microsoft.com/kb/5039881) |
+| .NET Framework 4.8 | [5039890](https://support.microsoft.com/kb/5039890) |
+| **Windows Server 2012** | **[5041022](https://support.microsoft.com/kb/5041022)** |
+| .NET Framework 3.5 | [5039908](https://support.microsoft.com/kb/5039908) |
+| .NET Framework 4.6.2, 4.7, 4.7.1, 4.7.2 | [5039880](https://support.microsoft.com/kb/5039880) |
+| .NET Framework 4.8 | [5039888](https://support.microsoft.com/kb/5039888) |
+| **Windows Server 2008 R2** | **[5041021](https://support.microsoft.com/kb/5041021)** |
+| .NET Framework 3.5.1 | [5039909](https://support.microsoft.com/kb/5039909) |
+| .NET Framework 4.6.2, 4.7, 4.7.1, 4.7.2 | [5039882](https://support.microsoft.com/kb/5039909)|
+| .NET Framework 4.8 |[5039891](https://support.microsoft.com/kb/5039891) |
+| **Windows Server 2008** | **[5041024](https://support.microsoft.com/kb/5041024)** |
+| .NET Framework 2.0, 3.0 | [5039911](https://support.microsoft.com/kb/5039911) |
+| .NET Framework 3.5 SP1 | [5040673](https://support.microsoft.com/kb/5040673) |
+| .NET Framework 4.6.2 | [5039882](https://support.microsoft.com/kb/5039882) |
+
+The following table is for earlier Windows and Windows Server versions for Security Only updates, which aren't cumulative.
+
+| Product version | Security only update |
+| --- | --- |
+| **Windows Server 2008 R2** | **[5041026](https://support.microsoft.com/kb/5041027)** |
+| .NET Framework 3.5.1 | [5040119](https://support.microsoft.com/kb/5040119) |
+| .NET Framework 4.6.2, 4.7, 4.7.1, 4.7.2 | [5040122](https://support.microsoft.com/kb/5040122) |
+| .NET Framework 4.8 |[5040123](https://support.microsoft.com/kb/5040123) |
+| **Windows Server 2008** | **[5041027](https://support.microsoft.com/kb/5041027)** |
+| .NET Framework 2.0, 3.0 | [5040118](https://support.microsoft.com/kb/5040118) |
+| .NET Framework 3.5 SP1 | [5040680](https://support.microsoft.com/kb/5040680) |
+| .NET Framework 4.6.2 | [5040122](https://support.microsoft.com/kb/5040122) |
+
+The operating system rows list a KB that's used for update-offering purposes. When the operating system KB is offered, the applicability logic determines the specific .NET Framework updates that will be installed. Updates for individual .NET Framework versions are installed based on the version of .NET Framework that's already present on the device. Because of this, the operating system KB is not expected to be listed as an installed update on the device. The expected updates to be installed are the .NET Framework–specific version updates listed in the preceding table.
diff --git a/docs/framework/toc.yml b/docs/framework/toc.yml
index ed174b158ceba..990375e9227e1 100644
--- a/docs/framework/toc.yml
+++ b/docs/framework/toc.yml
@@ -679,6 +679,8 @@ items:
href: release-notes/2024/05-14-may-security-and-quality-rollup.md
- name: June 2024 cumulative update preview
href: release-notes/2024/06-25-june-preview-cumulative-update.md
+ - name: July 2024 security and quality rollup
+ href: release-notes/2024/07-09-july-security-and-quality-rollup.md
- name: What's new
href: whats-new/index.md
- name: What's new in accessibility
diff --git a/docs/navigate/devops-testing/toc.yml b/docs/navigate/devops-testing/toc.yml
index bae1e68fc18c4..81c46cd43cf37 100644
--- a/docs/navigate/devops-testing/toc.yml
+++ b/docs/navigate/devops-testing/toc.yml
@@ -161,6 +161,8 @@ items:
href: ../../core/testing/unit-testing-platform-extensions-code-coverage.md
- name: Diagnostics
href: ../../core/testing/unit-testing-platform-extensions-diagnostics.md
+ - name: Fakes
+ href: ../../core/testing/unit-testing-platform-extensions-fakes.md
- name: Hosting
href: ../../core/testing/unit-testing-platform-extensions-hosting.md
- name: Policy
diff --git a/docs/orleans/benefits.md b/docs/orleans/benefits.md
index a6f596589df72..24af7c8d2e740 100644
--- a/docs/orleans/benefits.md
+++ b/docs/orleans/benefits.md
@@ -1,7 +1,7 @@
---
title: Orleans benefits
description: Learn the many benefits of .NET Orleans.
-ms.date: 09/05/2023
+ms.date: 07/03/2024
---
# Orleans benefits
diff --git a/docs/orleans/deployment/consul-deployment.md b/docs/orleans/deployment/consul-deployment.md
index 82cf624af899e..2e150df7ef002 100644
--- a/docs/orleans/deployment/consul-deployment.md
+++ b/docs/orleans/deployment/consul-deployment.md
@@ -1,7 +1,7 @@
---
title: Use Consul as a membership provider
description: Learn how to use Consul as a membership provider in .NET Orleans.
-ms.date: 05/12/2023
+ms.date: 07/03/2024
---
# Use Consul as a membership provider
diff --git a/docs/orleans/deployment/deploy-to-azure-app-service.md b/docs/orleans/deployment/deploy-to-azure-app-service.md
index a937869e56ea6..da67b75635b0f 100644
--- a/docs/orleans/deployment/deploy-to-azure-app-service.md
+++ b/docs/orleans/deployment/deploy-to-azure-app-service.md
@@ -1,10 +1,9 @@
---
title: Deploy Orleans to Azure App Service
description: Learn how to deploy an Orleans shopping cart app to Azure App Service.
-ms.date: 04/05/2023
+ms.date: 07/03/2024
ms.topic: tutorial
ms.custom: devx-track-bicep
-no-loc:
---
# Deploy Orleans to Azure App Service
diff --git a/docs/orleans/deployment/deploy-to-azure-container-apps.md b/docs/orleans/deployment/deploy-to-azure-container-apps.md
index 9f8d64f8dea3b..9d79cbf44a073 100644
--- a/docs/orleans/deployment/deploy-to-azure-container-apps.md
+++ b/docs/orleans/deployment/deploy-to-azure-container-apps.md
@@ -1,7 +1,7 @@
---
title: Deploy Orleans to Azure Container Apps
description: Learn how to deploy an updated Orleans shopping cart app to Azure Container Apps.
-ms.date: 07/25/2022
+ms.date: 07/03/2024
ms.topic: tutorial
ms.custom: devx-track-bicep
---
diff --git a/docs/orleans/deployment/docker-deployment.md b/docs/orleans/deployment/docker-deployment.md
index 44ea87069db3e..188ba5511814f 100644
--- a/docs/orleans/deployment/docker-deployment.md
+++ b/docs/orleans/deployment/docker-deployment.md
@@ -1,7 +1,7 @@
---
title: Docker deployment
description: Learn how to deploy Orleans apps with Docker.
-ms.date: 03/09/2022
+ms.date: 07/03/2024
---
# Docker deployment
diff --git a/docs/orleans/deployment/handling-failures.md b/docs/orleans/deployment/handling-failures.md
index 4be6ac7166447..51122e5618d33 100644
--- a/docs/orleans/deployment/handling-failures.md
+++ b/docs/orleans/deployment/handling-failures.md
@@ -1,7 +1,7 @@
---
title: Failure handling
description: Learn how to handle failures in Orleans apps.
-ms.date: 03/09/2022
+ms.date: 07/03/2024
---
# Failure handling
diff --git a/docs/orleans/deployment/index.md b/docs/orleans/deployment/index.md
index 3abb8c23df9a8..cbba5f1098d6e 100644
--- a/docs/orleans/deployment/index.md
+++ b/docs/orleans/deployment/index.md
@@ -1,7 +1,7 @@
---
title: Run an Orleans application
description: Learn how to run an Orleans app in .NET.
-ms.date: 12/07/2022
+ms.date: 07/03/2024
---
# Orleans application
diff --git a/docs/orleans/deployment/kubernetes.md b/docs/orleans/deployment/kubernetes.md
index 0b0d37fd2aa5d..61f16a01477ac 100644
--- a/docs/orleans/deployment/kubernetes.md
+++ b/docs/orleans/deployment/kubernetes.md
@@ -1,7 +1,7 @@
---
title: Kubernetes hosting
description: Learn how to host an Orleans app with Kubernetes.
-ms.date: 03/09/2022
+ms.date: 07/03/2024
---
# Kubernetes hosting
diff --git a/docs/orleans/deployment/multi-cluster-support/global-single-instance.md b/docs/orleans/deployment/multi-cluster-support/global-single-instance.md
index 856b5ac8734da..bd125bc0e87b0 100644
--- a/docs/orleans/deployment/multi-cluster-support/global-single-instance.md
+++ b/docs/orleans/deployment/multi-cluster-support/global-single-instance.md
@@ -1,7 +1,7 @@
---
title: Global single-instance grains
description: Learn about global single-instance grains and coordination attributes in .NET Orleans.
-ms.date: 03/09/2022
+ms.date: 07/03/2024
---
# Grain coordination attributes
diff --git a/docs/orleans/deployment/multi-cluster-support/gossip-channels.md b/docs/orleans/deployment/multi-cluster-support/gossip-channels.md
index 28f3a040f0da9..e51ba97e57cd5 100644
--- a/docs/orleans/deployment/multi-cluster-support/gossip-channels.md
+++ b/docs/orleans/deployment/multi-cluster-support/gossip-channels.md
@@ -1,7 +1,7 @@
---
title: Multi-cluster communication
description: Learn about multi-cluster communication in .NET Orleans.
-ms.date: 03/09/2022
+ms.date: 07/03/2024
---
# Multi-cluster communication
diff --git a/docs/orleans/deployment/multi-cluster-support/multi-cluster-configuration.md b/docs/orleans/deployment/multi-cluster-support/multi-cluster-configuration.md
index 531e82d8fc16e..5b2b40201eca7 100644
--- a/docs/orleans/deployment/multi-cluster-support/multi-cluster-configuration.md
+++ b/docs/orleans/deployment/multi-cluster-support/multi-cluster-configuration.md
@@ -1,7 +1,7 @@
---
title: Multi-cluster configuration
description: Learn about multi-cluster configuration in .NET Orleans.
-ms.date: 03/09/2022
+ms.date: 07/03/2024
---
# Multi-cluster configuration
diff --git a/docs/orleans/deployment/multi-cluster-support/overview.md b/docs/orleans/deployment/multi-cluster-support/overview.md
index e879a737c9d2d..1ee903294c039 100644
--- a/docs/orleans/deployment/multi-cluster-support/overview.md
+++ b/docs/orleans/deployment/multi-cluster-support/overview.md
@@ -1,7 +1,7 @@
---
title: Multi-cluster support
description: Learn about multi-cluster support in .NET Orleans.
-ms.date: 03/09/2022
+ms.date: 07/03/2024
---
# Multi-cluster support
diff --git a/docs/orleans/deployment/multi-cluster-support/silo-configuration.md b/docs/orleans/deployment/multi-cluster-support/silo-configuration.md
index ffaaf227628d2..9a6834141f0f1 100644
--- a/docs/orleans/deployment/multi-cluster-support/silo-configuration.md
+++ b/docs/orleans/deployment/multi-cluster-support/silo-configuration.md
@@ -1,7 +1,7 @@
---
title: Silo configuration
description: Learn about silo configuration in .NET Orleans.
-ms.date: 03/09/2022
+ms.date: 07/03/2024
---
# Orleans silo configuration
diff --git a/docs/orleans/deployment/service-fabric.md b/docs/orleans/deployment/service-fabric.md
index c9a2be7e0df33..8903836a653fb 100644
--- a/docs/orleans/deployment/service-fabric.md
+++ b/docs/orleans/deployment/service-fabric.md
@@ -1,7 +1,7 @@
---
title: Host with Service Fabric
description: Learn how to host an Orleans app with Service Fabric.
-ms.date: 12/02/2022
+ms.date: 07/03/2024
---
# Host with Service Fabric
diff --git a/docs/orleans/deployment/troubleshooting-azure-cloud-services-deployments.md b/docs/orleans/deployment/troubleshooting-azure-cloud-services-deployments.md
index 37dc571f99b38..d1b22d64aef18 100644
--- a/docs/orleans/deployment/troubleshooting-azure-cloud-services-deployments.md
+++ b/docs/orleans/deployment/troubleshooting-azure-cloud-services-deployments.md
@@ -1,7 +1,7 @@
---
title: Troubleshoot Azure Cloud Service deployments
description: Learn how to troubleshoot an Orleans app with Azure Cloud Service deployment.
-ms.date: 03/09/2022
+ms.date: 07/03/2024
---
# Troubleshoot Azure Cloud Service deployments
diff --git a/docs/orleans/deployment/troubleshooting-deployments.md b/docs/orleans/deployment/troubleshooting-deployments.md
index e28f8d8c2fdd9..0810b72b057a4 100644
--- a/docs/orleans/deployment/troubleshooting-deployments.md
+++ b/docs/orleans/deployment/troubleshooting-deployments.md
@@ -1,7 +1,7 @@
---
title: Troubleshoot deployments
description: Learn how to troubleshoot an Orleans app deployment.
-ms.date: 03/09/2022
+ms.date: 07/03/2024
---
# Troubleshoot deployments
diff --git a/docs/orleans/grains/cancellation-tokens.md b/docs/orleans/grains/cancellation-tokens.md
index 8943f385455d0..257d353d0e9de 100644
--- a/docs/orleans/grains/cancellation-tokens.md
+++ b/docs/orleans/grains/cancellation-tokens.md
@@ -1,7 +1,7 @@
---
title: Grain cancellation tokens
description: Learn how to use grain cancellation tokens in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Grain cancellation tokens
diff --git a/docs/orleans/grains/code-generation.md b/docs/orleans/grains/code-generation.md
index 92a3c1522634c..841d72ac3a68f 100644
--- a/docs/orleans/grains/code-generation.md
+++ b/docs/orleans/grains/code-generation.md
@@ -1,7 +1,7 @@
---
title: Code generation
description: Learn how to use code generation in .NET Orleans.
-ms.date: 06/20/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/grains/event-sourcing/event-sourcing-configuration.md b/docs/orleans/grains/event-sourcing/event-sourcing-configuration.md
index 51353fd170e22..ef5115964450d 100644
--- a/docs/orleans/grains/event-sourcing/event-sourcing-configuration.md
+++ b/docs/orleans/grains/event-sourcing/event-sourcing-configuration.md
@@ -1,7 +1,7 @@
---
title: Event sourcing configuration
description: Learn about event sourcing configuration in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# Event sourcing configuration
diff --git a/docs/orleans/grains/event-sourcing/immediate-vs-delayed-confirmation.md b/docs/orleans/grains/event-sourcing/immediate-vs-delayed-confirmation.md
index 36827605b0cf0..be91e111b8df0 100644
--- a/docs/orleans/grains/event-sourcing/immediate-vs-delayed-confirmation.md
+++ b/docs/orleans/grains/event-sourcing/immediate-vs-delayed-confirmation.md
@@ -1,7 +1,7 @@
---
title: Immediate and delayed confirmation
description: Learn the differences between immediate and delayed confirmation in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# Immediate and delayed confirmations
diff --git a/docs/orleans/grains/event-sourcing/index.md b/docs/orleans/grains/event-sourcing/index.md
index acefca39b25a0..18fa1167aa99f 100644
--- a/docs/orleans/grains/event-sourcing/index.md
+++ b/docs/orleans/grains/event-sourcing/index.md
@@ -1,7 +1,7 @@
---
title: Event sourcing overview
description: Learn an overview of event sourcing in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# Event sourcing overview
diff --git a/docs/orleans/grains/event-sourcing/journaledgrain-basics.md b/docs/orleans/grains/event-sourcing/journaledgrain-basics.md
index 2fb8ef5b00661..757f881172e06 100644
--- a/docs/orleans/grains/event-sourcing/journaledgrain-basics.md
+++ b/docs/orleans/grains/event-sourcing/journaledgrain-basics.md
@@ -1,7 +1,7 @@
---
title: The JournaledGrain API
description: Learn the concepts of the JournaledGrain API in .NET Orleans.
-ms.date: 01/31/2022
+ms.date: 07/03/2024
---
# JournaledGrain Basics
diff --git a/docs/orleans/grains/event-sourcing/journaledgrain-diagnostics.md b/docs/orleans/grains/event-sourcing/journaledgrain-diagnostics.md
index fd31fbe4b4046..4637940af71b4 100644
--- a/docs/orleans/grains/event-sourcing/journaledgrain-diagnostics.md
+++ b/docs/orleans/grains/event-sourcing/journaledgrain-diagnostics.md
@@ -1,7 +1,7 @@
---
title: JournaledGrain diagnostics
description: Learn how to use JournaledGrain diagnostics in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# JournaledGrain diagnostics
diff --git a/docs/orleans/grains/event-sourcing/log-consistency-providers.md b/docs/orleans/grains/event-sourcing/log-consistency-providers.md
index 74971f83db636..8de50c8b592fe 100644
--- a/docs/orleans/grains/event-sourcing/log-consistency-providers.md
+++ b/docs/orleans/grains/event-sourcing/log-consistency-providers.md
@@ -1,7 +1,7 @@
---
title: Log-consistency providers
description: Learn about log-consistency providers in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# Log-consistency providers
diff --git a/docs/orleans/grains/event-sourcing/notifications.md b/docs/orleans/grains/event-sourcing/notifications.md
index bc32d6ebd516d..ca8285150faf5 100644
--- a/docs/orleans/grains/event-sourcing/notifications.md
+++ b/docs/orleans/grains/event-sourcing/notifications.md
@@ -1,7 +1,7 @@
---
title: Notifications
description: Learn the concepts of notifications in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# Notifications
diff --git a/docs/orleans/grains/event-sourcing/replicated-instances.md b/docs/orleans/grains/event-sourcing/replicated-instances.md
index 665bedc277aeb..5446c51a44709 100644
--- a/docs/orleans/grains/event-sourcing/replicated-instances.md
+++ b/docs/orleans/grains/event-sourcing/replicated-instances.md
@@ -1,7 +1,7 @@
---
title: Replicated grains
description: Learn the concepts of the replicated grains in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# Replicated grains
diff --git a/docs/orleans/grains/external-tasks-and-grains.md b/docs/orleans/grains/external-tasks-and-grains.md
index 7a3d53533a339..c5575096e7304 100644
--- a/docs/orleans/grains/external-tasks-and-grains.md
+++ b/docs/orleans/grains/external-tasks-and-grains.md
@@ -1,7 +1,7 @@
---
title: External tasks and grains
description: Learn about external tasks and grains in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# External tasks and grains
diff --git a/docs/orleans/grains/grain-extensions.md b/docs/orleans/grains/grain-extensions.md
index 49bb12deb123e..8ed2343472eb5 100644
--- a/docs/orleans/grains/grain-extensions.md
+++ b/docs/orleans/grains/grain-extensions.md
@@ -1,7 +1,7 @@
---
title: Grain extensions
description: Learn how to extend an Orleans Grain.
-ms.date: 05/08/2023
+ms.date: 07/03/2024
---
# Grain extensions
diff --git a/docs/orleans/grains/grain-identity.md b/docs/orleans/grains/grain-identity.md
index 9e148d8845f3e..1ca251c5e52db 100644
--- a/docs/orleans/grains/grain-identity.md
+++ b/docs/orleans/grains/grain-identity.md
@@ -1,7 +1,7 @@
---
title: Grain identity
description: Learn about grain identities in .NET Orleans.
-ms.date: 12/12/2023
+ms.date: 07/03/2024
---
# Grain identity
diff --git a/docs/orleans/grains/grain-lifecycle.md b/docs/orleans/grains/grain-lifecycle.md
index 9b6898d4cb2e1..071b966b0f7f6 100644
--- a/docs/orleans/grains/grain-lifecycle.md
+++ b/docs/orleans/grains/grain-lifecycle.md
@@ -1,7 +1,7 @@
---
title: Grain lifecycle overview
description: Learn about grain lifecycles in .NET Orleans.
-ms.date: 02/13/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/grains/grain-persistence/azure-cosmos-db.md b/docs/orleans/grains/grain-persistence/azure-cosmos-db.md
index 3eabd263ed35f..f1e894e7dd2ae 100644
--- a/docs/orleans/grains/grain-persistence/azure-cosmos-db.md
+++ b/docs/orleans/grains/grain-persistence/azure-cosmos-db.md
@@ -3,7 +3,7 @@ title: Azure Cosmos DB grain persistence
description: Use the Azure Cosmos DB grain to persist Azure Cosmos DB for NoSQL data in a .NET Orleans application.
ms.topic: conceptual
ms.devlang: csharp
-ms.date: 10/03/2023
+ms.date: 07/03/2024
---
# Azure Cosmos DB for NoSQL grain persistence
diff --git a/docs/orleans/grains/grain-persistence/azure-storage.md b/docs/orleans/grains/grain-persistence/azure-storage.md
index 50ed4ebc983d5..6093f4597ab45 100644
--- a/docs/orleans/grains/grain-persistence/azure-storage.md
+++ b/docs/orleans/grains/grain-persistence/azure-storage.md
@@ -1,7 +1,7 @@
---
title: Azure Storage grain persistence
description: Learn about Azure Storage grain persistence in .NET Orleans.
-ms.date: 08/25/2023
+ms.date: 07/03/2024
---
# Azure Storage grain persistence
diff --git a/docs/orleans/grains/grain-persistence/dynamodb-storage.md b/docs/orleans/grains/grain-persistence/dynamodb-storage.md
index 6e9a4cbffb374..2172178fb3460 100644
--- a/docs/orleans/grains/grain-persistence/dynamodb-storage.md
+++ b/docs/orleans/grains/grain-persistence/dynamodb-storage.md
@@ -1,7 +1,7 @@
---
title: Amazon DynamoDB grain persistence
description: Learn about Azure DynamoDB grain persistence in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# Amazon DynamoDB grain persistence
diff --git a/docs/orleans/grains/grain-persistence/index.md b/docs/orleans/grains/grain-persistence/index.md
index a84bec96625e1..4f2e0a483661e 100644
--- a/docs/orleans/grains/grain-persistence/index.md
+++ b/docs/orleans/grains/grain-persistence/index.md
@@ -1,7 +1,7 @@
---
title: Grain persistence
description: Learn about persistence in .NET Orleans.
-ms.date: 09/05/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/grains/grain-persistence/relational-storage.md b/docs/orleans/grains/grain-persistence/relational-storage.md
index 904b804f1e908..f00befb86027b 100644
--- a/docs/orleans/grains/grain-persistence/relational-storage.md
+++ b/docs/orleans/grains/grain-persistence/relational-storage.md
@@ -1,7 +1,7 @@
---
title: ADO.NET grain persistence
description: Learn about ADO.NET grain persistence in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# ADO.NET grain persistence
diff --git a/docs/orleans/grains/grain-placement.md b/docs/orleans/grains/grain-placement.md
index a0c61caa02106..6e0f96d099cc6 100644
--- a/docs/orleans/grains/grain-placement.md
+++ b/docs/orleans/grains/grain-placement.md
@@ -1,7 +1,7 @@
---
title: Grain placement
description: Learn about grain placements in .NET Orleans.
-ms.date: 02/23/2023
+ms.date: 07/03/2024
---
# Grain placement
diff --git a/docs/orleans/grains/grain-references.md b/docs/orleans/grains/grain-references.md
index 02129527d7daa..e74f66531e232 100644
--- a/docs/orleans/grains/grain-references.md
+++ b/docs/orleans/grains/grain-references.md
@@ -1,7 +1,7 @@
---
title: Grain references
description: Learn about grain references in .NET Orleans.
-ms.date: 12/10/2023
+ms.date: 07/03/2024
---
# Grain references
diff --git a/docs/orleans/grains/grain-versioning/backward-compatibility-guidelines.md b/docs/orleans/grains/grain-versioning/backward-compatibility-guidelines.md
index 9d653288f7191..1eff21226f8ac 100644
--- a/docs/orleans/grains/grain-versioning/backward-compatibility-guidelines.md
+++ b/docs/orleans/grains/grain-versioning/backward-compatibility-guidelines.md
@@ -1,7 +1,7 @@
---
title: Backward compatibility guidelines
description: Learn the backward compatibility guidelines in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# Backward compatibility guidelines
diff --git a/docs/orleans/grains/grain-versioning/compatible-grains.md b/docs/orleans/grains/grain-versioning/compatible-grains.md
index bfa4d0bae183e..a45d12bd6a63a 100644
--- a/docs/orleans/grains/grain-versioning/compatible-grains.md
+++ b/docs/orleans/grains/grain-versioning/compatible-grains.md
@@ -1,7 +1,7 @@
---
title: Compatible grains
description: Learn about compatible grains in .NET Orleans.
-ms.date: 03/15/2022
+ms.date: 07/03/2024
---
# Compatible grains
diff --git a/docs/orleans/grains/grain-versioning/deploying-new-versions-of-grains.md b/docs/orleans/grains/grain-versioning/deploying-new-versions-of-grains.md
index 7b758375c81bd..0a0a2a99b9a0d 100644
--- a/docs/orleans/grains/grain-versioning/deploying-new-versions-of-grains.md
+++ b/docs/orleans/grains/grain-versioning/deploying-new-versions-of-grains.md
@@ -1,7 +1,7 @@
---
title: Deploy new version of grains
description: Learn how to deploy new version of grains in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Deploy new version of grains
diff --git a/docs/orleans/grains/grain-versioning/grain-versioning.md b/docs/orleans/grains/grain-versioning/grain-versioning.md
index 73208b957b555..1f58d3f8d96d1 100644
--- a/docs/orleans/grains/grain-versioning/grain-versioning.md
+++ b/docs/orleans/grains/grain-versioning/grain-versioning.md
@@ -1,7 +1,7 @@
---
title: Grain interface versioning
description: Learn how to use grain interface versioning in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Grain interface versioning
diff --git a/docs/orleans/grains/grain-versioning/version-selector-strategy.md b/docs/orleans/grains/grain-versioning/version-selector-strategy.md
index e4fe17c871edc..8c8f5afef8deb 100644
--- a/docs/orleans/grains/grain-versioning/version-selector-strategy.md
+++ b/docs/orleans/grains/grain-versioning/version-selector-strategy.md
@@ -1,7 +1,7 @@
---
title: Version selector strategy
description: Learn how to use the version selector strategy in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Version selector strategy
diff --git a/docs/orleans/grains/grainservices.md b/docs/orleans/grains/grainservices.md
index 0301934e26997..56307b09c50f2 100644
--- a/docs/orleans/grains/grainservices.md
+++ b/docs/orleans/grains/grainservices.md
@@ -1,7 +1,7 @@
---
title: Create a GrainService
description: Learn how to create a GrainService in .NET Orleans.
-ms.date: 12/16/2022
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/grains/index.md b/docs/orleans/grains/index.md
index 06449599291a3..fad099be7771c 100644
--- a/docs/orleans/grains/index.md
+++ b/docs/orleans/grains/index.md
@@ -1,7 +1,7 @@
---
title: Develop a grain
description: Learn how to develop a grain in .NET Orleans.
-ms.date: 12/10/2023
+ms.date: 07/03/2024
---
# Develop a grain
diff --git a/docs/orleans/grains/interceptors.md b/docs/orleans/grains/interceptors.md
index 34ce205f0e935..303de38143cb5 100644
--- a/docs/orleans/grains/interceptors.md
+++ b/docs/orleans/grains/interceptors.md
@@ -1,7 +1,7 @@
---
title: Grain call filters
description: Learn about grain call filter in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Grain call filters
diff --git a/docs/orleans/grains/observers.md b/docs/orleans/grains/observers.md
index 53c5375d801f0..adf5953693df0 100644
--- a/docs/orleans/grains/observers.md
+++ b/docs/orleans/grains/observers.md
@@ -1,7 +1,7 @@
---
title: Observers
description: Learn about observers in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Observers
diff --git a/docs/orleans/grains/oneway.md b/docs/orleans/grains/oneway.md
index caeb1306193d4..74a65a6e5810f 100644
--- a/docs/orleans/grains/oneway.md
+++ b/docs/orleans/grains/oneway.md
@@ -1,7 +1,7 @@
---
title: One-way requests
description: Learn about one-way requests in .NET Orleans.
-ms.date: 06/26/2023
+ms.date: 07/03/2024
---
# One-way requests
diff --git a/docs/orleans/grains/request-context.md b/docs/orleans/grains/request-context.md
index 16cc04398221c..0bff136fe7591 100644
--- a/docs/orleans/grains/request-context.md
+++ b/docs/orleans/grains/request-context.md
@@ -1,7 +1,7 @@
---
title: Request context
description: Learn about request context in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Request context
@@ -15,7 +15,7 @@ void Set(string key, object value)
The preceding API is used to store a value in the request context. The value can be any serializable type.
```csharp
-Object Get(string key)
+object Get(string key)
```
The preceding API is used to retrieve a value from the current request context.
@@ -27,7 +27,7 @@ Application metadata also is maintained when you schedule a future computation u
> [!IMPORTANT]
> The application metadata does not flow back with responses; that is, code that runs as a result of a response being received, either within a `ContinueWith` continuation or after a call to or `GetValue`, will still run within the current context that was set by the original request.
-For example, to set a trace id in the client to a new `Guid`, one would simply call:
+For example, to set a trace id in the client to a new `Guid`, you call:
```csharp
RequestContext.Set("TraceId", Guid.NewGuid());
@@ -36,7 +36,80 @@ RequestContext.Set("TraceId", Guid.NewGuid());
Within grain code (or other code that runs within Orleans on a scheduler thread), the trace id of the original client request could be used, for instance, when writing a log:
```csharp
-Logger.Info("Currently processing external request {0}", RequestContext.Get("TraceId"));
+Logger.LogInformation(
+ "Currently processing external request {TraceId}",
+ RequestContext.Get("TraceId"));
```
-While any serializable object may be sent as application metadata, it's worth mentioning that large or complex objects may add noticeable overhead to message serialization time. For this reason, the use of simple types (strings, GUIDs, or numeric types) is recommended.
+While any serializable `object` may be sent as application metadata, it's worth mentioning that large or complex objects may add noticeable overhead to message serialization time. For this reason, the use of simple types (strings, GUIDs, or numeric types) is recommended.
+
+## Example grain code
+
+To help illustrate the use of a request context, consider the following example grain code:
+
+```csharp
+using GrainInterfaces;
+using Microsoft.Extensions.Logging;
+
+namespace Grains;
+
+public class HelloGrain(ILogger logger) : Grain, IHelloGrain
+{
+ ValueTask IHelloGrain.SayHello(string greeting)
+ {
+ _logger.LogInformation("""
+ SayHello message received: greeting = "{Greeting}"
+ """,
+ greeting);
+
+ var traceId = RequestContext.Get("TraceId") as string
+ ?? "No trace ID";
+
+ return ValueTask.FromResult($"""
+ TraceID: {traceId}
+ Client said: "{greeting}", so HelloGrain says: Hello!
+ """);
+ }
+}
+
+public interface IHelloGrain : IGrainWithStringKey
+{
+ ValueTask SayHello(string greeting);
+}
+```
+
+The `SayHello` method logs the incoming `greeting` parameter and then retrieves the trace id from the request context. If no trace id is found, the grain logs "No trace ID".
+
+## Example client code
+
+The client is able to set the trace id in the request context before calling the `SayHello` method on the `HelloGrain`. The following client code demonstrates how to set a trace id in the request context and call the `SayHello` method on the `HelloGrain`:
+
+```csharp
+using GrainInterfaces;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+
+using var host = Host.CreateDefaultBuilder(args)
+ .UseOrleansClient(clientBuilder =>
+ clientBuilder.UseLocalhostClustering())
+ .Build();
+
+await host.StartAsync();
+
+var client = host.Services.GetRequiredService();
+
+var grain = client.GetGrain("friend");
+
+var id = "example-id-set-by-client";
+
+RequestContext.Set("TraceId", id);
+
+var message = await friend.SayHello("Good morning!");
+
+Console.WriteLine(message);
+// Output:
+// TraceID: example-id-set-by-client
+// Client said: "Good morning!", so HelloGrain says: Hello!
+```
+
+In this example, the client sets the trace id to "example-id-set-by-client" before calling the `SayHello` method on the `HelloGrain`. The grain retrieves the trace id from the request context and logs it.
diff --git a/docs/orleans/grains/request-scheduling.md b/docs/orleans/grains/request-scheduling.md
index 921aa9c87817f..8229cb71e68e4 100644
--- a/docs/orleans/grains/request-scheduling.md
+++ b/docs/orleans/grains/request-scheduling.md
@@ -1,7 +1,7 @@
---
title: Request scheduling
description: Learn about request scheduling in .NET Orleans.
-ms.date: 07/28/2023
+ms.date: 07/03/2024
---
# Request scheduling
diff --git a/docs/orleans/grains/stateless-worker-grains.md b/docs/orleans/grains/stateless-worker-grains.md
index 609fb0480f7dc..77d3e8daa1617 100644
--- a/docs/orleans/grains/stateless-worker-grains.md
+++ b/docs/orleans/grains/stateless-worker-grains.md
@@ -1,7 +1,7 @@
---
title: Stateless worker grains
description: Learn how to use stateless worker grains in .NET Orleans.
-ms.date: 01/20/2024
+ms.date: 07/03/2024
---
# Stateless worker grains
diff --git a/docs/orleans/grains/timers-and-reminders.md b/docs/orleans/grains/timers-and-reminders.md
index 8c2568a36e7bd..fbcc11ef81e3a 100644
--- a/docs/orleans/grains/timers-and-reminders.md
+++ b/docs/orleans/grains/timers-and-reminders.md
@@ -1,7 +1,7 @@
---
title: Timers and reminders
description: Learn how to use timers and reminders in .NET Orleans.
-ms.date: 08/28/2023
+ms.date: 07/03/2024
---
# Timers and reminders
@@ -49,9 +49,7 @@ Reminders are similar to timers, with a few important differences:
## Configuration
-Reminders, being persistent, rely upon storage to function.
-You must specify which storage backing to use before the reminder subsystem functions.
-This is done by configuring one of the reminder providers via `Use{X}ReminderService` extension methods, where `X` is the name of the provider, for example, .
+Reminders, being persistent, rely upon storage to function. You must specify which storage backing to use before the reminder subsystem functions. This is done by configuring one of the reminder providers via `Use{X}ReminderService` extension methods, where `X` is the name of the provider, for example, .
Azure Table configuration:
@@ -94,6 +92,9 @@ var silo = new HostBuilder()
.Build();
```
+> [!IMPORTANT]
+> If you have a heterogenous cluster, where the silos handle different grain types (implement different interfaces), every silo must add the configuration for Reminders, even if the silo itself doesn't handle any reminders.
+
## Reminder usage
A grain that uses reminders must implement the method.
diff --git a/docs/orleans/grains/transactions.md b/docs/orleans/grains/transactions.md
index 1f8eebe947c6c..8a26775839880 100644
--- a/docs/orleans/grains/transactions.md
+++ b/docs/orleans/grains/transactions.md
@@ -1,7 +1,7 @@
---
title: Transactions in Orleans
description: Learn how to use transactions in .NET Orleans.
-ms.date: 03/04/2024
+ms.date: 07/03/2024
---
# Orleans transactions
diff --git a/docs/orleans/host/client.md b/docs/orleans/host/client.md
index 358aeac8c9f65..0e7ea2b9e57bd 100644
--- a/docs/orleans/host/client.md
+++ b/docs/orleans/host/client.md
@@ -1,7 +1,7 @@
---
title: Orleans clients
description: Learn how to write .NET Orleans clients.
-ms.date: 01/09/2024
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/host/configuration-guide/activation-collection.md b/docs/orleans/host/configuration-guide/activation-collection.md
index e67de9a5a5427..48e38420a114e 100644
--- a/docs/orleans/host/configuration-guide/activation-collection.md
+++ b/docs/orleans/host/configuration-guide/activation-collection.md
@@ -1,7 +1,7 @@
---
title: Activation collection
description: Learn about activation collection in .NET Orleans.
-ms.date: 02/07/2024
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/host/configuration-guide/adonet-configuration.md b/docs/orleans/host/configuration-guide/adonet-configuration.md
index eb4a4412124e2..4daea39c0b167 100644
--- a/docs/orleans/host/configuration-guide/adonet-configuration.md
+++ b/docs/orleans/host/configuration-guide/adonet-configuration.md
@@ -1,7 +1,7 @@
---
title: ADO.NET database configuration
description: Learn about ADO.NET database configurations in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# ADO.NET database configuration
diff --git a/docs/orleans/host/configuration-guide/client-configuration.md b/docs/orleans/host/configuration-guide/client-configuration.md
index 7abb0c5eae150..d9c4c338f3803 100644
--- a/docs/orleans/host/configuration-guide/client-configuration.md
+++ b/docs/orleans/host/configuration-guide/client-configuration.md
@@ -1,7 +1,7 @@
---
title: Client configuration
description: Learn about client configurations in .NET Orleans.
-ms.date: 01/17/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/host/configuration-guide/configuring-ado-dot-net-providers.md b/docs/orleans/host/configuration-guide/configuring-ado-dot-net-providers.md
index 93f8a61f798d5..bfd747825ab32 100644
--- a/docs/orleans/host/configuration-guide/configuring-ado-dot-net-providers.md
+++ b/docs/orleans/host/configuration-guide/configuring-ado-dot-net-providers.md
@@ -1,7 +1,7 @@
---
title: Configure ADO.NET providers
description: Learn how to configure ADO.NET providers in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Configure ADO.NET providers
diff --git a/docs/orleans/host/configuration-guide/configuring-garbage-collection.md b/docs/orleans/host/configuration-guide/configuring-garbage-collection.md
index aa3b0948a66d1..e211d16111fb4 100644
--- a/docs/orleans/host/configuration-guide/configuring-garbage-collection.md
+++ b/docs/orleans/host/configuration-guide/configuring-garbage-collection.md
@@ -1,7 +1,7 @@
---
title: Configure .NET garbage collection
description: Learn how to configure .NET garbage collection in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Configure .NET garbage collection
diff --git a/docs/orleans/host/configuration-guide/index.md b/docs/orleans/host/configuration-guide/index.md
index eef65c28fc094..268cc1e4e584e 100644
--- a/docs/orleans/host/configuration-guide/index.md
+++ b/docs/orleans/host/configuration-guide/index.md
@@ -1,7 +1,7 @@
---
title: Orleans configuration guide
description: Explore a guide on how to configure .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Orleans configuration guide
diff --git a/docs/orleans/host/configuration-guide/list-of-options-classes.md b/docs/orleans/host/configuration-guide/list-of-options-classes.md
index d6042dab70aed..5f7848df49635 100644
--- a/docs/orleans/host/configuration-guide/list-of-options-classes.md
+++ b/docs/orleans/host/configuration-guide/list-of-options-classes.md
@@ -1,7 +1,7 @@
---
title: List of options classes
description: Explore a listing of options classes in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# List of options classes
diff --git a/docs/orleans/host/configuration-guide/local-development-configuration.md b/docs/orleans/host/configuration-guide/local-development-configuration.md
index 4ded3147d11d5..fcce519d0ac42 100644
--- a/docs/orleans/host/configuration-guide/local-development-configuration.md
+++ b/docs/orleans/host/configuration-guide/local-development-configuration.md
@@ -1,7 +1,7 @@
---
title: Local development configuration
description: Learn how to configure .NET Orleans for local development.
-ms.date: 05/08/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/host/configuration-guide/serialization-configuration.md b/docs/orleans/host/configuration-guide/serialization-configuration.md
index 92487e6fa94ba..4879cce52fb3e 100644
--- a/docs/orleans/host/configuration-guide/serialization-configuration.md
+++ b/docs/orleans/host/configuration-guide/serialization-configuration.md
@@ -1,7 +1,7 @@
---
title: Serialization configuration in Orleans
description: Learn how to configure serialization in .NET Orleans.
-ms.date: 12/15/2022
+ms.date: 07/03/2024
uid: orleans-serialization-configuration
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/host/configuration-guide/serialization-customization.md b/docs/orleans/host/configuration-guide/serialization-customization.md
index 0538627413dff..4c22a4d683606 100644
--- a/docs/orleans/host/configuration-guide/serialization-customization.md
+++ b/docs/orleans/host/configuration-guide/serialization-customization.md
@@ -1,7 +1,7 @@
---
title: Serialization customization in Orleans
description: Learn how to customize serialization in .NET Orleans.
-ms.date: 12/15/2022
+ms.date: 07/03/2024
uid: orleans-serialization-customization
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/host/configuration-guide/serialization-immutability.md b/docs/orleans/host/configuration-guide/serialization-immutability.md
index 61b4de703f194..90748b45bfed8 100644
--- a/docs/orleans/host/configuration-guide/serialization-immutability.md
+++ b/docs/orleans/host/configuration-guide/serialization-immutability.md
@@ -1,7 +1,7 @@
---
title: Serialization of immutable types in Orleans
description: Learn how .NET Orleans handles type immutability in the context of serialization.
-ms.date: 4/17/2023
+ms.date: 07/03/2024
---
# Serialization of immutable types in Orleans
diff --git a/docs/orleans/host/configuration-guide/serialization.md b/docs/orleans/host/configuration-guide/serialization.md
index ad35b1a1de214..7569f56d72868 100644
--- a/docs/orleans/host/configuration-guide/serialization.md
+++ b/docs/orleans/host/configuration-guide/serialization.md
@@ -1,7 +1,7 @@
---
title: Serialization in Orleans
description: Learn about serialization and custom serializers in .NET Orleans.
-ms.date: 06/20/2023
+ms.date: 07/03/2024
uid: orleans-serialization
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/host/configuration-guide/server-configuration.md b/docs/orleans/host/configuration-guide/server-configuration.md
index dfc0349bb07fe..d0ad70a46b2ae 100644
--- a/docs/orleans/host/configuration-guide/server-configuration.md
+++ b/docs/orleans/host/configuration-guide/server-configuration.md
@@ -1,7 +1,7 @@
---
title: Server configuration
description: Learn how to configure .NET Orleans server settings.
-ms.date: 12/06/2022
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/host/configuration-guide/shutting-down-orleans.md b/docs/orleans/host/configuration-guide/shutting-down-orleans.md
index c38203c8c3349..ae03f3966bb9d 100644
--- a/docs/orleans/host/configuration-guide/shutting-down-orleans.md
+++ b/docs/orleans/host/configuration-guide/shutting-down-orleans.md
@@ -1,7 +1,7 @@
---
title: Shut down Orleans silos
description: Learn how to shut down .NET Orleans silos.
-ms.date: 11/01/2022
+ms.date: 07/03/2024
---
# Shut down Orleans silos
diff --git a/docs/orleans/host/configuration-guide/startup-tasks.md b/docs/orleans/host/configuration-guide/startup-tasks.md
index 64bac2fff72d4..6c86ffcb4b186 100644
--- a/docs/orleans/host/configuration-guide/startup-tasks.md
+++ b/docs/orleans/host/configuration-guide/startup-tasks.md
@@ -1,7 +1,7 @@
---
title: Startup tasks
description: Learn how to configure and manage startup tasks in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Startup tasks
diff --git a/docs/orleans/host/configuration-guide/typical-configurations.md b/docs/orleans/host/configuration-guide/typical-configurations.md
index 81c3db48dd90a..bb9dbefc6636b 100644
--- a/docs/orleans/host/configuration-guide/typical-configurations.md
+++ b/docs/orleans/host/configuration-guide/typical-configurations.md
@@ -1,7 +1,7 @@
---
title: Typical configurations
description: Learn about typical configurations in .NET Orleans.
-ms.date: 08/18/2023
+ms.date: 07/03/2024
---
# Typical configurations
@@ -37,7 +37,7 @@ const string connectionString = "YOUR_CONNECTION_STRING_HERE";
var silo = new HostBuilder()
.UseOrleans(builder =>
{
- .Configure(options =>
+ builder.Configure(options =>
{
options.ClusterId = "Cluster42";
options.ServiceId = "MyAwesomeService";
@@ -54,15 +54,16 @@ Client configuration:
```csharp
const string connectionString = "YOUR_CONNECTION_STRING_HERE";
-var client = new ClientBuilder()
- .Configure(options =>
- {
- options.ClusterId = "Cluster42";
- options.ServiceId = "MyAwesomeService";
- })
- .UseAzureStorageClustering(
- options => options.ConfigureTableServiceClient(connectionString))
- .ConfigureLogging(builder => builder.SetMinimumLevel(LogLevel.Warning).AddConsole())
+
+using var host = Host.CreateDefaultBuilder(args)
+ .UseOrleansClient(clientBuilder =>
+ clientBuilder.Configure(options =>
+ {
+ options.ClusterId = "Cluster42";
+ options.ServiceId = "MyAwesomeService";
+ })
+ .UseAzureStorageClustering(
+ options => options.ConfigureTableServiceClient(connectionString)))
.Build();
```
@@ -77,7 +78,7 @@ const string connectionString = "YOUR_CONNECTION_STRING_HERE";
var silo = new HostBuilder()
.UseOrleans(builder =>
{
- .Configure(options =>
+ builder.Configure(options =>
{
options.ClusterId = "Cluster42";
options.ServiceId = "MyAwesomeService";
@@ -97,18 +98,19 @@ Client configuration:
```csharp
const string connectionString = "YOUR_CONNECTION_STRING_HERE";
-var client = new ClientBuilder()
- .Configure(options =>
- {
- options.ClusterId = "Cluster42";
- options.ServiceId = "MyAwesomeService";
- })
- .UseAdoNetClustering(options =>
- {
- options.ConnectionString = connectionString;
- options.Invariant = "System.Data.SqlClient";
- })
- .ConfigureLogging(builder => builder.SetMinimumLevel(LogLevel.Warning).AddConsole())
+
+using var host = Host.CreateDefaultBuilder(args)
+ .UseOrleansClient(clientBuilder =>
+ clientBuilder.Configure(options =>
+ {
+ options.ClusterId = "Cluster42";
+ options.ServiceId = "MyAwesomeService";
+ })
+ .UseAdoNetClustering(options =>
+ {
+ options.ConnectionString = connectionString;
+ options.Invariant = "System.Data.SqlClient";
+ }))
.Build();
```
@@ -146,13 +148,14 @@ var gateways = new IPEndPoint[]
// ...
new IPEndPoint(OTHER_SILO__IP_ADDRESS_N, 30_000),
};
-var client = new ClientBuilder()
- .UseStaticClustering(gateways)
- .Configure(options =>
- {
- options.ClusterId = "Cluster42";
- options.ServiceId = "MyAwesomeService";
- })
- .ConfigureLogging(logging => logging.AddConsole())
+
+using var host = Host.CreateDefaultBuilder(args)
+ .UseOrleansClient(clientBuilder =>
+ clientBuilder.UseStaticClustering(gateways)
+ .Configure(options =>
+ {
+ options.ClusterId = "Cluster42";
+ options.ServiceId = "MyAwesomeService";
+ }))
.Build();
```
diff --git a/docs/orleans/host/grain-directory.md b/docs/orleans/host/grain-directory.md
index 58e618eb9d410..abd83d65090da 100644
--- a/docs/orleans/host/grain-directory.md
+++ b/docs/orleans/host/grain-directory.md
@@ -1,7 +1,7 @@
---
title: Grain directory
description: Learn about the grain directory in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Orleans grain directory
diff --git a/docs/orleans/host/heterogeneous-silos.md b/docs/orleans/host/heterogeneous-silos.md
index ac3fa011116cb..b9a609c39b7b6 100644
--- a/docs/orleans/host/heterogeneous-silos.md
+++ b/docs/orleans/host/heterogeneous-silos.md
@@ -1,7 +1,7 @@
---
title: Heterogeneous silos overview
description: Learn an overview of the supported heterogeneous silos in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Heterogeneous silos overview
diff --git a/docs/orleans/host/monitoring/client-error-code-monitoring.md b/docs/orleans/host/monitoring/client-error-code-monitoring.md
index 8c0c0dc9b267a..8bf6597d62517 100644
--- a/docs/orleans/host/monitoring/client-error-code-monitoring.md
+++ b/docs/orleans/host/monitoring/client-error-code-monitoring.md
@@ -1,7 +1,7 @@
---
title: Client error code monitoring
description: Explore the various client error code monitoring values in .NET Orleans.
-ms.date: 02/21/2023
+ms.date: 07/03/2024
ms.topic: error-reference
---
diff --git a/docs/orleans/host/monitoring/index.md b/docs/orleans/host/monitoring/index.md
index 67aef89054b49..745a233fa04fb 100644
--- a/docs/orleans/host/monitoring/index.md
+++ b/docs/orleans/host/monitoring/index.md
@@ -1,7 +1,7 @@
---
title: Orleans observability
description: Explore the various runtime monitoring, logging, distributed tracing, and metrics options available in .NET Orleans.
-ms.date: 08/31/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/host/monitoring/silo-error-code-monitoring.md b/docs/orleans/host/monitoring/silo-error-code-monitoring.md
index fb2772b9a95d7..992857a01b8eb 100644
--- a/docs/orleans/host/monitoring/silo-error-code-monitoring.md
+++ b/docs/orleans/host/monitoring/silo-error-code-monitoring.md
@@ -1,7 +1,7 @@
---
title: Silo error code monitoring
description: Explore the various silo error code monitoring values in .NET Orleans.
-ms.date: 02/21/2023
+ms.date: 07/03/2024
ms.topic: error-reference
---
diff --git a/docs/orleans/host/powershell-client.md b/docs/orleans/host/powershell-client.md
index c4cf6b85772aa..0509e7b89d271 100644
--- a/docs/orleans/host/powershell-client.md
+++ b/docs/orleans/host/powershell-client.md
@@ -1,7 +1,7 @@
---
title: PowerShell client module
description: Learn about the PowerShell client module in .NET Orleans.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# PowerShell client module
diff --git a/docs/orleans/host/silo-lifecycle.md b/docs/orleans/host/silo-lifecycle.md
index 7f7d7d5c681b0..7ab5a239a39a0 100644
--- a/docs/orleans/host/silo-lifecycle.md
+++ b/docs/orleans/host/silo-lifecycle.md
@@ -1,7 +1,7 @@
---
title: Orleans silo lifecycles
description: Learn about .NET Orleans silo lifecycles.
-ms.date: 03/16/2022
+ms.date: 07/03/2024
---
# Orleans silo lifecycle overview
diff --git a/docs/orleans/implementation/cluster-management.md b/docs/orleans/implementation/cluster-management.md
index 23a9d37634cde..4747013448137 100644
--- a/docs/orleans/implementation/cluster-management.md
+++ b/docs/orleans/implementation/cluster-management.md
@@ -1,7 +1,7 @@
---
title: Cluster management in Orleans
description: Learn about cluster management in .NET Orleans.
-ms.date: 03/17/2022
+ms.date: 07/03/2024
---
# Cluster management in Orleans
diff --git a/docs/orleans/implementation/index.md b/docs/orleans/implementation/index.md
index 75542f202df8a..1ff7d1ddcad5c 100644
--- a/docs/orleans/implementation/index.md
+++ b/docs/orleans/implementation/index.md
@@ -1,7 +1,7 @@
---
title: Implementation details
description: Explore the various implementation details in .NET Orleans.
-ms.date: 03/17/2022
+ms.date: 07/03/2024
---
# Implementation details overview
diff --git a/docs/orleans/implementation/load-balancing.md b/docs/orleans/implementation/load-balancing.md
index 747c013464424..f52ef1f8d48e1 100644
--- a/docs/orleans/implementation/load-balancing.md
+++ b/docs/orleans/implementation/load-balancing.md
@@ -1,7 +1,7 @@
---
title: Load balancing
description: Learn how .NET Orleans manages load balancing.
-ms.date: 03/17/2022
+ms.date: 07/03/2024
---
# Load balancing
diff --git a/docs/orleans/implementation/messaging-delivery-guarantees.md b/docs/orleans/implementation/messaging-delivery-guarantees.md
index bde2fa84853d4..dcc912824616f 100644
--- a/docs/orleans/implementation/messaging-delivery-guarantees.md
+++ b/docs/orleans/implementation/messaging-delivery-guarantees.md
@@ -1,7 +1,7 @@
---
title: Messaging delivery guarantees
description: Learn about messaging delivery guarantees in .NET Orleans.
-ms.date: 03/17/2022
+ms.date: 07/03/2024
---
# Messaging delivery guarantees
diff --git a/docs/orleans/implementation/orleans-lifecycle.md b/docs/orleans/implementation/orleans-lifecycle.md
index bad7afb384123..4b23bf3a05856 100644
--- a/docs/orleans/implementation/orleans-lifecycle.md
+++ b/docs/orleans/implementation/orleans-lifecycle.md
@@ -1,7 +1,7 @@
---
title: Orleans lifecycle
description: Learn the various lifecycles of .NET Orleans apps.
-ms.date: 03/17/2022
+ms.date: 07/03/2024
---
# Orleans lifecycle overview
diff --git a/docs/orleans/implementation/scheduler.md b/docs/orleans/implementation/scheduler.md
index ffca6060b9c12..02825e920e6b3 100644
--- a/docs/orleans/implementation/scheduler.md
+++ b/docs/orleans/implementation/scheduler.md
@@ -1,7 +1,7 @@
---
title: Scheduling overview
description: Explore the scheduling overview in .NET Orleans.
-ms.date: 03/17/2022
+ms.date: 07/03/2024
---
# Scheduling overview
diff --git a/docs/orleans/implementation/streams-implementation/azure-queue-streams.md b/docs/orleans/implementation/streams-implementation/azure-queue-streams.md
index c3ed5dc1af360..4ccd4771e6126 100644
--- a/docs/orleans/implementation/streams-implementation/azure-queue-streams.md
+++ b/docs/orleans/implementation/streams-implementation/azure-queue-streams.md
@@ -1,7 +1,7 @@
---
title: Azure Queue streams overview
description: Explore the streaming implementation with Azure Queue in .NET Orleans.
-ms.date: 03/17/2022
+ms.date: 07/03/2024
---
# Azure Queue streams overview
diff --git a/docs/orleans/implementation/streams-implementation/index.md b/docs/orleans/implementation/streams-implementation/index.md
index fe00abcbdb197..ff1319c9916f1 100644
--- a/docs/orleans/implementation/streams-implementation/index.md
+++ b/docs/orleans/implementation/streams-implementation/index.md
@@ -1,7 +1,7 @@
---
title: Streams implementation details
description: Learn the stream implementation details in .NET Orleans.
-ms.date: 03/17/2022
+ms.date: 07/03/2024
---
# Orleans streams implementation details
diff --git a/docs/orleans/implementation/testing.md b/docs/orleans/implementation/testing.md
index 5f46c3fefacc7..9c1f1665a95c4 100644
--- a/docs/orleans/implementation/testing.md
+++ b/docs/orleans/implementation/testing.md
@@ -1,7 +1,7 @@
---
title: Unit testing
description: Learn how to unit test with .NET Orleans.
-ms.date: 01/17/2024
+ms.date: 07/03/2024
---
# Unit testing with Orleans
diff --git a/docs/orleans/index.yml b/docs/orleans/index.yml
index 20a9d9b57bf7e..7183c5715540e 100644
--- a/docs/orleans/index.yml
+++ b/docs/orleans/index.yml
@@ -9,7 +9,7 @@ metadata:
description: Samples, tutorials, and education for .NET Orleans. Microsoft's cloud native and distributed systems platform.
ms.topic: hub-page
ms.service: dotnet-orleans
- ms.date: 03/06/2023
+ ms.date: 07/03/2024
highlightedContent:
# itemType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | whats-new
diff --git a/docs/orleans/migration-guide.md b/docs/orleans/migration-guide.md
index 1d438f559f2f7..63e4a32f7b6db 100644
--- a/docs/orleans/migration-guide.md
+++ b/docs/orleans/migration-guide.md
@@ -1,7 +1,7 @@
---
title: Migrate from Orleans 3.x to 7.0
description: Learn the various new features introduced in Orleans 7.0, and how to migrate from 3.x versions.
-ms.date: 03/06/2023
+ms.date: 07/03/2024
---
# Migrate from Orleans 3.x to 7.0
diff --git a/docs/orleans/overview.md b/docs/orleans/overview.md
index f6f89d7cc6da4..7177ffdb442b5 100644
--- a/docs/orleans/overview.md
+++ b/docs/orleans/overview.md
@@ -1,7 +1,7 @@
---
title: Orleans overview
description: An introduction to .NET Orleans.
-ms.date: 05/10/2022
+ms.date: 07/03/2024
---
# Microsoft Orleans
diff --git a/docs/orleans/quickstarts/build-your-first-orleans-app.md b/docs/orleans/quickstarts/build-your-first-orleans-app.md
index 549ad6554ea49..1bcf6e5c2ed04 100644
--- a/docs/orleans/quickstarts/build-your-first-orleans-app.md
+++ b/docs/orleans/quickstarts/build-your-first-orleans-app.md
@@ -1,7 +1,7 @@
---
title: 'Quickstart: Build your first Orleans app with ASP.NET Core'
description: Learn how to use Orleans to build a scalable, distributed ASP.NET Core application
-ms.date: 01/09/2024
+ms.date: 07/03/2024
ms.topic: quickstart
ms.devlang: csharp
---
diff --git a/docs/orleans/quickstarts/deploy-scale-orleans-on-azure.md b/docs/orleans/quickstarts/deploy-scale-orleans-on-azure.md
index e5b1a33029e3c..5ae477779e717 100644
--- a/docs/orleans/quickstarts/deploy-scale-orleans-on-azure.md
+++ b/docs/orleans/quickstarts/deploy-scale-orleans-on-azure.md
@@ -3,7 +3,7 @@ title: Deploy and scale an Orleans app on Azure
description: Host and scale an Orleans app on Azure Container Apps with Azure Container Registry and Azure Table Storage or Azure Cosmos DB for NoSQL.
ms.topic: how-to
ms.devlang: csharp
-ms.date: 01/11/2024
+ms.date: 07/03/2024
zone_pivot_groups: orleans-persistence-option
# CustomerIntent: As a developer, I want to host my Orleans application in Azure so that I can take advantage of the scaling capabilities for the database and application services.
---
diff --git a/docs/orleans/resources/best-practices.md b/docs/orleans/resources/best-practices.md
index e225a2dc84e8b..c62dc77084ad1 100644
--- a/docs/orleans/resources/best-practices.md
+++ b/docs/orleans/resources/best-practices.md
@@ -1,7 +1,7 @@
---
title: Best practices in Orleans
description: Learn some of the best practices in Orleans for .NET Orleans app development.
-ms.date: 01/18/2024
+ms.date: 07/03/2024
---
# Best practices in Orleans
@@ -67,7 +67,9 @@ Orleans is not the best fit when:
```csharp
var x = await bar.Foo();
+
var y = DoSomething(x);
+
return y;
```
@@ -75,11 +77,13 @@ Orleans is not the best fit when:
```csharp
var tasks = new List();
+
foreach (var grain in grains)
{
tasks.Add(grain.Foo());
}
await Task.WhenAll(tasks);
+
DoMoreWork();
```
@@ -95,7 +99,7 @@ Orleans is not the best fit when:
- Deadlock can occur due to call cycles.
- Examples:
- The grain calls itself.
- - Grains A calls B while C is also calling A (A -> B -> C -> A).
+ - Grain A calls B which calls C which in turn is calling A (A -> B -> C -> A).
- Grain A calls Grain B as Grain B is calling Grain A (A -> B -> A).
- Timeouts are used to automatically break deadlocks.
- can be used to allow the grain class reentrant.
diff --git a/docs/orleans/resources/frequently-asked-questions.md b/docs/orleans/resources/frequently-asked-questions.md
index 4efd7ddd63839..7568ce2014dc6 100644
--- a/docs/orleans/resources/frequently-asked-questions.md
+++ b/docs/orleans/resources/frequently-asked-questions.md
@@ -1,7 +1,7 @@
---
title: Frequently asked questions
description: Explore the frequently asked questions for .NET Orleans.
-ms.date: 03/21/2022
+ms.date: 07/03/2024
---
# Frequently Asked Questions
diff --git a/docs/orleans/resources/links.md b/docs/orleans/resources/links.md
index 256622f279836..b93c5f1b6dcea 100644
--- a/docs/orleans/resources/links.md
+++ b/docs/orleans/resources/links.md
@@ -1,7 +1,7 @@
---
title: External links for .NET Orleans
description: Explore external links for .NET Orleans.
-ms.date: 03/21/2022
+ms.date: 07/03/2024
---
# External links for .NET Orleans
diff --git a/docs/orleans/resources/nuget-packages.md b/docs/orleans/resources/nuget-packages.md
index 07fbbb7b1d0e0..4c7d26fae91db 100644
--- a/docs/orleans/resources/nuget-packages.md
+++ b/docs/orleans/resources/nuget-packages.md
@@ -1,7 +1,7 @@
---
title: Orleans NuGet packages
description: Explore the many .NET Orleans NuGet packages.
-ms.date: 03/07/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/resources/orleans-architecture-principles-and-approach.md b/docs/orleans/resources/orleans-architecture-principles-and-approach.md
index 0f0c6ff1ddb36..c8e836c6b66dc 100644
--- a/docs/orleans/resources/orleans-architecture-principles-and-approach.md
+++ b/docs/orleans/resources/orleans-architecture-principles-and-approach.md
@@ -1,7 +1,7 @@
---
title: Orleans architecture design principles
description: Explore the architecture design principles for .NET Orleans.
-ms.date: 03/21/2022
+ms.date: 07/03/2024
---
# Orleans architecture design principles
diff --git a/docs/orleans/resources/orleans-thinking-big-and-small.md b/docs/orleans/resources/orleans-thinking-big-and-small.md
index 1fc512053c5ec..d96ce70a925bb 100644
--- a/docs/orleans/resources/orleans-thinking-big-and-small.md
+++ b/docs/orleans/resources/orleans-thinking-big-and-small.md
@@ -1,7 +1,7 @@
---
title: Big and small thinking
description: Learn how Orleans applies to both big and small distributed applications.
-ms.date: 03/21/2022
+ms.date: 07/03/2024
---
# Big and small thinking
diff --git a/docs/orleans/resources/student-projects.md b/docs/orleans/resources/student-projects.md
index ec79daaf253fe..179a5dd6be905 100644
--- a/docs/orleans/resources/student-projects.md
+++ b/docs/orleans/resources/student-projects.md
@@ -1,7 +1,7 @@
---
title: Student projects
description: Learn how the Orleans team encourages students to build distributed applications.
-ms.date: 03/21/2022
+ms.date: 07/03/2024
---
# Student projects
diff --git a/docs/orleans/streaming/broadcast-channel.md b/docs/orleans/streaming/broadcast-channel.md
index cfc932b7c969c..9d7b8638c332d 100644
--- a/docs/orleans/streaming/broadcast-channel.md
+++ b/docs/orleans/streaming/broadcast-channel.md
@@ -1,7 +1,7 @@
---
title: Broadcast channels
description: Learn how to work with Orleans broadcast channels.
-ms.date: 01/02/2023
+ms.date: 07/03/2024
---
# Broadcast channels in Orleans
diff --git a/docs/orleans/streaming/index.md b/docs/orleans/streaming/index.md
index f93c05e3c9152..af4d38d10a42e 100644
--- a/docs/orleans/streaming/index.md
+++ b/docs/orleans/streaming/index.md
@@ -1,7 +1,7 @@
---
title: Streaming with Orleans
description: Learn how to work with streaming in .NET Orleans.
-ms.date: 05/04/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/streaming/stream-providers.md b/docs/orleans/streaming/stream-providers.md
index 622e53b2c3582..882b90bacee9b 100644
--- a/docs/orleans/streaming/stream-providers.md
+++ b/docs/orleans/streaming/stream-providers.md
@@ -1,7 +1,7 @@
---
title: Orleans stream providers
description: Learn about the available stream providers for .NET Orleans.
-ms.date: 01/09/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/streaming/streams-programming-apis.md b/docs/orleans/streaming/streams-programming-apis.md
index 96ce46a3392de..b68ea443b3df4 100644
--- a/docs/orleans/streaming/streams-programming-apis.md
+++ b/docs/orleans/streaming/streams-programming-apis.md
@@ -1,7 +1,7 @@
---
title: Orleans streaming APIs
description: Learn about the available streaming APIs for .NET Orleans.
-ms.date: 01/09/2024
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/streaming/streams-quick-start.md b/docs/orleans/streaming/streams-quick-start.md
index be863bc409526..d15bc30f1de06 100644
--- a/docs/orleans/streaming/streams-quick-start.md
+++ b/docs/orleans/streaming/streams-quick-start.md
@@ -1,7 +1,7 @@
---
title: Orleans streaming quickstart
description: Learn from the streaming quickstart in .NET Orleans.
-ms.date: 02/14/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/streaming/streams-why.md b/docs/orleans/streaming/streams-why.md
index 582e4eb459369..e31726093bee5 100644
--- a/docs/orleans/streaming/streams-why.md
+++ b/docs/orleans/streaming/streams-why.md
@@ -1,7 +1,7 @@
---
title: Why streams in Orleans?
description: Learn why you'd want to use streams in .NET Orleans.
-ms.date: 03/21/2022
+ms.date: 07/03/2024
---
# Why streams in Orleans?
diff --git a/docs/orleans/tutorials-and-samples/adventure.md b/docs/orleans/tutorials-and-samples/adventure.md
index ea1783d147010..1ccfea4f566c3 100644
--- a/docs/orleans/tutorials-and-samples/adventure.md
+++ b/docs/orleans/tutorials-and-samples/adventure.md
@@ -1,7 +1,7 @@
---
title: Adventure game sample project
description: Explore the Adventure sample project written with .NET Orleans.
-ms.date: 12/05/2022
+ms.date: 07/03/2024
---
# Adventure game sample project
diff --git a/docs/orleans/tutorials-and-samples/custom-grain-storage.md b/docs/orleans/tutorials-and-samples/custom-grain-storage.md
index 135acad72ae89..d722068bca180 100644
--- a/docs/orleans/tutorials-and-samples/custom-grain-storage.md
+++ b/docs/orleans/tutorials-and-samples/custom-grain-storage.md
@@ -1,7 +1,7 @@
---
title: Custom grain storage sample project
description: Explore a custom grain storage sample project written with .NET Orleans.
-ms.date: 02/27/2023
+ms.date: 07/03/2024
zone_pivot_groups: orleans-version
---
diff --git a/docs/orleans/tutorials-and-samples/index.md b/docs/orleans/tutorials-and-samples/index.md
index d83c61f40ad43..040e4141b83f1 100644
--- a/docs/orleans/tutorials-and-samples/index.md
+++ b/docs/orleans/tutorials-and-samples/index.md
@@ -1,7 +1,7 @@
---
title: Orleans sample projects
description: Explore the various sample projects written with .NET Orleans.
-ms.date: 12/01/2022
+ms.date: 07/03/2024
---
# Orleans sample projects
diff --git a/docs/orleans/tutorials-and-samples/overview-helloworld.md b/docs/orleans/tutorials-and-samples/overview-helloworld.md
index 8103be754de29..761d969911d68 100644
--- a/docs/orleans/tutorials-and-samples/overview-helloworld.md
+++ b/docs/orleans/tutorials-and-samples/overview-helloworld.md
@@ -1,7 +1,7 @@
---
title: "Tutorial: Hello world"
description: Explore the hello world tutorial project written with .NET Orleans.
-ms.date: 02/04/2022
+ms.date: 07/03/2024
---
# Tutorial: Hello world
diff --git a/docs/orleans/tutorials-and-samples/tutorial-1.md b/docs/orleans/tutorials-and-samples/tutorial-1.md
index 11f31bc088ed2..ea963fd12afb9 100644
--- a/docs/orleans/tutorials-and-samples/tutorial-1.md
+++ b/docs/orleans/tutorials-and-samples/tutorial-1.md
@@ -1,7 +1,7 @@
---
title: Minimal Orleans app sample project
description: Explore the minimal Orleans app sample project.
-ms.date: 06/06/2023
+ms.date: 07/03/2024
---
# Tutorial: Create a minimal Orleans application
diff --git a/docs/standard/net-standard.md b/docs/standard/net-standard.md
index b832bff8d65b3..4f58d5c7b9d6e 100644
--- a/docs/standard/net-standard.md
+++ b/docs/standard/net-standard.md
@@ -55,7 +55,7 @@ Derivative artifacts are provided to enable more convenient reading and to enabl
The primary distribution vehicle for the .NET Standard reference assemblies is NuGet packages. Implementations are delivered in a variety of ways, appropriate for each .NET implementation.
-NuGet packages target one or more [frameworks](frameworks.md). .NET Standard packages target the ".NET Standard" framework. You can target the .NET Standard framework using the `netstandard` [compact TFM](frameworks.md) (for example, `netstandard1.4`). Libraries that are intended to run on multiple implementations of .NET should target this framework. For the broadest set of APIs, target `netstandard2.0` since the number of available APIs more than doubled between .NET Standard 1.6 and 2.0.
+NuGet packages target one or more [frameworks](frameworks.md). .NET Standard packages target the ".NET Standard" framework. You can target the .NET Standard framework using the `netstandard` [compact target framework moniker (TFM)](frameworks.md), for example, `netstandard1.4`. Libraries that are intended to run on multiple implementations of .NET should target the .NET Standard framework. For the broadest set of APIs, target `netstandard2.0`, because the number of available APIs more than doubled between .NET Standard 1.6 and 2.0.
The [`NETStandard.Library`](https://www.nuget.org/packages/NETStandard.Library/) metapackage references the complete set of NuGet packages that define .NET Standard. The most common way to target `netstandard` is by referencing this metapackage. It describes and provides access to the ~40 .NET libraries and associated APIs that define .NET Standard. You can reference additional packages that target `netstandard` to get access to additional APIs.
diff --git a/quest-config.json b/quest-config.json
index f839d01293922..b0feb9ceab52e 100644
--- a/quest-config.json
+++ b/quest-config.json
@@ -37,6 +37,10 @@
{
"Label": ":checkered_flag: Release: .NET 9",
"Tag": "new-feature"
+ },
+ {
+ "Label": "okr-curation",
+ "Tag": "content-curation"
}
]
}