From 6eacd963c35a9b31f8e19595c9d66308d1279c5e Mon Sep 17 00:00:00 2001 From: "azure-sdk-automation[bot]" <191533747+azure-sdk-automation[bot]@users.noreply.github.com> Date: Wed, 23 Sep 2026 10:52:30 -0700 Subject: [PATCH 01/24] Update package index with latest published versions (#56221) Co-authored-by: azure-sdk --- docs/azure/includes/dotnet-all.md | 3 ++- docs/azure/includes/dotnet-new.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index 02089020fc4c4..62cc8262fe1f8 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -233,7 +233,7 @@ | Resource Management - Authorization | NuGet [1.1.7](https://www.nuget.org/packages/Azure.ResourceManager.Authorization/1.1.7)
NuGet [1.2.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.Authorization/1.2.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.Authorization-readme) | GitHub [1.1.7](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Authorization_1.1.7/sdk/authorization/Azure.ResourceManager.Authorization/)
GitHub [1.2.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Authorization_1.2.0-beta.1/sdk/authorization/Azure.ResourceManager.Authorization/) | | Resource Management - Automanage | NuGet [1.1.2](https://www.nuget.org/packages/Azure.ResourceManager.Automanage/1.1.2) | [docs](/dotnet/api/overview/azure/ResourceManager.Automanage-readme) | GitHub [1.1.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Automanage_1.1.2/sdk/automanage/Azure.ResourceManager.Automanage/) | | Resource Management - Automation | NuGet [1.1.2](https://www.nuget.org/packages/Azure.ResourceManager.Automation/1.1.2) | [docs](/dotnet/api/overview/azure/ResourceManager.Automation-readme) | GitHub [1.1.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Automation_1.1.2/sdk/automation/Azure.ResourceManager.Automation/) | -| Resource Management - Azure AI Search | NuGet [1.3.0](https://www.nuget.org/packages/Azure.ResourceManager.Search/1.3.0)
NuGet [1.4.0-beta.2](https://www.nuget.org/packages/Azure.ResourceManager.Search/1.4.0-beta.2) | [docs](/dotnet/api/overview/azure/ResourceManager.Search-readme) | GitHub [1.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Search_1.3.0/sdk/search/Azure.ResourceManager.Search/)
GitHub [1.4.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Search_1.4.0-beta.2/sdk/search/Azure.ResourceManager.Search/) | +| Resource Management - Azure AI Search | NuGet [1.3.0](https://www.nuget.org/packages/Azure.ResourceManager.Search/1.3.0)
NuGet [1.4.0-beta.3](https://www.nuget.org/packages/Azure.ResourceManager.Search/1.4.0-beta.3) | [docs](/dotnet/api/overview/azure/ResourceManager.Search-readme) | GitHub [1.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Search_1.3.0/sdk/search/Azure.ResourceManager.Search/)
GitHub [1.4.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Search_1.4.0-beta.3/sdk/search/Azure.ResourceManager.Search/) | | Resource Management - Azure Stack HCI | NuGet [1.3.0](https://www.nuget.org/packages/Azure.ResourceManager.Hci/1.3.0) | [docs](/dotnet/api/overview/azure/ResourceManager.Hci-readme) | GitHub [1.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Hci_1.3.0/sdk/azurestackhci/Azure.ResourceManager.Hci/) | | Resource Management - Azure VMware Solution | NuGet [1.7.0](https://www.nuget.org/packages/Azure.ResourceManager.Avs/1.7.0) | [docs](/dotnet/api/overview/azure/ResourceManager.Avs-readme) | GitHub [1.7.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Avs_1.7.0/sdk/avs/Azure.ResourceManager.Avs/) | | Resource Management - Batch | NuGet [1.7.0](https://www.nuget.org/packages/Azure.ResourceManager.Batch/1.7.0) | [docs](/dotnet/api/overview/azure/ResourceManager.Batch-readme) | GitHub [1.7.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Batch_1.7.0/sdk/batch/Azure.ResourceManager.Batch/) | @@ -550,6 +550,7 @@ | Speech Extension ONNX Runtime | NuGet [1.51.2](https://www.nuget.org/packages/Microsoft.CognitiveServices.Speech.Extension.ONNX.Runtime/1.51.2) | | | | Speech Extension Telemetry | NuGet [1.51.2](https://www.nuget.org/packages/Microsoft.CognitiveServices.Speech.Extension.Telemetry/1.51.2) | | | | System Net Client Model | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/System.Net.ClientModel/1.0.0-beta.1) | | | +| unknown | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Microsoft.Azure.WebPubSub.Emulator/1.0.0-beta.1) | | | | WebJobs Extension Cosmos DB Mongo | NuGet [1.2.2](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo/1.2.2)
NuGet [1.2.5-preview](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo/1.2.5-preview) | | | | WebJobs Extension MySQL | NuGet [1.0.130](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.MySql/1.0.130) | | | | App Service | NuGet [0.2.2-alpha](https://www.nuget.org/packages/Microsoft.Azure.AppService/0.2.2-alpha) | | | diff --git a/docs/azure/includes/dotnet-new.md b/docs/azure/includes/dotnet-new.md index 938a6c390ed70..fe45c637c1d0c 100644 --- a/docs/azure/includes/dotnet-new.md +++ b/docs/azure/includes/dotnet-new.md @@ -250,7 +250,7 @@ | Resource Management - Authorization | NuGet [1.1.7](https://www.nuget.org/packages/Azure.ResourceManager.Authorization/1.1.7)
NuGet [1.2.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.Authorization/1.2.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.Authorization-readme) | GitHub [1.1.7](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Authorization_1.1.7/sdk/authorization/Azure.ResourceManager.Authorization/)
GitHub [1.2.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Authorization_1.2.0-beta.1/sdk/authorization/Azure.ResourceManager.Authorization/) | | Resource Management - Automanage | NuGet [1.1.2](https://www.nuget.org/packages/Azure.ResourceManager.Automanage/1.1.2) | [docs](/dotnet/api/overview/azure/ResourceManager.Automanage-readme) | GitHub [1.1.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Automanage_1.1.2/sdk/automanage/Azure.ResourceManager.Automanage/) | | Resource Management - Automation | NuGet [1.1.2](https://www.nuget.org/packages/Azure.ResourceManager.Automation/1.1.2) | [docs](/dotnet/api/overview/azure/ResourceManager.Automation-readme) | GitHub [1.1.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Automation_1.1.2/sdk/automation/Azure.ResourceManager.Automation/) | -| Resource Management - Azure AI Search | NuGet [1.3.0](https://www.nuget.org/packages/Azure.ResourceManager.Search/1.3.0)
NuGet [1.4.0-beta.2](https://www.nuget.org/packages/Azure.ResourceManager.Search/1.4.0-beta.2) | [docs](/dotnet/api/overview/azure/ResourceManager.Search-readme) | GitHub [1.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Search_1.3.0/sdk/search/Azure.ResourceManager.Search/)
GitHub [1.4.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Search_1.4.0-beta.2/sdk/search/Azure.ResourceManager.Search/) | +| Resource Management - Azure AI Search | NuGet [1.3.0](https://www.nuget.org/packages/Azure.ResourceManager.Search/1.3.0)
NuGet [1.4.0-beta.3](https://www.nuget.org/packages/Azure.ResourceManager.Search/1.4.0-beta.3) | [docs](/dotnet/api/overview/azure/ResourceManager.Search-readme) | GitHub [1.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Search_1.3.0/sdk/search/Azure.ResourceManager.Search/)
GitHub [1.4.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Search_1.4.0-beta.3/sdk/search/Azure.ResourceManager.Search/) | | Resource Management - Azure Stack HCI | NuGet [1.3.0](https://www.nuget.org/packages/Azure.ResourceManager.Hci/1.3.0) | [docs](/dotnet/api/overview/azure/ResourceManager.Hci-readme) | GitHub [1.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Hci_1.3.0/sdk/azurestackhci/Azure.ResourceManager.Hci/) | | Resource Management - Azure VMware Solution | NuGet [1.7.0](https://www.nuget.org/packages/Azure.ResourceManager.Avs/1.7.0) | [docs](/dotnet/api/overview/azure/ResourceManager.Avs-readme) | GitHub [1.7.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Avs_1.7.0/sdk/avs/Azure.ResourceManager.Avs/) | | Resource Management - Batch | NuGet [1.7.0](https://www.nuget.org/packages/Azure.ResourceManager.Batch/1.7.0) | [docs](/dotnet/api/overview/azure/ResourceManager.Batch-readme) | GitHub [1.7.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Batch_1.7.0/sdk/batch/Azure.ResourceManager.Batch/) | From 3ed8db863c26d00ec9d3500bfd54f7eea1a950b5 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Wed, 23 Sep 2026 12:17:12 -0700 Subject: [PATCH 02/24] remove any possible overlap with orleans snipeets (#56223) --- .github/dependabot.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 29f590ef1b7f3..10a155ef03d49 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -63,6 +63,8 @@ updates: - package-ecosystem: "nuget" directories: - "docs/orleans/**/snippets/**/*" + exclude-paths: + - "docs/orleans/**/snippets-v3/**/*" schedule: interval: "weekly" open-pull-requests-limit: 5 @@ -76,6 +78,8 @@ updates: - package-ecosystem: "nuget" directories: - "docs/orleans/**/snippets-v3/**/*" + exclude-paths: + - "docs/orleans/**/snippets/**/*" schedule: interval: "weekly" open-pull-requests-limit: 5 From 394771050c83b3da4171d24f07ddd6c1d00f4fc9 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Wed, 23 Sep 2026 12:24:50 -0700 Subject: [PATCH 03/24] Fix broken links (#56216) --- docs/ai/resources/mcp-servers.md | 1 - .../logging-with-elastic-stack.md | 2 - .../self-signed-certificates-guide.md | 64 +++++++++++-------- .../unit-testing-mstest-getting-started.md | 5 +- docs/core/whats-new/dotnet-8/containers.md | 2 +- docs/standard/glossary.md | 2 - 6 files changed, 41 insertions(+), 35 deletions(-) diff --git a/docs/ai/resources/mcp-servers.md b/docs/ai/resources/mcp-servers.md index f909d6ca16783..1ccfc484a5f02 100644 --- a/docs/ai/resources/mcp-servers.md +++ b/docs/ai/resources/mcp-servers.md @@ -56,5 +56,4 @@ This article contains an organized list of the best learning resources for .NET | Link | Description | |------|-------------| -|[Anthropic MCP Discussions](https://github.com/orgs/modelcontextprotocol/discussions)|An open forum for discussing MCP in Anthropic's official MCP GitHub repo.| |[Microsoft Foundry Discord](https://discord.com/invite/ByRwuEEgH4)|A Discord discussion space for developers looking to build with Microsoft AI tooling.| diff --git a/docs/architecture/cloud-native/logging-with-elastic-stack.md b/docs/architecture/cloud-native/logging-with-elastic-stack.md index fe01966bc2fb6..010598560d038 100644 --- a/docs/architecture/cloud-native/logging-with-elastic-stack.md +++ b/docs/architecture/cloud-native/logging-with-elastic-stack.md @@ -109,8 +109,6 @@ The Elastic stack can be installed on Azure in many ways. As always, it's possib An option with less overhead is to make use of one of the many Docker containers on which the Elastic Stack has already been configured. These containers can be dropped into an existing Kubernetes cluster and run alongside application code. The [sebp/elk](https://elk-docker.readthedocs.io/) container is a well-documented and tested Elastic Stack container. -Another option is a [recently announced ELK-as-a-service offering](https://devops.com/logz-io-unveils-azure-open-source-elk-monitoring-solution/). - ## References - [Install Elastic Stack on Azure](/azure/virtual-machines/linux/tutorial-elasticsearch) diff --git a/docs/core/additional-tools/self-signed-certificates-guide.md b/docs/core/additional-tools/self-signed-certificates-guide.md index 330d43420741f..1e2272a961ff3 100644 --- a/docs/core/additional-tools/self-signed-certificates-guide.md +++ b/docs/core/additional-tools/self-signed-certificates-guide.md @@ -2,7 +2,7 @@ title: Generate Self-Signed Certificates Overview description: An overview of the dotnet dev-certs tool that adds functionality for .NET and ASP.NET Core projects, and other options for using self-signed certificates. author: angee -ms.date: 05/27/2026 +ms.date: 09/23/2026 ms.custom: sfi-ropc-nochange --- @@ -26,43 +26,45 @@ This sample requires the [Docker client](https://www.docker.com/products/docker) For this guide, you'll use a [sample app](https://hub.docker.com/r/microsoft/dotnet-samples) and make changes where appropriate. -Check that the sample app [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/main/samples/aspnetapp/Dockerfile) is using .NET 10. +Check that the sample app [Dockerfile](https://github.com/dotnet/dotnet-docker/blob/7a1cdd5dd426ae782d7304ab8af476855790186a/samples/AspNetCoreRazorApp/Dockerfile) is using .NET 11. -Depending on the host OS, you might need to update the ASP.NET runtime. For example, to target the appropriate Windows runtime, change `mcr.microsoft.com/dotnet/aspnet:10.0-nanoservercore-2009 AS runtime` to `mcr.microsoft.com/dotnet/aspnet:10.0-windowsservercore-ltsc2022 AS runtime` in the Dockerfile. +Depending on the host OS, you might need to update the ASP.NET runtime. For Windows containers, use the Windows Server Core variant of the sample. For example, this will help with testing the certificates on Windows: ```Dockerfile -# https://github.com/dotnet/dotnet-docker/blob/main/README.sdk.md -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +# https://github.com/dotnet/dotnet-docker/blob/main/samples/README.md +FROM mcr.microsoft.com/dotnet/sdk:11.0-windowsservercore-ltsc2025 AS build WORKDIR /source -# copy csproj and restore as distinct layers -COPY *.sln . -COPY aspnetapp/*.csproj ./aspnetapp/ -RUN dotnet restore -r win-x64 +# Copy project file and restore as distinct layers +COPY *.slnx . +COPY AspNetCoreRazorApp/*.csproj ./AspNetCoreRazorApp/ +RUN dotnet restore -# copy everything else and build app -COPY aspnetapp/. ./aspnetapp/ -WORKDIR /source/aspnetapp -RUN dotnet publish -c release -o /app -r win-x64 --self-contained false --no-restore +# Copy source code and publish app +COPY AspNetCoreRazorApp/. ./AspNetCoreRazorApp/ +WORKDIR /source/AspNetCoreRazorApp +RUN dotnet publish --no-restore -o /app -# final stage/image -FROM mcr.microsoft.com/dotnet/aspnet:10.0-windowsservercore-ltsc2022 AS runtime +# Runtime stage +FROM mcr.microsoft.com/dotnet/aspnet:11.0-windowsservercore-ltsc2025 +EXPOSE 8080 WORKDIR /app -COPY --from=build /app ./ -ENTRYPOINT ["aspnetapp"] +COPY --from=build /app . +USER ContainerUser +ENTRYPOINT ["AspNetCoreRazorApp"] ``` If you're testing the certificates on Linux, you can use the existing Dockerfile. -Make sure the `aspnetapp.csproj` includes the appropriate target framework: +Make sure the `AspNetCoreRazorApp.csproj` includes the appropriate target framework: ```xml - net10.0 + net11.0 @@ -70,18 +72,24 @@ Make sure the `aspnetapp.csproj` includes the appropriate target framework: ``` > [!NOTE] -> If you want to use `dotnet publish` parameters to *trim* the deployment, make sure that the appropriate dependencies are included for supporting SSL certificates. Update the [dotnet-docker\samples\aspnetapp\aspnetapp.csproj](https://github.com/dotnet/dotnet-docker/blob/main/samples/aspnetapp/aspnetapp/aspnetapp.csproj) file to ensure that the appropriate assemblies are included in the container. For reference, check how to update the .csproj file to [support SSL certificates](../deploying/trimming/trim-self-contained.md) when using trimming for self-contained deployments. +> If you want to use `dotnet publish` parameters to *trim* the deployment, make sure that the appropriate dependencies are included for supporting SSL certificates. Update the [project file](https://github.com/dotnet/dotnet-docker/blob/7a1cdd5dd426ae782d7304ab8af476855790186a/samples/AspNetCoreRazorApp/AspNetCoreRazorApp/AspNetCoreRazorApp.csproj) to ensure that the appropriate assemblies are included in the container. For reference, check how to update the .csproj file to [support SSL certificates](../deploying/trimming/trim-self-contained.md) when using trimming for self-contained deployments. Make sure you're pointing to the sample app. ```console -cd .\dotnet-docker\samples\aspnetapp +cd .\dotnet-docker\samples\AspNetCoreRazorApp ``` -Build the container for testing locally. +For Linux containers, build the container for testing locally: ```console -docker build -t aspnetapp:my-sample -f Dockerfile . +docker build -t aspnetapp:my-sample . +``` + +For Windows containers, use the Windows Server Core Dockerfile: + +```console +docker build -t aspnetapp:my-sample -f Dockerfile.windowsservercore . ``` ## Create a self-signed certificate @@ -97,12 +105,12 @@ You can create a self-signed certificate: You can use `dotnet dev-certs` to work with self-signed certificates. ```powershell -dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\aspnetapp.pfx -p $CREDENTIAL_PLACEHOLDER$ +dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\AspNetCoreRazorApp.pfx -p $CREDENTIAL_PLACEHOLDER$ dotnet dev-certs https --trust ``` > [!NOTE] -> The certificate name, in this case *aspnetapp*.pfx, must match the project assembly name. `$CREDENTIAL_PLACEHOLDER$` represents a password of your own choosing. If the console returns "A valid HTTPS certificate is already present.", a trusted certificate already exists in your store. You can export it using the MMC Console. +> The certificate name, in this case *AspNetCoreRazorApp*.pfx, must match the project assembly name. `$CREDENTIAL_PLACEHOLDER$` represents a password of your own choosing. If the console returns "A valid HTTPS certificate is already present.", a trusted certificate already exists in your store. You can export it using the MMC Console. > > In .NET 10 and later, if you run `dotnet dev-certs https --trust` inside a Windows Subsystem for Linux (WSL) instance, the command also trusts the certificate on the Windows host. > @@ -113,8 +121,8 @@ dotnet dev-certs https --trust Configure application secrets, for the certificate: ```console -dotnet user-secrets -p aspnetapp\aspnetapp.csproj init -dotnet user-secrets -p aspnetapp\aspnetapp.csproj set "Kestrel:Certificates:Development:Password" "$CREDENTIAL_PLACEHOLDER$" +dotnet user-secrets -p AspNetCoreRazorApp\AspNetCoreRazorApp.csproj init +dotnet user-secrets -p AspNetCoreRazorApp\AspNetCoreRazorApp.csproj set "Kestrel:Certificates:Development:Password" "$CREDENTIAL_PLACEHOLDER$" ``` > [!NOTE] @@ -133,7 +141,7 @@ Once the application starts, navigate to `https://localhost:8001` in your web br If the secrets and certificates aren't in use, be sure to clean them up. ```console -dotnet user-secrets remove "Kestrel:Certificates:Development:Password" -p aspnetapp\aspnetapp.csproj +dotnet user-secrets remove "Kestrel:Certificates:Development:Password" -p AspNetCoreRazorApp\AspNetCoreRazorApp.csproj dotnet dev-certs https --clean ``` diff --git a/docs/core/testing/unit-testing-mstest-getting-started.md b/docs/core/testing/unit-testing-mstest-getting-started.md index eae8d6ec40c4f..8bc75cadf9afb 100644 --- a/docs/core/testing/unit-testing-mstest-getting-started.md +++ b/docs/core/testing/unit-testing-mstest-getting-started.md @@ -92,6 +92,9 @@ The MSTest team maintains sample projects in the [microsoft/testfx repository](h | **Simple1** | Basic MSTest runner setup | [View on GitHub](https://github.com/microsoft/testfx/tree/main/samples/public/mstest-runner/Simple1) | | **DemoMSTestSdk** | MSTest SDK project setup | [View on GitHub](https://github.com/microsoft/testfx/tree/main/samples/public/DemoMSTestSdk) | | **BlankUwpNet9App** | UWP testing with .NET 9 | [View on GitHub](https://github.com/microsoft/testfx/tree/main/samples/public/BlankUwpNet9App) | -| **BlankWinUINet9App** | WinUI 3 testing with .NET 9 | [View on GitHub](https://github.com/microsoft/testfx/tree/main/samples/public/BlankWinUINet9App) | +| **UwpVSTestApp** | UWP testing with VSTest | [View on GitHub](https://github.com/microsoft/testfx/tree/main/samples/public/UwpVSTestApp) | +| **WinUIMtpPackagedApp** | Packaged WinUI 3 testing with Microsoft.Testing.Platform | [View on GitHub](https://github.com/microsoft/testfx/tree/main/samples/public/WinUIMtpPackagedApp) | +| **WinUIMtpUnpackagedApp** | Unpackaged WinUI 3 testing with Microsoft.Testing.Platform | [View on GitHub](https://github.com/microsoft/testfx/tree/main/samples/public/WinUIMtpUnpackagedApp) | +| **WinUIVSTestApp** | WinUI 3 testing with VSTest | [View on GitHub](https://github.com/microsoft/testfx/tree/main/samples/public/WinUIVSTestApp) | | **NativeAotRunner** | Native AOT compilation | [View on GitHub](https://github.com/microsoft/testfx/tree/main/samples/public/mstest-runner/NativeAotRunner) | | **RunInDocker** | Containerized test execution | [View on GitHub](https://github.com/microsoft/testfx/tree/main/samples/public/mstest-runner/RunInDocker) | diff --git a/docs/core/whats-new/dotnet-8/containers.md b/docs/core/whats-new/dotnet-8/containers.md index 4f76a4b1fe605..9f83d872e9c32 100644 --- a/docs/core/whats-new/dotnet-8/containers.md +++ b/docs/core/whats-new/dotnet-8/containers.md @@ -46,7 +46,7 @@ For more information, see [Debian container images upgraded to Debian 12](../../ Chiseled images do not support globalization, by default. [`extra`](https://github.com/dotnet/dotnet-docker/issues/5021) images are provided, which include `icu` and `tzdata` packages. -For more information on globalization and containers, see [Globalization Test App](https://github.com/dotnet/dotnet-docker/blob/main/samples/globalapp/README.md). +For more information on globalization and containers, see [Globalization Test App](https://github.com/dotnet/dotnet-docker/blob/main/samples/ConsoleAppWithGlobalization/README.md). ### Build multi-platform container images diff --git a/docs/standard/glossary.md b/docs/standard/glossary.md index c1e15fe1334f3..0a989043bc3bc 100644 --- a/docs/standard/glossary.md +++ b/docs/standard/glossary.md @@ -312,8 +312,6 @@ There are other shared frameworks. The *ASP.NET Core shared framework* refers to For [framework-dependent apps](../core/deploying/index.md#publish-as-framework-dependent), the shared framework consists of libraries that are contained in assemblies installed in a folder on the machine that runs the app. For [self-contained apps](../core/deploying/index.md#publish-as-self-contained), the shared framework assemblies are included with the app. -For more information, see [Deep-dive into .NET Core primitives, part 2: the shared framework](https://natemcmaster.com/blog/2018/08/29/netcore-primitives-2/). - ## stack A set of programming technologies that are used together to build and run applications. From 3a2a9bcd48121e1db1ea414d38b9f336533b0c92 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Wed, 23 Sep 2026 12:33:29 -0700 Subject: [PATCH 04/24] remove any possible overlap with orleans snipeets (#56224) --- .github/dependabot.yml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 10a155ef03d49..67e79c149a65a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -59,12 +59,18 @@ updates: nuget: patterns: ["*"] group-by: dependency-name - # NuGet updates for non-V3 Orleans snippets. + # NuGet updates for Orleans snippets. - package-ecosystem: "nuget" directories: - - "docs/orleans/**/snippets/**/*" - exclude-paths: - - "docs/orleans/**/snippets-v3/**/*" + - "docs/orleans/deployment/snippets/**" + - "docs/orleans/grains/snippets/**" + - "docs/orleans/grains/grain-persistence/snippets/**" + - "docs/orleans/host/snippets/**" + - "docs/orleans/host/configuration-guide/snippets/**" + - "docs/orleans/implementation/snippets/**" + - "docs/orleans/quickstarts/snippets/**" + - "docs/orleans/streaming/snippets/**" + - "docs/orleans/tutorials-and-samples/snippets/**" schedule: interval: "weekly" open-pull-requests-limit: 5 @@ -77,9 +83,12 @@ updates: # NuGet updates for Orleans V3 snippets. - package-ecosystem: "nuget" directories: - - "docs/orleans/**/snippets-v3/**/*" - exclude-paths: - - "docs/orleans/**/snippets/**/*" + - "docs/orleans/snippets-v3/**" + - "docs/orleans/grains/snippets-v3/**" + - "docs/orleans/host/snippets-v3/**" + - "docs/orleans/host/configuration-guide/snippets-v3/**" + - "docs/orleans/streaming/snippets-v3/**" + - "docs/orleans/tutorials-and-samples/snippets-v3/**" schedule: interval: "weekly" open-pull-requests-limit: 5 From be82fc996d1237b3876b1cddaa4ada520ef036ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Sep 2026 19:57:14 +0000 Subject: [PATCH 05/24] Bump the nuget group with 10 updates (#56226) Bumps Azure.Identity from 1.17.0 to 1.21.0 Bumps MessagePack from 3.1.7 to 3.1.8 Bumps Microsoft.Extensions.Hosting to 10.0.5, 10.0.12 Bumps Microsoft.Extensions.Logging.Abstractions to 10.0.12 Bumps Microsoft.Extensions.Logging.Console to 10.0.12 Bumps Microsoft.Orleans.Client from 10.0.0 to 10.3.1 Bumps Microsoft.Orleans.Sdk from 10.0.0 to 10.3.1 Bumps Microsoft.Orleans.Serialization.MessagePack from 10.0.0 to 10.3.1 Bumps Microsoft.Orleans.Server from 10.0.0 to 10.3.1 Bumps Microsoft.ServiceFabric.Services from 8.7.157 to 8.8.121 --- updated-dependencies: - dependency-name: Microsoft.ServiceFabric.Services dependency-version: 8.8.121 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Azure.Identity dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Azure.Identity dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: MessagePack dependency-version: 3.1.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Orleans.Serialization.MessagePack dependency-version: 10.3.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Hosting dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Azure.Identity dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Hosting dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Orleans.Client dependency-version: 10.3.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Orleans.Sdk dependency-version: 10.3.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Orleans.Server dependency-version: 10.3.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.ServiceFabric.Services ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/orleans/Directory.Build.props | 2 +- .../stateless/Orleans.ServiceFabric.Stateless.csproj | 2 +- .../snippets/persistence/persistence.csproj | 2 +- .../grains/snippets/interceptors/interceptors.csproj | 2 +- docs/orleans/grains/snippets/timers/Timers.csproj | 2 +- .../transactions/Abstractions/Abstractions.csproj | 2 +- .../grains/snippets/transactions/Client/Client.csproj | 2 +- .../grains/snippets/transactions/Server/Server.csproj | 2 +- .../snippets/serialization/serialization.csproj | 4 ++-- .../BroadcastChannel.Silo/BroadcastChannel.Silo.csproj | 2 +- .../orleans/streaming/snippets/streaming/streaming.csproj | 2 +- .../snippets/helloworld/helloworld.csproj | 8 ++++---- .../snippets/minimal/Client/Client.csproj | 2 +- .../minimal/GrainInterfaces/GrainInterfaces.csproj | 4 ++-- .../snippets/minimal/Grains/Grains.csproj | 2 +- .../snippets/minimal/Silo/Silo.csproj | 4 ++-- 16 files changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/orleans/Directory.Build.props b/docs/orleans/Directory.Build.props index 63250006d6f69..e1e1c513ccc48 100644 --- a/docs/orleans/Directory.Build.props +++ b/docs/orleans/Directory.Build.props @@ -18,6 +18,6 @@ - + diff --git a/docs/orleans/deployment/snippets/service-fabric/stateless/Orleans.ServiceFabric.Stateless.csproj b/docs/orleans/deployment/snippets/service-fabric/stateless/Orleans.ServiceFabric.Stateless.csproj index cfc70bf94d178..acbd2e5b5d5e5 100644 --- a/docs/orleans/deployment/snippets/service-fabric/stateless/Orleans.ServiceFabric.Stateless.csproj +++ b/docs/orleans/deployment/snippets/service-fabric/stateless/Orleans.ServiceFabric.Stateless.csproj @@ -10,7 +10,7 @@ - + diff --git a/docs/orleans/grains/grain-persistence/snippets/persistence/persistence.csproj b/docs/orleans/grains/grain-persistence/snippets/persistence/persistence.csproj index 041194544a41a..558e3720d33d5 100644 --- a/docs/orleans/grains/grain-persistence/snippets/persistence/persistence.csproj +++ b/docs/orleans/grains/grain-persistence/snippets/persistence/persistence.csproj @@ -10,7 +10,7 @@ - + diff --git a/docs/orleans/grains/snippets/interceptors/interceptors.csproj b/docs/orleans/grains/snippets/interceptors/interceptors.csproj index 03f4b58500ef7..1c385f3dd5f93 100644 --- a/docs/orleans/grains/snippets/interceptors/interceptors.csproj +++ b/docs/orleans/grains/snippets/interceptors/interceptors.csproj @@ -7,7 +7,7 @@ - + diff --git a/docs/orleans/grains/snippets/timers/Timers.csproj b/docs/orleans/grains/snippets/timers/Timers.csproj index eca5d62d1da9a..a18401be7a3e6 100644 --- a/docs/orleans/grains/snippets/timers/Timers.csproj +++ b/docs/orleans/grains/snippets/timers/Timers.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/orleans/grains/snippets/transactions/Abstractions/Abstractions.csproj b/docs/orleans/grains/snippets/transactions/Abstractions/Abstractions.csproj index fb6b60ffaf8d6..c7521d55056b6 100644 --- a/docs/orleans/grains/snippets/transactions/Abstractions/Abstractions.csproj +++ b/docs/orleans/grains/snippets/transactions/Abstractions/Abstractions.csproj @@ -2,7 +2,7 @@ - + diff --git a/docs/orleans/grains/snippets/transactions/Client/Client.csproj b/docs/orleans/grains/snippets/transactions/Client/Client.csproj index ca401486ad162..befbf9407b7c5 100644 --- a/docs/orleans/grains/snippets/transactions/Client/Client.csproj +++ b/docs/orleans/grains/snippets/transactions/Client/Client.csproj @@ -6,7 +6,7 @@ - + diff --git a/docs/orleans/grains/snippets/transactions/Server/Server.csproj b/docs/orleans/grains/snippets/transactions/Server/Server.csproj index 0c6f1c0c6610b..3aeaa1eab2884 100644 --- a/docs/orleans/grains/snippets/transactions/Server/Server.csproj +++ b/docs/orleans/grains/snippets/transactions/Server/Server.csproj @@ -6,7 +6,7 @@ - + diff --git a/docs/orleans/host/configuration-guide/snippets/serialization/serialization.csproj b/docs/orleans/host/configuration-guide/snippets/serialization/serialization.csproj index 229f0176d01bd..c78ac6149f327 100644 --- a/docs/orleans/host/configuration-guide/snippets/serialization/serialization.csproj +++ b/docs/orleans/host/configuration-guide/snippets/serialization/serialization.csproj @@ -8,9 +8,9 @@ - + - + diff --git a/docs/orleans/streaming/snippets/broadcastchannel/BroadcastChannel.Silo/BroadcastChannel.Silo.csproj b/docs/orleans/streaming/snippets/broadcastchannel/BroadcastChannel.Silo/BroadcastChannel.Silo.csproj index 1a5e99d040d54..a2b69c20b8207 100644 --- a/docs/orleans/streaming/snippets/broadcastchannel/BroadcastChannel.Silo/BroadcastChannel.Silo.csproj +++ b/docs/orleans/streaming/snippets/broadcastchannel/BroadcastChannel.Silo/BroadcastChannel.Silo.csproj @@ -6,7 +6,7 @@ - + diff --git a/docs/orleans/streaming/snippets/streaming/streaming.csproj b/docs/orleans/streaming/snippets/streaming/streaming.csproj index ca8b70fe10423..81d497c144790 100644 --- a/docs/orleans/streaming/snippets/streaming/streaming.csproj +++ b/docs/orleans/streaming/snippets/streaming/streaming.csproj @@ -9,7 +9,7 @@ - + diff --git a/docs/orleans/tutorials-and-samples/snippets/helloworld/helloworld.csproj b/docs/orleans/tutorials-and-samples/snippets/helloworld/helloworld.csproj index 01bffa6409f5a..f5ac9263d32ff 100644 --- a/docs/orleans/tutorials-and-samples/snippets/helloworld/helloworld.csproj +++ b/docs/orleans/tutorials-and-samples/snippets/helloworld/helloworld.csproj @@ -1,10 +1,10 @@ - - - - + + + + diff --git a/docs/orleans/tutorials-and-samples/snippets/minimal/Client/Client.csproj b/docs/orleans/tutorials-and-samples/snippets/minimal/Client/Client.csproj index 545367a09ad47..c570d477fa55b 100644 --- a/docs/orleans/tutorials-and-samples/snippets/minimal/Client/Client.csproj +++ b/docs/orleans/tutorials-and-samples/snippets/minimal/Client/Client.csproj @@ -6,7 +6,7 @@ - + diff --git a/docs/orleans/tutorials-and-samples/snippets/minimal/GrainInterfaces/GrainInterfaces.csproj b/docs/orleans/tutorials-and-samples/snippets/minimal/GrainInterfaces/GrainInterfaces.csproj index 7f6e195291396..6808d2025eade 100644 --- a/docs/orleans/tutorials-and-samples/snippets/minimal/GrainInterfaces/GrainInterfaces.csproj +++ b/docs/orleans/tutorials-and-samples/snippets/minimal/GrainInterfaces/GrainInterfaces.csproj @@ -2,8 +2,8 @@ - - + + diff --git a/docs/orleans/tutorials-and-samples/snippets/minimal/Grains/Grains.csproj b/docs/orleans/tutorials-and-samples/snippets/minimal/Grains/Grains.csproj index fd52bbdbf751b..39ffbbef3c3c3 100644 --- a/docs/orleans/tutorials-and-samples/snippets/minimal/Grains/Grains.csproj +++ b/docs/orleans/tutorials-and-samples/snippets/minimal/Grains/Grains.csproj @@ -2,7 +2,7 @@ - + diff --git a/docs/orleans/tutorials-and-samples/snippets/minimal/Silo/Silo.csproj b/docs/orleans/tutorials-and-samples/snippets/minimal/Silo/Silo.csproj index 9ceb56789cc72..e841b0f844803 100644 --- a/docs/orleans/tutorials-and-samples/snippets/minimal/Silo/Silo.csproj +++ b/docs/orleans/tutorials-and-samples/snippets/minimal/Silo/Silo.csproj @@ -6,8 +6,8 @@ - - + + From 106598892634d0c060e07cb2c86cec0ca5044000 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Wed, 23 Sep 2026 13:42:02 -0700 Subject: [PATCH 06/24] fix compile errors (#56228) --- .../snippets-v3/code-generation/code-generation.csproj | 8 ++++---- .../grains/snippets-v3/grainservices/grainservices.csproj | 6 +++--- .../snippets-v3/client-config/client-config.csproj | 6 +++--- .../snippets-v3/local-dev/local-dev.csproj | 6 +++--- .../snippets-v3/server-config/server-config.csproj | 6 +++--- docs/orleans/host/snippets-v3/client/client.csproj | 6 +++--- docs/orleans/snippets-v3/helloworld/helloworld.csproj | 6 +++--- .../streams-quickstart/streams-quickstart.csproj | 6 +++--- .../snippets-v3/custom-storage/custom-storage.csproj | 4 ++-- 9 files changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/orleans/grains/snippets-v3/code-generation/code-generation.csproj b/docs/orleans/grains/snippets-v3/code-generation/code-generation.csproj index 63d938601be2e..d11fdee3a0827 100644 --- a/docs/orleans/grains/snippets-v3/code-generation/code-generation.csproj +++ b/docs/orleans/grains/snippets-v3/code-generation/code-generation.csproj @@ -8,10 +8,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/docs/orleans/grains/snippets-v3/grainservices/grainservices.csproj b/docs/orleans/grains/snippets-v3/grainservices/grainservices.csproj index c6640cb63d2d9..09dde0ce65989 100644 --- a/docs/orleans/grains/snippets-v3/grainservices/grainservices.csproj +++ b/docs/orleans/grains/snippets-v3/grainservices/grainservices.csproj @@ -8,9 +8,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/docs/orleans/host/configuration-guide/snippets-v3/client-config/client-config.csproj b/docs/orleans/host/configuration-guide/snippets-v3/client-config/client-config.csproj index 6ff352c8a8d6d..9c1c0dd4a1908 100644 --- a/docs/orleans/host/configuration-guide/snippets-v3/client-config/client-config.csproj +++ b/docs/orleans/host/configuration-guide/snippets-v3/client-config/client-config.csproj @@ -9,9 +9,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/docs/orleans/host/configuration-guide/snippets-v3/local-dev/local-dev.csproj b/docs/orleans/host/configuration-guide/snippets-v3/local-dev/local-dev.csproj index da5a7b39ff4db..c78120da380b8 100644 --- a/docs/orleans/host/configuration-guide/snippets-v3/local-dev/local-dev.csproj +++ b/docs/orleans/host/configuration-guide/snippets-v3/local-dev/local-dev.csproj @@ -9,9 +9,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/docs/orleans/host/configuration-guide/snippets-v3/server-config/server-config.csproj b/docs/orleans/host/configuration-guide/snippets-v3/server-config/server-config.csproj index 2aca6d47839d1..63e1736b6911a 100644 --- a/docs/orleans/host/configuration-guide/snippets-v3/server-config/server-config.csproj +++ b/docs/orleans/host/configuration-guide/snippets-v3/server-config/server-config.csproj @@ -9,9 +9,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/docs/orleans/host/snippets-v3/client/client.csproj b/docs/orleans/host/snippets-v3/client/client.csproj index a35e3aefe3e4c..e5c193bf4ae32 100644 --- a/docs/orleans/host/snippets-v3/client/client.csproj +++ b/docs/orleans/host/snippets-v3/client/client.csproj @@ -9,9 +9,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/docs/orleans/snippets-v3/helloworld/helloworld.csproj b/docs/orleans/snippets-v3/helloworld/helloworld.csproj index 0fe82b6d1222d..d0897e3ebd663 100644 --- a/docs/orleans/snippets-v3/helloworld/helloworld.csproj +++ b/docs/orleans/snippets-v3/helloworld/helloworld.csproj @@ -6,9 +6,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/docs/orleans/streaming/snippets-v3/streams-quickstart/streams-quickstart.csproj b/docs/orleans/streaming/snippets-v3/streams-quickstart/streams-quickstart.csproj index c3c36aea7e9ec..593c678608447 100644 --- a/docs/orleans/streaming/snippets-v3/streams-quickstart/streams-quickstart.csproj +++ b/docs/orleans/streaming/snippets-v3/streams-quickstart/streams-quickstart.csproj @@ -9,9 +9,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/docs/orleans/tutorials-and-samples/snippets-v3/custom-storage/custom-storage.csproj b/docs/orleans/tutorials-and-samples/snippets-v3/custom-storage/custom-storage.csproj index 692535cc095dc..7c5ca9d843211 100644 --- a/docs/orleans/tutorials-and-samples/snippets-v3/custom-storage/custom-storage.csproj +++ b/docs/orleans/tutorials-and-samples/snippets-v3/custom-storage/custom-storage.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 2611f0d3666a4c813d5f9e78d464f1da7a559d5d Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Wed, 23 Sep 2026 13:56:07 -0700 Subject: [PATCH 07/24] Delete archaic Windows 8.x Store example (#56229) --- .../reflection-for-windows-store-apps.md | 21 +- .../system.reflectionwinstoreapp/cs/app.xaml | 20 - .../cs/app.xaml.cs | 90 - .../cs/assets/logo.png | Bin 801 -> 0 bytes .../cs/assets/smalllogo.png | Bin 329 -> 0 bytes .../cs/assets/splashscreen.png | Bin 2146 -> 0 bytes .../cs/assets/storelogo.png | Bin 429 -> 0 bytes .../cs/mainpage.xaml | 14 - .../cs/mainpage.xaml.cs | 47 - .../cs/package.appxmanifest | 42 - .../cs/properties/assemblyinfo.cs | 29 - .../cs/reflection.csproj | 146 -- .../system.reflectionwinstoreapp/vb/app.xaml | 20 - .../vb/app.xaml.vb | 56 - .../vb/assets/logo.png | Bin 801 -> 0 bytes .../vb/assets/smalllogo.png | Bin 329 -> 0 bytes .../vb/assets/splashscreen.png | Bin 2146 -> 0 bytes .../vb/assets/storelogo.png | Bin 429 -> 0 bytes .../vb/common/standardstyles.xaml | 1829 ----------------- .../vb/mainpage.xaml | 14 - .../vb/mainpage.xaml.vb | 32 - .../vb/my project/assemblyinfo.vb | 30 - .../vb/package.appxmanifest | 42 - .../vb/reflectionvb.vbproj | 199 -- 24 files changed, 7 insertions(+), 2624 deletions(-) delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/app.xaml delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/app.xaml.cs delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/assets/logo.png delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/assets/smalllogo.png delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/assets/splashscreen.png delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/assets/storelogo.png delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/mainpage.xaml delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/mainpage.xaml.cs delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/package.appxmanifest delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/properties/assemblyinfo.cs delete mode 100644 samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/reflection.csproj delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/app.xaml delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/app.xaml.vb delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/assets/logo.png delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/assets/smalllogo.png delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/assets/splashscreen.png delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/assets/storelogo.png delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/common/standardstyles.xaml delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/mainpage.xaml delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/mainpage.xaml.vb delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/my project/assemblyinfo.vb delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/package.appxmanifest delete mode 100644 samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/reflectionvb.vbproj diff --git a/docs/framework/reflection-and-codedom/reflection-for-windows-store-apps.md b/docs/framework/reflection-and-codedom/reflection-for-windows-store-apps.md index dcf154c2e9312..adfc2e2bbbcb6 100644 --- a/docs/framework/reflection-and-codedom/reflection-for-windows-store-apps.md +++ b/docs/framework/reflection-and-codedom/reflection-for-windows-store-apps.md @@ -10,34 +10,27 @@ helpviewer_keywords: - ".NET for Windows Store apps, TypeInfo class" ms.assetid: 0d07090c-9b47-4ecc-81d1-29d539603c9b --- -# Reflection in the .NET Framework for Windows Store Apps +# Reflection in .NET Framework for Windows Store Apps .NET Framework includes a set of reflection types and members for use in Windows 8.x Store apps. These types and members are available in the full .NET Framework and in .NET for Windows Store apps. This article explains the major differences between these and their counterparts in .NET Framework 4 and earlier versions. - If you are creating a Windows 8.x Store app, you must use the reflection types and members in the .NET for Windows 8.x Store apps. These types and members are also available, but not required, for use in desktop apps, so you can use the same code for both types of apps. +If you are creating a Windows 8.x Store app, you must use the reflection types and members in .NET for Windows 8.x Store apps. These types and members are also available, but not required, for use in desktop apps, so you can use the same code for both types of apps. ## TypeInfo and Assembly Loading - In the .NET for Windows 8.x Store apps, the class contains some of the functionality of the .NET Framework 4 class. A object represents a reference to a type definition, whereas a object represents the type definition itself. This enables you to manipulate objects without necessarily requiring the runtime to load the assembly they reference. Getting the associated object forces the assembly to load. +In .NET for Windows 8.x Store apps, the class contains some of the functionality of the .NET Framework 4 class. A object represents a reference to a type definition, whereas a object represents the type definition itself. This enables you to manipulate objects without necessarily requiring the runtime to load the assembly they reference. Getting the associated object forces the assembly to load. - contains many of the members available on , and many of the reflection properties in the .NET for Windows 8.x Store apps return collections of objects. To get a object from a object, use the method. + contains many of the members available on , and many of the reflection properties in .NET for Windows 8.x Store apps return collections of objects. To get a object from a object, use the method. ## Query Methods - In the .NET for Windows 8.x Store apps, you use the reflection properties that return collections instead of methods that return arrays. Reflection contexts can implement lazy traversal of these collections for large assemblies or types. +In .NET for Windows 8.x Store apps, you use the reflection properties that return collections instead of methods that return arrays. Reflection contexts can implement lazy traversal of these collections for large assemblies or types. - The reflection properties return only the declared methods on a particular object instead of traversing the inheritance tree. Moreover, they do not use parameters for filtering. Instead, filtering takes place in user code, by using LINQ queries on the returned collections. For reflection objects that originate with the runtime (for example, as the result of `typeof(Object)`), traversing the inheritance tree is best accomplished by using the helper methods of the class. Consumers of objects from customized reflection contexts cannot use these methods, and must traverse the inheritance tree themselves. +The reflection properties return only the declared methods on a particular object instead of traversing the inheritance tree. Moreover, they do not use parameters for filtering. Instead, filtering takes place in user code, by using LINQ queries on the returned collections. For reflection objects that originate with the runtime (for example, as the result of `typeof(Object)`), traversing the inheritance tree is best accomplished by using the helper methods of the class. Consumers of objects from customized reflection contexts cannot use these methods, and must traverse the inheritance tree themselves. ## Restrictions - In a Windows 8.x Store app, access to some .NET Framework types and members is restricted. For example, you cannot call .NET Framework methods that are not included in .NET for Windows 8.x Store apps, by using a object. In addition, certain types and members that are not considered safe within the context of a Windows 8.x Store app are blocked, as are and members. This restriction affects only .NET Framework types and members; you can call your code or third-party code as you normally would. - -## Example - - This example uses the reflection types and members in the .NET for Windows 8.x Store apps to retrieve the methods and properties of the type, including inherited methods and properties. To run this code, paste it into the code file for a Windows 8.x Store page that contains a control named `textblock1` in a project named Reflection. If you paste this code inside a project with a different name, just make sure you change the namespace name to match your project. - - [!code-csharp[System.ReflectionWinStoreApp#1](../../../samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/mainpage.xaml.cs#1)] - [!code-vb[System.ReflectionWinStoreApp#1](../../../samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/mainpage.xaml.vb#1)] +In a Windows 8.x Store app, access to some .NET Framework types and members is restricted. For example, you can't call .NET Framework methods that aren't included in .NET for Windows 8.x Store apps, by using a object. In addition, certain types and members that aren't considered safe within the context of a Windows 8.x Store app are blocked, as are and members. This restriction affects only .NET Framework types and members; you can call your code or third-party code as you normally would. ## See also diff --git a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/app.xaml b/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/app.xaml deleted file mode 100644 index abd4a2f49c5da..0000000000000 --- a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/app.xaml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - diff --git a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/app.xaml.cs b/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/app.xaml.cs deleted file mode 100644 index be5e996ce50aa..0000000000000 --- a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/app.xaml.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Windows.ApplicationModel; -using Windows.ApplicationModel.Activation; -using Windows.Foundation; -using Windows.Foundation.Collections; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Controls.Primitives; -using Windows.UI.Xaml.Data; -using Windows.UI.Xaml.Input; -using Windows.UI.Xaml.Media; -using Windows.UI.Xaml.Navigation; - -// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227 - -namespace Reflection -{ - /// - /// Provides application-specific behavior to supplement the default Application class. - /// - sealed partial class App : Application - { - /// - /// Initializes the singleton application object. This is the first line of authored code - /// executed, and as such is the logical equivalent of main() or WinMain(). - /// - public App() - { - this.InitializeComponent(); - this.Suspending += OnSuspending; - } - - /// - /// Invoked when the application is launched normally by the end user. Other entry points - /// will be used when the application is launched to open a specific file, to display - /// search results, and so forth. - /// - /// Details about the launch request and process. - protected override void OnLaunched(LaunchActivatedEventArgs args) - { - Frame rootFrame = Window.Current.Content as Frame; - - // Do not repeat app initialization when the Window already has content, - // just ensure that the window is active - if (rootFrame == null) - { - // Create a Frame to act as the navigation context and navigate to the first page - rootFrame = new Frame(); - - if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) - { - //TODO: Load state from previously suspended application - } - - // Place the frame in the current Window - Window.Current.Content = rootFrame; - } - - if (rootFrame.Content == null) - { - // When the navigation stack isn't restored navigate to the first page, - // configuring the new page by passing required information as a navigation - // parameter - if (!rootFrame.Navigate(typeof(MainPage), args.Arguments)) - { - throw new Exception("Failed to create initial page"); - } - } - // Ensure the current window is active - Window.Current.Activate(); - } - - /// - /// Invoked when application execution is being suspended. Application state is saved - /// without knowing whether the application will be terminated or resumed with the contents - /// of memory still intact. - /// - /// The source of the suspend request. - /// Details about the suspend request. - private void OnSuspending(object sender, SuspendingEventArgs e) - { - var deferral = e.SuspendingOperation.GetDeferral(); - //TODO: Save application state and stop any background activity - deferral.Complete(); - } - } -} diff --git a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/assets/logo.png b/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/assets/logo.png deleted file mode 100644 index e26771cb33a49bbef824aa333737181b0a5b09a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 801 zcmeAS@N?(olHy`uVBq!ia0vp^(?FPm4M^HB7Cr(}k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m=1foIEGZ*dUJQLud<^=L*gE#63Ho!PGzwUb%GPK6&5iF zt!p@aGNX}6(PVh|N)M-?0RNcTbjaWgEU8noxUax-n>&3Ay)#!y&O11y2sKEF zt72@XC1)RvT6Xw=y_`Ce)`nGULLL^lI$kwi^E+dQT7YeXY4GvlRR%kj1x$VZi%Bdd zz}2Giy=-_$h+v#(S+};)DuE4EM?_^qB_eDeo@&q%StD1F>L|*0ZC2sb-}llSMTM?O z6{b3iid~yk@VE7q7Wb+P8?H5IYp?pSVcLE~18m#ygK20HL@6W5woI~Fjlw$fX1U{xQA5a+t0 zH$WNIb=fNpWHo}M9#;K6eszDZKty_|-?j4iocj5#zotrWc;@;w`H@=mjsvS2wXX0_ zY}l$4@^sE?UcC)ji*L=Z&}P!xaL&2((OQlj2dv~pV-ifAS;ZsH1{`D!GY%yys5WH)f>ZLo5m%6XjuXdbKMR7MEHSyb{m!_{Afji&MT$_sz7 z>1{~MlIFe28FRN(GC_~;#Jp4ADipP+9hh|P#-&`vO-Upt3jE0@YLh(^55uYWl9g)Z RA3>Rb!PC{xWt~$(69A&hN*MqE diff --git a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/assets/smalllogo.png b/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/assets/smalllogo.png deleted file mode 100644 index 1eb0d9d528c42f132872e8af4dc563081b0b9aff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmV-P0k-~$P)q$gGRCwC#*X;?zAP@%N+|i#I!$mrh zlQ>KU$Rdu>|JH&931_?y6Djl{gb>4nCV5pzDJ?S!mq|4ZejKj%i@j$H{#ML~2Y{DF z$=}bKPaz+UGt{v(4CTQQXym}&iW8{s!ew~XIE7NLjQpy#I2S$rous$~?f%DHT#B*+ zq=#!zc5=0FEqWFpB%UE(L807on!pidHPLgYO}XEgorrg;PB=8ipgQ5u5`&g_MQaRd zaU7Ao8XQMuuN21-s0PPTs1%38x_Yl3Fs-|Y4!C-;M-8g@n*v@1|s#GQ665=9@Rxy?u0YW0&WN+~=RXpPbVXXL4m7Aq=E6I0%{06TwRn=U9d8>exk> zD-Z%M3DNQ`bTLSEF=%NFyoHcAkD*CiXqljo*0E?o$GiDC4q}}|%*0WghLlK#npw?hecrM}Mw?`E(z5C8< z8&*b^!{>5?4aT89vdrgBgSc-x6JZD3F^l#*G(@OO*^1D%Eu7?HAy<3kTLqW9N{^#6vso zVQwY48q7)m{~xQ64RV7{E7Y=&T~?^05Ky`5oNQ8bLgFCPq9co^R09BVRS1OAmH;hU zC#q(N!gNqm!zU#%sv{r5mm-Uv8b-~a1F-;p^>)pnXfKge4s9?;;MFIr*fixPG}NBA z6_G5BEmeO6XXh(emkciB{7tA;iwC2^s^VzyU_h0@ae84ACMY`cIDEju=<`q|2QAEv zW_)W|i|9aknqdmS=#w73eW_csQ$8IhT^vY1^1;X3&J0{%*tcQq!gJpr3w?TJc~@5= zKV5sM{$3k>b#S$@CTkhIF*{v*u(F&$&Yq1naHxt8Mz2N%7aQ3(^VNRZahk1||7?Bl z*idzO_u)FhRj4cPzDO>YA>>lxAGaciEiX8Xzp1SVPv91};$OG3cC&8!v3{Jq^kH@8 UTIccK;hzT5*3#}uZuEx!0OwrBv;Y7A diff --git a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/assets/storelogo.png b/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/assets/storelogo.png deleted file mode 100644 index dcb672712c6823a0c91548ded70a8acb85536b4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 429 zcmV;e0aE^nP)NtYJa1l)bQ5qwGXpZbs7%2oRMd4y35$s&66(fxhNg8W02!vSn zdlrL2h^Fx+3=$z;kK{0D#MyeJ8WRWZcLSf(PcQ_mLOhrmC}O-tX^0c>5`YvCUZVsc zG-6#78ubjJ5nA;OX&^K(q=i6ZNE3m?kTwE^AqxZoLskfB3|S&1F=UO9!cY$g2@Lgu z;9{sJ1P9|X2L`r1#Gs8R{E^$PRrMaC86q| - - - - - diff --git a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/mainpage.xaml.cs b/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/mainpage.xaml.cs deleted file mode 100644 index b754e1f939c7a..0000000000000 --- a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/mainpage.xaml.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Controls.Primitives; -using Windows.UI.Xaml.Navigation; -using System.Reflection; -using System.Globalization; -using System.Text; - -namespace Reflection -{ - public sealed partial class MainPage : Page - { - public MainPage() - { - this.InitializeComponent(); - } - - protected override void OnNavigatedTo(NavigationEventArgs e) - { - TypeInfo t = typeof(Calendar).GetTypeInfo(); - IEnumerable pList = t.DeclaredProperties; - IEnumerable mList = t.DeclaredMethods; - - StringBuilder sb = new StringBuilder(); - - sb.Append("Properties:"); - foreach (PropertyInfo p in pList) - { - - sb.Append("\n" + p.DeclaringType.Name + ": " + p.Name); - } - sb.Append("\nMethods:"); - foreach (MethodInfo m in mList) - { - sb.Append("\n" + m.DeclaringType.Name + ": " + m.Name); - } - - textblock1.Text = sb.ToString(); - } - } -} -// diff --git a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/package.appxmanifest b/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/package.appxmanifest deleted file mode 100644 index cf5eb3f64f05b..0000000000000 --- a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/package.appxmanifest +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - Reflection - cherylsi - Assets\StoreLogo.png - - - - 6.2.1 - 6.2.1 - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/properties/assemblyinfo.cs b/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/properties/assemblyinfo.cs deleted file mode 100644 index 3882c1811814b..0000000000000 --- a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/properties/assemblyinfo.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Reflection")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Reflection")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: ComVisible(false)] \ No newline at end of file diff --git a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/reflection.csproj b/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/reflection.csproj deleted file mode 100644 index 327f8108e56fd..0000000000000 --- a/samples/snippets/csharp/VS_Snippets_CLR_System/system.reflectionwinstoreapp/cs/reflection.csproj +++ /dev/null @@ -1,146 +0,0 @@ - - - - - Debug - AnyCPU - {86FDB68F-CE0A-4AB4-A6C6-6EADC25A4C01} - AppContainerExe - Properties - Reflection - Reflection - en-US - 512 - {BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE;NETFX_CORE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE;NETFX_CORE - prompt - 4 - - - true - bin\ARM\Debug\ - DEBUG;TRACE;NETFX_CORE - ;2008 - full - ARM - false - prompt - true - - - bin\ARM\Release\ - TRACE;NETFX_CORE - true - ;2008 - pdbonly - ARM - false - prompt - true - - - true - bin\x64\Debug\ - DEBUG;TRACE;NETFX_CORE - ;2008 - full - x64 - false - prompt - true - - - bin\x64\Release\ - TRACE;NETFX_CORE - true - ;2008 - pdbonly - x64 - false - prompt - true - - - true - bin\x86\Debug\ - DEBUG;TRACE;NETFX_CORE - ;2008 - full - x86 - false - prompt - true - - - bin\x86\Release\ - TRACE;NETFX_CORE - true - ;2008 - pdbonly - x86 - false - prompt - true - - - - App.xaml - - - MainPage.xaml - - - - - - Designer - - - - - - - - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - - 11.0 - - - - diff --git a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/app.xaml b/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/app.xaml deleted file mode 100644 index 8e66412fd17d3..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/app.xaml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - diff --git a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/app.xaml.vb b/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/app.xaml.vb deleted file mode 100644 index d4d3375586015..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/app.xaml.vb +++ /dev/null @@ -1,56 +0,0 @@ -' The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227 - -''' -''' Provides application-specific behavior to supplement the default Application class. -''' -NotInheritable Class App - Inherits Application - - ''' - ''' Invoked when the application is launched normally by the end user. Other entry points - ''' will be used when the application is launched to open a specific file, to display - ''' search results, and so forth. - ''' - ''' Details about the launch request and process. - Protected Overrides Sub OnLaunched(args As Windows.ApplicationModel.Activation.LaunchActivatedEventArgs) - Dim rootFrame As Frame = Window.Current.Content - - ' Do not repeat app initialization when the Window already has content, - ' just ensure that the window is active - - If rootFrame Is Nothing Then - ' Create a Frame to act as the navigation context and navigate to the first page - rootFrame = New Frame() - If args.PreviousExecutionState = ApplicationExecutionState.Terminated Then - ' TODO: Load state from previously suspended application - End If - ' Place the frame in the current Window - Window.Current.Content = rootFrame - End If - If rootFrame.Content Is Nothing Then - ' When the navigation stack isn't restored navigate to the first page, - ' configuring the new page by passing required information as a navigation - ' parameter - If Not rootFrame.Navigate(GetType(MainPage), args.Arguments) Then - Throw New Exception("Failed to create initial page") - End If - End If - - ' Ensure the current window is active - Window.Current.Activate() - End Sub - - ''' - ''' Invoked when application execution is being suspended. Application state is saved - ''' without knowing whether the application will be terminated or resumed with the contents - ''' of memory still intact. - ''' - ''' The source of the suspend request. - ''' Details about the suspend request. - Private Sub OnSuspending(sender As Object, e As SuspendingEventArgs) Handles Me.Suspending - Dim deferral As SuspendingDeferral = e.SuspendingOperation.GetDeferral() - ' TODO: Save application state and stop any background activity - deferral.Complete() - End Sub - -End Class diff --git a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/assets/logo.png b/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/assets/logo.png deleted file mode 100644 index e26771cb33a49bbef824aa333737181b0a5b09a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 801 zcmeAS@N?(olHy`uVBq!ia0vp^(?FPm4M^HB7Cr(}k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m=1foIEGZ*dUJQLud<^=L*gE#63Ho!PGzwUb%GPK6&5iF zt!p@aGNX}6(PVh|N)M-?0RNcTbjaWgEU8noxUax-n>&3Ay)#!y&O11y2sKEF zt72@XC1)RvT6Xw=y_`Ce)`nGULLL^lI$kwi^E+dQT7YeXY4GvlRR%kj1x$VZi%Bdd zz}2Giy=-_$h+v#(S+};)DuE4EM?_^qB_eDeo@&q%StD1F>L|*0ZC2sb-}llSMTM?O z6{b3iid~yk@VE7q7Wb+P8?H5IYp?pSVcLE~18m#ygK20HL@6W5woI~Fjlw$fX1U{xQA5a+t0 zH$WNIb=fNpWHo}M9#;K6eszDZKty_|-?j4iocj5#zotrWc;@;w`H@=mjsvS2wXX0_ zY}l$4@^sE?UcC)ji*L=Z&}P!xaL&2((OQlj2dv~pV-ifAS;ZsH1{`D!GY%yys5WH)f>ZLo5m%6XjuXdbKMR7MEHSyb{m!_{Afji&MT$_sz7 z>1{~MlIFe28FRN(GC_~;#Jp4ADipP+9hh|P#-&`vO-Upt3jE0@YLh(^55uYWl9g)Z RA3>Rb!PC{xWt~$(69A&hN*MqE diff --git a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/assets/smalllogo.png b/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/assets/smalllogo.png deleted file mode 100644 index 1eb0d9d528c42f132872e8af4dc563081b0b9aff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmV-P0k-~$P)q$gGRCwC#*X;?zAP@%N+|i#I!$mrh zlQ>KU$Rdu>|JH&931_?y6Djl{gb>4nCV5pzDJ?S!mq|4ZejKj%i@j$H{#ML~2Y{DF z$=}bKPaz+UGt{v(4CTQQXym}&iW8{s!ew~XIE7NLjQpy#I2S$rous$~?f%DHT#B*+ zq=#!zc5=0FEqWFpB%UE(L807on!pidHPLgYO}XEgorrg;PB=8ipgQ5u5`&g_MQaRd zaU7Ao8XQMuuN21-s0PPTs1%38x_Yl3Fs-|Y4!C-;M-8g@n*v@1|s#GQ665=9@Rxy?u0YW0&WN+~=RXpPbVXXL4m7Aq=E6I0%{06TwRn=U9d8>exk> zD-Z%M3DNQ`bTLSEF=%NFyoHcAkD*CiXqljo*0E?o$GiDC4q}}|%*0WghLlK#npw?hecrM}Mw?`E(z5C8< z8&*b^!{>5?4aT89vdrgBgSc-x6JZD3F^l#*G(@OO*^1D%Eu7?HAy<3kTLqW9N{^#6vso zVQwY48q7)m{~xQ64RV7{E7Y=&T~?^05Ky`5oNQ8bLgFCPq9co^R09BVRS1OAmH;hU zC#q(N!gNqm!zU#%sv{r5mm-Uv8b-~a1F-;p^>)pnXfKge4s9?;;MFIr*fixPG}NBA z6_G5BEmeO6XXh(emkciB{7tA;iwC2^s^VzyU_h0@ae84ACMY`cIDEju=<`q|2QAEv zW_)W|i|9aknqdmS=#w73eW_csQ$8IhT^vY1^1;X3&J0{%*tcQq!gJpr3w?TJc~@5= zKV5sM{$3k>b#S$@CTkhIF*{v*u(F&$&Yq1naHxt8Mz2N%7aQ3(^VNRZahk1||7?Bl z*idzO_u)FhRj4cPzDO>YA>>lxAGaciEiX8Xzp1SVPv91};$OG3cC&8!v3{Jq^kH@8 UTIccK;hzT5*3#}uZuEx!0OwrBv;Y7A diff --git a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/assets/storelogo.png b/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/assets/storelogo.png deleted file mode 100644 index dcb672712c6823a0c91548ded70a8acb85536b4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 429 zcmV;e0aE^nP)NtYJa1l)bQ5qwGXpZbs7%2oRMd4y35$s&66(fxhNg8W02!vSn zdlrL2h^Fx+3=$z;kK{0D#MyeJ8WRWZcLSf(PcQ_mLOhrmC}O-tX^0c>5`YvCUZVsc zG-6#78ubjJ5nA;OX&^K(q=i6ZNE3m?kTwE^AqxZoLskfB3|S&1F=UO9!cY$g2@Lgu z;9{sJ1P9|X2L`r1#Gs8R{E^$PRrMaC86q| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Mouse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/mainpage.xaml b/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/mainpage.xaml deleted file mode 100644 index 89dab3a06108e..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/mainpage.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/mainpage.xaml.vb b/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/mainpage.xaml.vb deleted file mode 100644 index 695331a041700..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/mainpage.xaml.vb +++ /dev/null @@ -1,32 +0,0 @@ - -' -Imports Windows.UI.Xaml.Navigation -Imports System.Reflection -Imports System.Globalization -Imports System.Text - -Public NotInheritable Class MainPage - Inherits Page - - Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs) - Dim t As TypeInfo = GetType(Calendar).GetTypeInfo() - Dim pList As IEnumerable(Of PropertyInfo) = t.DeclaredProperties - Dim mList As IEnumerable(Of MethodInfo) = t.DeclaredMethods - - Dim sb As New StringBuilder() - - sb.Append("Properties:") - For Each p As PropertyInfo In pList - - sb.Append((vbLf + p.DeclaringType.Name & ": ") + p.Name) - Next - sb.Append(vbLf & "Methods:") - For Each m As MethodInfo In mList - sb.Append((vbLf + m.DeclaringType.Name & ": ") + m.Name) - Next - - textblock1.Text = sb.ToString() - - End Sub -End Class -' diff --git a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/my project/assemblyinfo.vb b/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/my project/assemblyinfo.vb deleted file mode 100644 index 80bee79129027..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/my project/assemblyinfo.vb +++ /dev/null @@ -1,30 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - -' Review the values of the assembly attributes - - - - - - - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' -' You can specify all the values or you can default the Build and Revision Numbers -' by using the '*' as shown below: -' - - - - diff --git a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/package.appxmanifest b/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/package.appxmanifest deleted file mode 100644 index a31326a0ffc0c..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/package.appxmanifest +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - ReflectionVB - cherylsi - Assets\StoreLogo.png - - - - 6.2.1 - 6.2.1 - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/reflectionvb.vbproj b/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/reflectionvb.vbproj deleted file mode 100644 index 433b5b39b560c..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_CLR_System/system.reflectionwinstoreapp/vb/reflectionvb.vbproj +++ /dev/null @@ -1,199 +0,0 @@ - - - - - Debug - AnyCPU - {1D34F504-C007-446C-89D5-C99EC901466C} - AppContainerExe - ReflectionVB - ReflectionVB - en-US - 512 - {BC8A1FFA-BEE3-4634-8014-F334798102B3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} - - - AnyCPU - true - full - true - true - bin\Debug\ - NETFX_CORE - ReflectionVB.xml - 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 - - - AnyCPU - pdbonly - false - true - true - bin\Release\ - NETFX_CORE - ReflectionVB.xml - 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 - - - true - true - true - bin\ARM\Debug\ - NETFX_CORE - full - ARM - false - true - ReflectionVB.xml - 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 - - - true - bin\ARM\Release\ - NETFX_CORE - true - pdbonly - ARM - false - true - ReflectionVB.xml - 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 - - - true - true - true - bin\x64\Debug\ - NETFX_CORE - full - x64 - false - true - ReflectionVB.xml - 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 - - - true - bin\x64\Release\ - NETFX_CORE - true - pdbonly - x64 - false - true - ReflectionVB.xml - 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 - - - true - true - true - bin\x86\Debug\ - NETFX_CORE - full - x86 - false - true - ReflectionVB.xml - 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 - - - true - bin\x86\Release\ - NETFX_CORE - true - pdbonly - x86 - false - true - ReflectionVB.xml - 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 - - - - - - - App.xaml - - - MainPage.xaml - - - - - - Designer - - - - - - - - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 11.0 - - - On - - - Binary - - - Off - - - On - - - - From 785015819900fc18f3831b0292e2ea62464fc4a0 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Wed, 23 Sep 2026 13:56:38 -0700 Subject: [PATCH 08/24] Modify Dependabot configuration for NuGet updates (#56230) Updated NuGet configuration for Dependabot to include new settings for open pull requests and cooldown periods. --- .github/dependabot.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 67e79c149a65a..84f17cdc50fbb 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,13 +10,25 @@ updates: interval: "weekly" cooldown: default-days: 3 - # NuGet updates for AI, Architecture, Azure, Core, Csharp, and DevOps snippets + # NuGet updates for AI, Architecture, Azure, and Core snippets - package-ecosystem: "nuget" directories: - "docs/ai/**/snippets/**/*" - "docs/architecture/**/snippets/**/*" - "docs/azure/**/snippets/**/*" - "docs/core/**/snippets/**/*" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 + cooldown: + default-days: 7 + groups: + nuget: + patterns: ["*"] + group-by: dependency-name + # NuGet updates for Csharp and DevOps snippets + - package-ecosystem: "nuget" + directories: - "docs/csharp/**/snippets/**/*" - "docs/devops/**/snippets/**/*" schedule: From a2ebf58df461fb4484d906eb60f8cc0487535dbe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Sep 2026 21:15:53 +0000 Subject: [PATCH 09/24] Bump the nuget group with 1 update (#56233) Bumps Microsoft.Extensions.Hosting to 10.0.12 --- updated-dependencies: - dependency-name: Microsoft.Extensions.Hosting dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.Hosting - dependency-name: Microsoft.Extensions.Hosting dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.Hosting - dependency-name: Microsoft.Extensions.Hosting dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.Hosting - dependency-name: Microsoft.Extensions.Hosting dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.Hosting - dependency-name: Microsoft.Extensions.Hosting dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.Hosting - dependency-name: Microsoft.Extensions.Hosting dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.Hosting ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/orleans/Directory.Build.props | 2 +- .../snippets/transactions/Abstractions/Abstractions.csproj | 2 +- docs/orleans/grains/snippets/transactions/Client/Client.csproj | 2 +- docs/orleans/grains/snippets/transactions/Server/Server.csproj | 2 +- .../tutorials-and-samples/snippets/helloworld/helloworld.csproj | 2 +- .../tutorials-and-samples/snippets/minimal/Client/Client.csproj | 2 +- .../snippets/minimal/GrainInterfaces/GrainInterfaces.csproj | 2 +- .../tutorials-and-samples/snippets/minimal/Silo/Silo.csproj | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/orleans/Directory.Build.props b/docs/orleans/Directory.Build.props index e1e1c513ccc48..ff4279aa7dddd 100644 --- a/docs/orleans/Directory.Build.props +++ b/docs/orleans/Directory.Build.props @@ -16,7 +16,7 @@ - + diff --git a/docs/orleans/grains/snippets/transactions/Abstractions/Abstractions.csproj b/docs/orleans/grains/snippets/transactions/Abstractions/Abstractions.csproj index c7521d55056b6..bbfb5c34c4c39 100644 --- a/docs/orleans/grains/snippets/transactions/Abstractions/Abstractions.csproj +++ b/docs/orleans/grains/snippets/transactions/Abstractions/Abstractions.csproj @@ -1,7 +1,7 @@ - + diff --git a/docs/orleans/grains/snippets/transactions/Client/Client.csproj b/docs/orleans/grains/snippets/transactions/Client/Client.csproj index befbf9407b7c5..741ab3079bbdf 100644 --- a/docs/orleans/grains/snippets/transactions/Client/Client.csproj +++ b/docs/orleans/grains/snippets/transactions/Client/Client.csproj @@ -5,7 +5,7 @@ - + diff --git a/docs/orleans/grains/snippets/transactions/Server/Server.csproj b/docs/orleans/grains/snippets/transactions/Server/Server.csproj index 3aeaa1eab2884..6027606690808 100644 --- a/docs/orleans/grains/snippets/transactions/Server/Server.csproj +++ b/docs/orleans/grains/snippets/transactions/Server/Server.csproj @@ -5,7 +5,7 @@ - + diff --git a/docs/orleans/tutorials-and-samples/snippets/helloworld/helloworld.csproj b/docs/orleans/tutorials-and-samples/snippets/helloworld/helloworld.csproj index f5ac9263d32ff..522510c13e88f 100644 --- a/docs/orleans/tutorials-and-samples/snippets/helloworld/helloworld.csproj +++ b/docs/orleans/tutorials-and-samples/snippets/helloworld/helloworld.csproj @@ -3,7 +3,7 @@ - + diff --git a/docs/orleans/tutorials-and-samples/snippets/minimal/Client/Client.csproj b/docs/orleans/tutorials-and-samples/snippets/minimal/Client/Client.csproj index c570d477fa55b..08c08a668895f 100644 --- a/docs/orleans/tutorials-and-samples/snippets/minimal/Client/Client.csproj +++ b/docs/orleans/tutorials-and-samples/snippets/minimal/Client/Client.csproj @@ -5,7 +5,7 @@ - + diff --git a/docs/orleans/tutorials-and-samples/snippets/minimal/GrainInterfaces/GrainInterfaces.csproj b/docs/orleans/tutorials-and-samples/snippets/minimal/GrainInterfaces/GrainInterfaces.csproj index 6808d2025eade..650052a5eb082 100644 --- a/docs/orleans/tutorials-and-samples/snippets/minimal/GrainInterfaces/GrainInterfaces.csproj +++ b/docs/orleans/tutorials-and-samples/snippets/minimal/GrainInterfaces/GrainInterfaces.csproj @@ -1,7 +1,7 @@ - + diff --git a/docs/orleans/tutorials-and-samples/snippets/minimal/Silo/Silo.csproj b/docs/orleans/tutorials-and-samples/snippets/minimal/Silo/Silo.csproj index e841b0f844803..f850655a7a1f7 100644 --- a/docs/orleans/tutorials-and-samples/snippets/minimal/Silo/Silo.csproj +++ b/docs/orleans/tutorials-and-samples/snippets/minimal/Silo/Silo.csproj @@ -5,7 +5,7 @@ - + From 28bccfa2382e6388adc378a28478c834bd4853b9 Mon Sep 17 00:00:00 2001 From: Stephen Jennings Date: Wed, 23 Sep 2026 14:37:25 -0700 Subject: [PATCH 10/24] Fix Directory.Build.props file name in artifacts-output.md (#56234) On a case sensitive file system, this file must be named _Directory.Build.props_, not _Directory.build.props_. See: https://github.com/dotnet/core/issues/1991#issue-368441031 --- docs/core/sdk/artifacts-output.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core/sdk/artifacts-output.md b/docs/core/sdk/artifacts-output.md index 93770e63890ae..e35f6fb9b1ac6 100644 --- a/docs/core/sdk/artifacts-output.md +++ b/docs/core/sdk/artifacts-output.md @@ -7,7 +7,7 @@ ms.date: 05/28/2025 In .NET 8 and later versions, there's an option to simplify the output path and folder structure for build outputs. All build outputs from all projects are gathered into a common location, separated by project. A common location makes it easy for tooling to anticipate where to find the outputs. -By default, the common location is a directory named *artifacts* next to the *Directory.build.props* file. The folder structure under the root *artifacts* folder is as follows: +By default, the common location is a directory named *artifacts* next to the *Directory.Build.props* file. The folder structure under the root *artifacts* folder is as follows: ```Directory 📁 artifacts @@ -16,7 +16,7 @@ By default, the common location is a directory named *artifacts* next to the *Di └──📂 ``` -The following table shows the default values for each level in the folder structure. You can override the values, as well as the default location, using properties in the *Directory.build.props* file. +The following table shows the default values for each level in the folder structure. You can override the values, as well as the default location, using properties in the *Directory.Build.props* file. | Folder level | Description | Examples | |----------------|-----------------------------------|------------------------------------| From c4e678c6436c71c7cbd0aabae3195d32b7e8aef9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Sep 2026 15:00:42 -0700 Subject: [PATCH 11/24] Bump the nuget group with 7 updates (#56232) --- .../snippets-v3/code-generation/code-generation.csproj | 4 ++-- .../grains/snippets-v3/grainservices/grainservices.csproj | 2 +- .../snippets-v3/client-config/client-config.csproj | 4 ++-- .../snippets-v3/local-dev/local-dev.csproj | 4 ++-- .../snippets-v3/server-config/server-config.csproj | 4 ++-- docs/orleans/host/snippets-v3/client/client.csproj | 4 ++-- docs/orleans/snippets-v3/Directory.Build.props | 6 +++--- docs/orleans/snippets-v3/helloworld/helloworld.csproj | 4 ++-- .../streams-quickstart/streams-quickstart.csproj | 4 ++-- .../snippets-v3/custom-storage/custom-storage.csproj | 2 +- 10 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/orleans/grains/snippets-v3/code-generation/code-generation.csproj b/docs/orleans/grains/snippets-v3/code-generation/code-generation.csproj index d11fdee3a0827..23422b426a5be 100644 --- a/docs/orleans/grains/snippets-v3/code-generation/code-generation.csproj +++ b/docs/orleans/grains/snippets-v3/code-generation/code-generation.csproj @@ -15,8 +15,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/docs/orleans/grains/snippets-v3/grainservices/grainservices.csproj b/docs/orleans/grains/snippets-v3/grainservices/grainservices.csproj index 09dde0ce65989..58f88b891e96a 100644 --- a/docs/orleans/grains/snippets-v3/grainservices/grainservices.csproj +++ b/docs/orleans/grains/snippets-v3/grainservices/grainservices.csproj @@ -15,7 +15,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/docs/orleans/host/configuration-guide/snippets-v3/client-config/client-config.csproj b/docs/orleans/host/configuration-guide/snippets-v3/client-config/client-config.csproj index 9c1c0dd4a1908..aadb30b3294e4 100644 --- a/docs/orleans/host/configuration-guide/snippets-v3/client-config/client-config.csproj +++ b/docs/orleans/host/configuration-guide/snippets-v3/client-config/client-config.csproj @@ -15,8 +15,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/docs/orleans/host/configuration-guide/snippets-v3/local-dev/local-dev.csproj b/docs/orleans/host/configuration-guide/snippets-v3/local-dev/local-dev.csproj index c78120da380b8..9feff91070e95 100644 --- a/docs/orleans/host/configuration-guide/snippets-v3/local-dev/local-dev.csproj +++ b/docs/orleans/host/configuration-guide/snippets-v3/local-dev/local-dev.csproj @@ -15,8 +15,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/docs/orleans/host/configuration-guide/snippets-v3/server-config/server-config.csproj b/docs/orleans/host/configuration-guide/snippets-v3/server-config/server-config.csproj index 63e1736b6911a..a5d2a27dd43d9 100644 --- a/docs/orleans/host/configuration-guide/snippets-v3/server-config/server-config.csproj +++ b/docs/orleans/host/configuration-guide/snippets-v3/server-config/server-config.csproj @@ -15,8 +15,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/docs/orleans/host/snippets-v3/client/client.csproj b/docs/orleans/host/snippets-v3/client/client.csproj index e5c193bf4ae32..8d0a8c84e5e8f 100644 --- a/docs/orleans/host/snippets-v3/client/client.csproj +++ b/docs/orleans/host/snippets-v3/client/client.csproj @@ -15,8 +15,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/docs/orleans/snippets-v3/Directory.Build.props b/docs/orleans/snippets-v3/Directory.Build.props index 2be5165c4b60b..13dab2c469478 100644 --- a/docs/orleans/snippets-v3/Directory.Build.props +++ b/docs/orleans/snippets-v3/Directory.Build.props @@ -17,8 +17,8 @@ - - - + + + diff --git a/docs/orleans/snippets-v3/helloworld/helloworld.csproj b/docs/orleans/snippets-v3/helloworld/helloworld.csproj index d0897e3ebd663..d14dae453c01e 100644 --- a/docs/orleans/snippets-v3/helloworld/helloworld.csproj +++ b/docs/orleans/snippets-v3/helloworld/helloworld.csproj @@ -12,8 +12,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/docs/orleans/streaming/snippets-v3/streams-quickstart/streams-quickstart.csproj b/docs/orleans/streaming/snippets-v3/streams-quickstart/streams-quickstart.csproj index 593c678608447..3b7fdd87aeb7f 100644 --- a/docs/orleans/streaming/snippets-v3/streams-quickstart/streams-quickstart.csproj +++ b/docs/orleans/streaming/snippets-v3/streams-quickstart/streams-quickstart.csproj @@ -15,8 +15,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/docs/orleans/tutorials-and-samples/snippets-v3/custom-storage/custom-storage.csproj b/docs/orleans/tutorials-and-samples/snippets-v3/custom-storage/custom-storage.csproj index 7c5ca9d843211..8cd5fd0afcd5d 100644 --- a/docs/orleans/tutorials-and-samples/snippets-v3/custom-storage/custom-storage.csproj +++ b/docs/orleans/tutorials-and-samples/snippets-v3/custom-storage/custom-storage.csproj @@ -14,7 +14,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + From 91266c55abcfbb3f15915f46ea9f6b935afddd3c Mon Sep 17 00:00:00 2001 From: Tom McDonald Date: Wed, 23 Sep 2026 18:01:18 -0400 Subject: [PATCH 12/24] Update linux install instructions (#56231) --- docs/core/install/linux-scripted-manual.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/install/linux-scripted-manual.md b/docs/core/install/linux-scripted-manual.md index 438f99981db68..7b0d98653c923 100644 --- a/docs/core/install/linux-scripted-manual.md +++ b/docs/core/install/linux-scripted-manual.md @@ -149,7 +149,7 @@ The following commands use Bash to set the environment variable `DOTNET_ROOT` to DOTNET_FILE=dotnet-sdk-9.0.306-linux-x64.tar.gz export DOTNET_ROOT=$(pwd)/.dotnet -mkdir -p "$DOTNET_ROOT" && tar zxf "$DOTNET_FILE" -C "$DOTNET_ROOT" +mkdir -p "$DOTNET_ROOT" && tar zxf "$DOTNET_FILE" --no-same-owner -C "$DOTNET_ROOT" export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools ``` From 1ed33899dc054a81a3c58439cc6f1d19a84c8740 Mon Sep 17 00:00:00 2001 From: "azure-sdk-automation[bot]" <191533747+azure-sdk-automation[bot]@users.noreply.github.com> Date: Wed, 23 Sep 2026 15:01:45 -0700 Subject: [PATCH 13/24] Update package index with latest published versions (#56236) Co-authored-by: azure-sdk --- docs/azure/includes/dotnet-all.md | 2 +- docs/azure/includes/dotnet-new.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index 62cc8262fe1f8..e8e84f32458c8 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -121,7 +121,7 @@ | Synapse - Spark | NuGet [1.0.0-preview.8](https://www.nuget.org/packages/Azure.Analytics.Synapse.Spark/1.0.0-preview.8) | [docs](/dotnet/api/overview/azure/Analytics.Synapse.Spark-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-preview.8](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Synapse.Spark_1.0.0-preview.8/sdk/synapse/Azure.Analytics.Synapse.Spark/) | | System Events | NuGet [1.1.0](https://www.nuget.org/packages/Azure.Messaging.EventGrid.SystemEvents/1.1.0) | [docs](/dotnet/api/overview/azure/Messaging.EventGrid.SystemEvents-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.EventGrid.SystemEvents_1.1.0/sdk/eventgrid/Azure.Messaging.EventGrid.SystemEvents/) | | System.ClientModel | NuGet [1.16.0](https://www.nuget.org/packages/System.ClientModel/1.16.0) | [docs](/dotnet/api/overview/azure/System.ClientModel-readme) | GitHub [1.16.0](https://github.com/Azure/azure-sdk-for-net/tree/System.ClientModel_1.16.0/sdk/core/System.ClientModel/) | -| Tables | NuGet [12.12.0](https://www.nuget.org/packages/Azure.Data.Tables/12.12.0) | [docs](/dotnet/api/overview/azure/Data.Tables-readme) | GitHub [12.12.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.Tables_12.12.0/sdk/tables/Azure.Data.Tables/) | +| Tables | NuGet [12.13.0](https://www.nuget.org/packages/Azure.Data.Tables/12.13.0) | [docs](/dotnet/api/overview/azure/Data.Tables-readme) | GitHub [12.13.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.Tables_12.13.0/sdk/tables/Azure.Data.Tables/) | | Text Analytics | NuGet [5.3.0](https://www.nuget.org/packages/Azure.AI.TextAnalytics/5.3.0) | [docs](/dotnet/api/overview/azure/AI.TextAnalytics-readme) | GitHub [5.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.TextAnalytics_5.3.0/sdk/textanalytics/Azure.AI.TextAnalytics/) | | Text Authoring | NuGet [1.0.0-beta.2](https://www.nuget.org/packages/Azure.AI.Language.Text.Authoring/1.0.0-beta.2) | [docs](/dotnet/api/overview/azure/AI.Language.Text.Authoring-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.Language.Text.Authoring_1.0.0-beta.2/sdk/cognitivelanguage/Azure.AI.Language.Text.Authoring/) | | Text Translation | NuGet [2.0.0](https://www.nuget.org/packages/Azure.AI.Translation.Text/2.0.0) | [docs](/dotnet/api/overview/azure/AI.Translation.Text-readme) | GitHub [2.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.Translation.Text_2.0.0/sdk/translation/Azure.AI.Translation.Text/) | diff --git a/docs/azure/includes/dotnet-new.md b/docs/azure/includes/dotnet-new.md index fe45c637c1d0c..cd979fa44fc26 100644 --- a/docs/azure/includes/dotnet-new.md +++ b/docs/azure/includes/dotnet-new.md @@ -133,7 +133,7 @@ | Synapse - Spark | NuGet [1.0.0-preview.8](https://www.nuget.org/packages/Azure.Analytics.Synapse.Spark/1.0.0-preview.8) | [docs](/dotnet/api/overview/azure/Analytics.Synapse.Spark-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-preview.8](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Synapse.Spark_1.0.0-preview.8/sdk/synapse/Azure.Analytics.Synapse.Spark/) | | System Events | NuGet [1.1.0](https://www.nuget.org/packages/Azure.Messaging.EventGrid.SystemEvents/1.1.0) | [docs](/dotnet/api/overview/azure/Messaging.EventGrid.SystemEvents-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.EventGrid.SystemEvents_1.1.0/sdk/eventgrid/Azure.Messaging.EventGrid.SystemEvents/) | | System.ClientModel | NuGet [1.16.0](https://www.nuget.org/packages/System.ClientModel/1.16.0) | [docs](/dotnet/api/overview/azure/System.ClientModel-readme) | GitHub [1.16.0](https://github.com/Azure/azure-sdk-for-net/tree/System.ClientModel_1.16.0/sdk/core/System.ClientModel/) | -| Tables | NuGet [12.12.0](https://www.nuget.org/packages/Azure.Data.Tables/12.12.0) | [docs](/dotnet/api/overview/azure/Data.Tables-readme) | GitHub [12.12.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.Tables_12.12.0/sdk/tables/Azure.Data.Tables/) | +| Tables | NuGet [12.13.0](https://www.nuget.org/packages/Azure.Data.Tables/12.13.0) | [docs](/dotnet/api/overview/azure/Data.Tables-readme) | GitHub [12.13.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.Tables_12.13.0/sdk/tables/Azure.Data.Tables/) | | Text Analytics | NuGet [5.3.0](https://www.nuget.org/packages/Azure.AI.TextAnalytics/5.3.0) | [docs](/dotnet/api/overview/azure/AI.TextAnalytics-readme) | GitHub [5.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.TextAnalytics_5.3.0/sdk/textanalytics/Azure.AI.TextAnalytics/) | | Text Authoring | NuGet [1.0.0-beta.2](https://www.nuget.org/packages/Azure.AI.Language.Text.Authoring/1.0.0-beta.2) | [docs](/dotnet/api/overview/azure/AI.Language.Text.Authoring-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.Language.Text.Authoring_1.0.0-beta.2/sdk/cognitivelanguage/Azure.AI.Language.Text.Authoring/) | | Text Translation | NuGet [2.0.0](https://www.nuget.org/packages/Azure.AI.Translation.Text/2.0.0) | [docs](/dotnet/api/overview/azure/AI.Translation.Text-readme) | GitHub [2.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.Translation.Text_2.0.0/sdk/translation/Azure.AI.Translation.Text/) | From eebb15ec571f1d5c5b9adb096bb79ac630004ca4 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Wed, 23 Sep 2026 15:42:30 -0700 Subject: [PATCH 14/24] divide groups further (#56238) --- .github/dependabot.yml | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 84f17cdc50fbb..1dc1869ef887d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,12 +10,24 @@ updates: interval: "weekly" cooldown: default-days: 3 - # NuGet updates for AI, Architecture, Azure, and Core snippets + # NuGet updates for AI, Architecture, and Azure snippets - package-ecosystem: "nuget" directories: - "docs/ai/**/snippets/**/*" - "docs/architecture/**/snippets/**/*" - "docs/azure/**/snippets/**/*" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 + cooldown: + default-days: 7 + groups: + nuget: + patterns: ["*"] + group-by: dependency-name + # NuGet updates for Core snippets + - package-ecosystem: "nuget" + directories: - "docs/core/**/snippets/**/*" schedule: interval: "weekly" @@ -110,10 +122,29 @@ updates: nuget: patterns: ["*"] group-by: dependency-name - # NuGet updates for samples/snippets + # NuGet updates for C# samples/snippets. + - package-ecosystem: "nuget" + directories: + - "samples/snippets/csharp/**/*" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 + cooldown: + default-days: 7 + groups: + nuget: + patterns: ["*"] + group-by: dependency-name + # NuGet updates for remaining samples/snippets. - package-ecosystem: "nuget" directories: - - "samples/snippets/**/*" + - "samples/snippets/core/**/*" + - "samples/snippets/cpp/**/*" + - "samples/snippets/fsharp/**/*" + - "samples/snippets/standard/**/*" + - "samples/snippets/tsql/**/*" + - "samples/snippets/visualbasic/**/*" + - "samples/snippets/xml/**/*" schedule: interval: "weekly" open-pull-requests-limit: 5 From f43b8dd0f31127577de13bfe196c88a6b0bcc480 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Sep 2026 23:08:17 +0000 Subject: [PATCH 15/24] Bump the nuget group with 21 updates (#56241) Bumps Azure.Identity to 1.21.0 Bumps Azure.Messaging.ServiceBus from 7.17.5 to 7.20.2 Bumps Azure.Security.KeyVault.Secrets from 4.6.0 to 4.11.1 Bumps Azure.Storage.Blobs from 12.20.0 to 12.29.2 Bumps Microsoft.Agents.AI.OpenAI from 1.20.0 to 1.21.0 Bumps Microsoft.AspNetCore.OpenApi from 8.0.8 to 10.0.12 Bumps Microsoft.Extensions.AI from 10.9.0 to 10.10.0 Bumps Microsoft.Extensions.AI.Abstractions from 10.9.0 to 10.10.0 Bumps Microsoft.Extensions.AI.Evaluation from 10.9.0 to 10.10.0 Bumps Microsoft.Extensions.AI.Evaluation.Quality from 10.9.0 to 10.10.0 Bumps Microsoft.Extensions.AI.Evaluation.Reporting from 10.9.0 to 10.10.0 Bumps Microsoft.Extensions.AI.OpenAI from 10.9.0 to 10.10.0 Bumps Microsoft.Extensions.Azure from 1.13.1 to 1.14.1 Bumps Microsoft.Extensions.Caching.Memory from 10.0.11 to 10.0.12 Bumps Microsoft.Extensions.Hosting from 10.0.0 to 10.0.12 Bumps Microsoft.Extensions.Logging.Debug from 9.0.0 to 10.0.12 Bumps Microsoft.Maui.Controls from 9.0.0 to 10.0.101 Bumps Microsoft.NET.Test.Sdk from 18.10.0 to 18.10.1 Bumps MSTest from 4.4.0 to 4.4.1 Bumps OpenAI to 2.14.0 Bumps Swashbuckle.AspNetCore from 6.7.3 to 10.2.3 --- updated-dependencies: - dependency-name: Microsoft.Extensions.AI.Abstractions dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.Evaluation dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.Evaluation.Quality dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.OpenAI dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.10.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: MSTest dependency-version: 4.4.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.10.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: MSTest dependency-version: 4.4.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.Abstractions dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.Evaluation dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.Evaluation.Quality dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.Evaluation.Reporting dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.OpenAI dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.10.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: MSTest dependency-version: 4.4.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.OpenAI dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: OpenAI dependency-version: 2.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.OpenAI dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.AI.OpenAI dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: OpenAI dependency-version: 2.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.Caching.Memory dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Agents.AI.OpenAI dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Maui.Controls dependency-version: 10.0.101 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.AspNetCore.OpenApi dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Swashbuckle.AspNetCore dependency-version: 10.2.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.AspNetCore.OpenApi dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Swashbuckle.AspNetCore dependency-version: 10.2.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.AspNetCore.OpenApi dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Swashbuckle.AspNetCore dependency-version: 10.2.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.AspNetCore.OpenApi dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Swashbuckle.AspNetCore dependency-version: 10.2.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.AspNetCore.OpenApi dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Swashbuckle.AspNetCore dependency-version: 10.2.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Identity dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Messaging.ServiceBus dependency-version: 7.20.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Security.KeyVault.Secrets dependency-version: 4.11.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Storage.Blobs dependency-version: 12.29.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.Azure dependency-version: 1.14.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.Hosting dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: OpenAI dependency-version: 2.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Identity dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Messaging.ServiceBus dependency-version: 7.20.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Security.KeyVault.Secrets dependency-version: 4.11.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Storage.Blobs dependency-version: 12.29.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.Azure dependency-version: 1.14.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.Hosting dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: OpenAI dependency-version: 2.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Identity dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Messaging.ServiceBus dependency-version: 7.20.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Security.KeyVault.Secrets dependency-version: 4.11.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Storage.Blobs dependency-version: 12.29.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.AspNetCore.OpenApi dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.Extensions.Azure dependency-version: 1.14.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: OpenAI dependency-version: 2.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Swashbuckle.AspNetCore dependency-version: 10.2.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Identity dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Identity dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Azure.Identity dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: OpenAI dependency-version: 2.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: OpenAI dependency-version: 2.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: OpenAI dependency-version: 2.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.Extensions.AI.Abstractions - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.10.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget/Microsoft.Extensions.AI.Abstractions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../snippets/evaluate-ai-responses/TestAI.csproj | 12 ++++++------ .../EvaluateResponseSafety.csproj | 4 ++-- .../TestAIWithReporting.csproj | 14 +++++++------- .../content-filtering/AIContentFiltering.csproj | 4 ++-- .../snippets/assistants/AIAssistants.csproj | 2 +- .../openai/ExtensionsOpenAI.csproj | 2 +- .../image-generation/openai/ImagesOpenAI.csproj | 4 ++-- .../ConsoleAI.FunctionalityPipelines.csproj | 2 +- .../prompt-engineering/multi-turn-chat.csproj | 2 +- .../authentication/Directory.Packages.props | 4 ++-- .../Directory.Packages.props | 16 ++++++++-------- .../AzureCore/Directory.Packages.props | 2 +- .../SCM/Directory.Packages.props | 2 +- .../unit-testing/UnitTestingSampleApp.csproj | 2 +- 14 files changed, 36 insertions(+), 36 deletions(-) diff --git a/docs/ai/evaluation/snippets/evaluate-ai-responses/TestAI.csproj b/docs/ai/evaluation/snippets/evaluate-ai-responses/TestAI.csproj index ccefda858fb50..50101e9358b28 100644 --- a/docs/ai/evaluation/snippets/evaluate-ai-responses/TestAI.csproj +++ b/docs/ai/evaluation/snippets/evaluate-ai-responses/TestAI.csproj @@ -11,14 +11,14 @@ - - - - + + + + - - + + diff --git a/docs/ai/evaluation/snippets/evaluate-safety/EvaluateResponseSafety.csproj b/docs/ai/evaluation/snippets/evaluate-safety/EvaluateResponseSafety.csproj index ed2bd0cd6c04f..022d4c7f91024 100644 --- a/docs/ai/evaluation/snippets/evaluate-safety/EvaluateResponseSafety.csproj +++ b/docs/ai/evaluation/snippets/evaluate-safety/EvaluateResponseSafety.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/docs/ai/evaluation/snippets/evaluate-with-reporting/TestAIWithReporting.csproj b/docs/ai/evaluation/snippets/evaluate-with-reporting/TestAIWithReporting.csproj index 88c033fe6f901..5d6124f436ce2 100644 --- a/docs/ai/evaluation/snippets/evaluate-with-reporting/TestAIWithReporting.csproj +++ b/docs/ai/evaluation/snippets/evaluate-with-reporting/TestAIWithReporting.csproj @@ -11,15 +11,15 @@ - - - - - + + + + + - - + + diff --git a/docs/ai/how-to/snippets/content-filtering/AIContentFiltering.csproj b/docs/ai/how-to/snippets/content-filtering/AIContentFiltering.csproj index 3571f11adb10d..e5b530d559d3b 100644 --- a/docs/ai/how-to/snippets/content-filtering/AIContentFiltering.csproj +++ b/docs/ai/how-to/snippets/content-filtering/AIContentFiltering.csproj @@ -10,8 +10,8 @@ - - + + diff --git a/docs/ai/quickstarts/snippets/assistants/AIAssistants.csproj b/docs/ai/quickstarts/snippets/assistants/AIAssistants.csproj index 5fa861af45d89..95c0d0fe7fa33 100644 --- a/docs/ai/quickstarts/snippets/assistants/AIAssistants.csproj +++ b/docs/ai/quickstarts/snippets/assistants/AIAssistants.csproj @@ -10,7 +10,7 @@ - + diff --git a/docs/ai/quickstarts/snippets/build-chat-app/openai/ExtensionsOpenAI.csproj b/docs/ai/quickstarts/snippets/build-chat-app/openai/ExtensionsOpenAI.csproj index 2f118c1ccb908..88ffaae57896a 100644 --- a/docs/ai/quickstarts/snippets/build-chat-app/openai/ExtensionsOpenAI.csproj +++ b/docs/ai/quickstarts/snippets/build-chat-app/openai/ExtensionsOpenAI.csproj @@ -8,7 +8,7 @@ - + diff --git a/docs/ai/quickstarts/snippets/image-generation/openai/ImagesOpenAI.csproj b/docs/ai/quickstarts/snippets/image-generation/openai/ImagesOpenAI.csproj index a673e6439cc09..04e6ad44c3d8b 100644 --- a/docs/ai/quickstarts/snippets/image-generation/openai/ImagesOpenAI.csproj +++ b/docs/ai/quickstarts/snippets/image-generation/openai/ImagesOpenAI.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.FunctionalityPipelines/ConsoleAI.FunctionalityPipelines.csproj b/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.FunctionalityPipelines/ConsoleAI.FunctionalityPipelines.csproj index c4376427aaf70..1bb8fe2a56de2 100644 --- a/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.FunctionalityPipelines/ConsoleAI.FunctionalityPipelines.csproj +++ b/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.FunctionalityPipelines/ConsoleAI.FunctionalityPipelines.csproj @@ -8,7 +8,7 @@ - + diff --git a/docs/ai/snippets/prompt-engineering/multi-turn-chat.csproj b/docs/ai/snippets/prompt-engineering/multi-turn-chat.csproj index 21493bfbb99c8..9d0fa5cfd08fd 100644 --- a/docs/ai/snippets/prompt-engineering/multi-turn-chat.csproj +++ b/docs/ai/snippets/prompt-engineering/multi-turn-chat.csproj @@ -10,7 +10,7 @@ - + - - + + diff --git a/docs/azure/sdk/snippets/dependency-injection/Directory.Packages.props b/docs/azure/sdk/snippets/dependency-injection/Directory.Packages.props index 7c22c29f10cc3..324a2215425da 100644 --- a/docs/azure/sdk/snippets/dependency-injection/Directory.Packages.props +++ b/docs/azure/sdk/snippets/dependency-injection/Directory.Packages.props @@ -4,14 +4,14 @@ - - - - - + + + + + - - - + + + \ No newline at end of file diff --git a/docs/azure/sdk/snippets/protocol-convenience-methods/AzureCore/Directory.Packages.props b/docs/azure/sdk/snippets/protocol-convenience-methods/AzureCore/Directory.Packages.props index 0faa968737aea..7f2b1054bae0c 100644 --- a/docs/azure/sdk/snippets/protocol-convenience-methods/AzureCore/Directory.Packages.props +++ b/docs/azure/sdk/snippets/protocol-convenience-methods/AzureCore/Directory.Packages.props @@ -4,6 +4,6 @@ - + diff --git a/docs/azure/sdk/snippets/protocol-convenience-methods/SCM/Directory.Packages.props b/docs/azure/sdk/snippets/protocol-convenience-methods/SCM/Directory.Packages.props index 76d96c26a95dc..af00a2b1c42d7 100644 --- a/docs/azure/sdk/snippets/protocol-convenience-methods/SCM/Directory.Packages.props +++ b/docs/azure/sdk/snippets/protocol-convenience-methods/SCM/Directory.Packages.props @@ -3,6 +3,6 @@ true - + diff --git a/docs/azure/sdk/snippets/unit-testing/UnitTestingSampleApp.csproj b/docs/azure/sdk/snippets/unit-testing/UnitTestingSampleApp.csproj index 8dbf60a9972aa..62c469d378acc 100644 --- a/docs/azure/sdk/snippets/unit-testing/UnitTestingSampleApp.csproj +++ b/docs/azure/sdk/snippets/unit-testing/UnitTestingSampleApp.csproj @@ -12,7 +12,7 @@ - + From 7e7256d65f27d358eb2e4c01b0aa9fe7ef411894 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Sep 2026 23:26:29 +0000 Subject: [PATCH 16/24] Bump the nuget group with 15 updates (#56242) Bumps Microsoft.CodeAnalysis.CSharp.Workspaces from 4.9.2 to 5.9.0 Bumps Microsoft.Data.SqlClient from 6.0.1 to 7.0.3 Bumps Microsoft.NET.Test.Sdk from 17.10.0 to 18.10.1 Bumps Microsoft.Windows.Compatibility from 8.0.6 to 10.0.12 Bumps Roslynator.Analyzers from 4.6.1 to 5.0.0 Bumps System.Configuration.ConfigurationManager from 7.0.0 to 10.0.12 Bumps System.Data.Odbc from 7.0.0 to 10.0.12 Bumps System.Data.OleDb from 7.0.0 to 10.0.12 Bumps System.Data.SqlClient from 4.8.6 to 4.9.1 Bumps System.Drawing.Common from 7.0.0 to 10.0.12 Bumps System.Security.Cryptography.Xml to 10.0.12 Bumps System.Security.Permissions from 7.0.0 to 10.0.12 Bumps System.Threading.Tasks.Dataflow from 8.0.1 to 10.0.12 Bumps xunit from 2.8.1 to 2.9.3 Bumps xunit.runner.visualstudio from 2.8.1 to 4.0.0 --- updated-dependencies: - dependency-name: Microsoft.CodeAnalysis.CSharp.Workspaces dependency-version: 5.9.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Configuration.ConfigurationManager dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Configuration.ConfigurationManager dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Configuration.ConfigurationManager dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Configuration.ConfigurationManager dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Configuration.ConfigurationManager dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.Odbc dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Configuration.ConfigurationManager dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Drawing.Common dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.OleDb dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.Odbc dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.OleDb dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: Roslynator.Analyzers dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Security.Permissions dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: Roslynator.Analyzers dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Security.Permissions dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: Roslynator.Analyzers dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Data.SqlClient dependency-version: 4.9.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: Microsoft.Windows.Compatibility dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Security.Cryptography.Xml dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Security.Cryptography.Xml dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Security.Cryptography.Xml dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Security.Cryptography.Xml dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Security.Cryptography.Xml dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Security.Cryptography.Xml dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Security.Cryptography.Xml dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: Microsoft.Data.SqlClient dependency-version: 7.0.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: Microsoft.Data.SqlClient dependency-version: 7.0.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: System.Threading.Tasks.Dataflow dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.10.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: xunit dependency-version: 2.9.3 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces - dependency-name: xunit.runner.visualstudio dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: nuget/Microsoft.CodeAnalysis.CSharp.Workspaces ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../CS/Project.csproj | 2 +- .../CS/CustomCopyToDataTableCS.csproj | 2 +- .../DP DataView Samples/CS/DataViewSamplesCS.csproj | 2 +- .../CS/DataViewWinFormsSample.csproj | 2 +- .../CS/LINQtoDataSetExamplesCS.csproj | 4 ++-- .../DataWorks BulkCopy.Single/CS/Project.csproj | 2 +- .../CS/Project.csproj | 4 ++-- .../CS/Project.csproj | 4 ++-- .../CS/Project.csproj | 4 ++-- .../DataWorks ConnectionStrings.Encrypt/CS/Project.csproj | 4 ++-- .../CS/Project.csproj | 2 +- .../DataWorks Data.AcceptRejectRule/CS/Project.csproj | 2 +- .../DataWorks Data.DataTableAdd/CS/Project.csproj | 2 +- .../DataWorks Data.DataTableNavigation/CS/Project.csproj | 2 +- .../DataWorks Data.DataTableRelation/CS/Project.csproj | 2 +- .../DataWorks DataSet.Merge/CS/Project.csproj | 2 +- .../DataWorks DataSet.MergeAcceptChanges/CS/Project.csproj | 2 +- .../DataWorks DataTable.CreateDataReader/CS/Project.csproj | 2 +- .../DataWorks DataTable.Events/CS/Project.csproj | 2 +- .../DataWorks DataTableReader.NextResult/CS/Project.csproj | 2 +- .../CS/Project.csproj | 6 +++--- .../CS/Project.csproj | 4 ++-- .../CS/Project.csproj | 2 +- .../CS/Project.csproj | 2 +- .../CS/Project.csproj | 2 +- .../DataWorks DbProviderFactories/CS/Project.csproj | 2 +- .../DataWorks LargeValueType.Param/CS/Project.csproj | 2 +- .../DataWorks LargeValueType.Photo/CS/Project.csproj | 4 ++-- .../DataWorks OleDb.JetAutonumberMerge/CS/Project.csproj | 4 ++-- .../DataWorks SampleApp.Odbc/CS/Project.csproj | 4 ++-- .../DataWorks SampleApp.OleDb/CS/Project.csproj | 4 ++-- .../DataWorks SampleApp.Oracle/CS/Project.csproj | 2 +- .../DataWorks SampleApp.SqlClient/CS/Project.csproj | 2 +- .../DataWorks SnapshotIsolation.Demo/CS/Project.csproj | 2 +- .../CS/Project.csproj | 2 +- .../CS/Project.csproj | 2 +- .../CS/Project.csproj | 2 +- .../CS/Project.csproj | 2 +- .../DataWorks SqlBulkCopy.SqlTransaction/CS/Project.csproj | 2 +- .../DataWorks SqlClient.CAS/CS/Project.csproj | 6 +++--- .../CS/SqlAdapter.csproj | 2 +- .../DataWorks SqlClient.GetSchemaTable/CS/Project.csproj | 2 +- .../DataWorks SqlClient.GetXmlDataReader/CS/Project.csproj | 2 +- .../DataWorks SqlClient.HasRows/CS/Project.csproj | 2 +- .../DataWorks SqlClient.MergeIdentity/CS/Project.csproj | 2 +- .../DataWorks SqlClient.NextResult/CS/Project.csproj | 2 +- .../CS/Project.csproj | 2 +- .../CS/Project.csproj | 2 +- .../DataWorks SqlClient.StoredProcedure/CS/Project.csproj | 2 +- .../DataWorks SqlCommand.ExecuteScalar/CS/Project.csproj | 2 +- .../DataWorks SqlNotification.Perms/CS/Project.csproj | 6 +++--- .../DataWorks SqlTransaction.Local/CS/Project.csproj | 2 +- .../DataWorks SqlTypes.CompareNulls/CS/Project.csproj | 2 +- .../DataWorks SqlTypes.GetTypeAW/CS/Project.csproj | 2 +- .../DataWorks SqlTypes.Guid/CS/Project.csproj | 2 +- .../DataWorks SqlTypes.IsNull/CS/Project.csproj | 2 +- .../VS_Snippets_CLR/CryptoWalkThru/cs/cryptowalkthru.csproj | 2 +- .../HowToDecryptXMLElementAsymmetric/cs/decryptxml.csproj | 2 +- .../HowToDecryptXMLElementX509/cs/decryptxml.csproj | 2 +- .../HowToEncryptXMLElementAsymmetric/cs/encryptxml.csproj | 2 +- .../HowToEncryptXMLElementSymmetric/cs/encryptxml.csproj | 2 +- .../HowToEncryptXMLElementX509/cs/encryptxml.csproj | 2 +- .../HowToSignXMLDocumentRSA/cs/signxml.csproj | 2 +- .../HowToVerifyXMLDocumentRSA/cs/verifyxml.csproj | 2 +- .../snippets/csharp/VS_Snippets_Misc/cds/cs/Project.csproj | 2 +- .../snippets/csharp/VS_Snippets_Misc/lazy/cs/Project.csproj | 2 +- .../tpldataflow_batchdatabase/cs/DataFlowBatch.csproj | 2 +- .../roslyn-sdk/SemanticQuickStart/SemanticQuickStart.csproj | 2 +- samples/snippets/csharp/xunit-test/xunit-test.csproj | 6 +++--- 69 files changed, 87 insertions(+), 87 deletions(-) diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/Classic WebData SqlDataAdapter.SqlDataAdapter Example/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/Classic WebData SqlDataAdapter.SqlDataAdapter Example/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/Classic WebData SqlDataAdapter.SqlDataAdapter Example/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/Classic WebData SqlDataAdapter.SqlDataAdapter Example/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DP Custom CopyToDataTable Examples/CS/CustomCopyToDataTableCS.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DP Custom CopyToDataTable Examples/CS/CustomCopyToDataTableCS.csproj index 2373deb9b3434..026b19d2a96b3 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DP Custom CopyToDataTable Examples/CS/CustomCopyToDataTableCS.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DP Custom CopyToDataTable Examples/CS/CustomCopyToDataTableCS.csproj @@ -9,7 +9,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DP DataView Samples/CS/DataViewSamplesCS.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DP DataView Samples/CS/DataViewSamplesCS.csproj index 189cb30fab8db..dd7fd905a921b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DP DataView Samples/CS/DataViewSamplesCS.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DP DataView Samples/CS/DataViewSamplesCS.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DP DataViewWinForms Sample/CS/DataViewWinFormsSample.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DP DataViewWinForms Sample/CS/DataViewWinFormsSample.csproj index 189cb30fab8db..dd7fd905a921b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DP DataViewWinForms Sample/CS/DataViewWinFormsSample.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DP DataViewWinForms Sample/CS/DataViewWinFormsSample.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DP LINQ to DataSet Examples/CS/LINQtoDataSetExamplesCS.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DP LINQ to DataSet Examples/CS/LINQtoDataSetExamplesCS.csproj index 2a5696a875cd3..1806b01be048d 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DP LINQ to DataSet Examples/CS/LINQtoDataSetExamplesCS.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DP LINQ to DataSet Examples/CS/LINQtoDataSetExamplesCS.csproj @@ -13,11 +13,11 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks BulkCopy.Single/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks BulkCopy.Single/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks BulkCopy.Single/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks BulkCopy.Single/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfig/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfig/CS/Project.csproj index 6ae2b895a86f3..dfc9c8c001e84 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfig/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfig/CS/Project.csproj @@ -7,7 +7,7 @@ - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfigByName/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfigByName/CS/Project.csproj index 6ae2b895a86f3..dfc9c8c001e84 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfigByName/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfigByName/CS/Project.csproj @@ -7,7 +7,7 @@ - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfigByProvider/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfigByProvider/CS/Project.csproj index f20ad768986d7..c6a69b3bbd694 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfigByProvider/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringSettings.RetrieveFromConfigByProvider/CS/Project.csproj @@ -7,7 +7,7 @@ - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStrings.Encrypt/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStrings.Encrypt/CS/Project.csproj index 6ae2b895a86f3..dfc9c8c001e84 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStrings.Encrypt/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStrings.Encrypt/CS/Project.csproj @@ -7,7 +7,7 @@ - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringsWeb.Encrypt/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringsWeb.Encrypt/CS/Project.csproj index 773f7de6f2498..7208d89833e41 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringsWeb.Encrypt/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks ConnectionStringsWeb.Encrypt/CS/Project.csproj @@ -6,7 +6,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.AcceptRejectRule/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.AcceptRejectRule/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.AcceptRejectRule/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.AcceptRejectRule/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableAdd/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableAdd/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableAdd/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableAdd/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableNavigation/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableNavigation/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableNavigation/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableNavigation/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableRelation/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableRelation/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableRelation/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks Data.DataTableRelation/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataSet.Merge/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataSet.Merge/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataSet.Merge/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataSet.Merge/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataSet.MergeAcceptChanges/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataSet.MergeAcceptChanges/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataSet.MergeAcceptChanges/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataSet.MergeAcceptChanges/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTable.CreateDataReader/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTable.CreateDataReader/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTable.CreateDataReader/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTable.CreateDataReader/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTable.Events/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTable.Events/CS/Project.csproj index d5c81e8d21b5a..f592008ad92e2 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTable.Events/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTable.Events/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTableReader.NextResult/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTableReader.NextResult/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTableReader.NextResult/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DataTableReader.NextResult/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbCommand/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbCommand/CS/Project.csproj index 22f87dbcc500a..6b7c491de35c2 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbCommand/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbCommand/CS/Project.csproj @@ -7,8 +7,8 @@ - - - + + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbCommandData/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbCommandData/CS/Project.csproj index 6ae2b895a86f3..dfc9c8c001e84 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbCommandData/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbCommandData/CS/Project.csproj @@ -7,7 +7,7 @@ - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbDataAdapter/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbDataAdapter/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbDataAdapter/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbDataAdapter/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbDataAdapterModify/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbDataAdapterModify/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbDataAdapterModify/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.DbDataAdapterModify/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.GetFactory/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.GetFactory/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.GetFactory/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories.GetFactory/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks DbProviderFactories/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks LargeValueType.Param/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks LargeValueType.Param/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks LargeValueType.Param/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks LargeValueType.Param/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks LargeValueType.Photo/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks LargeValueType.Photo/CS/Project.csproj index a8d55cf86bb70..4eb1b8ea2ae14 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks LargeValueType.Photo/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks LargeValueType.Photo/CS/Project.csproj @@ -7,7 +7,7 @@ - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks OleDb.JetAutonumberMerge/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks OleDb.JetAutonumberMerge/CS/Project.csproj index b7e9de789635d..994f42896bf76 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks OleDb.JetAutonumberMerge/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks OleDb.JetAutonumberMerge/CS/Project.csproj @@ -7,7 +7,7 @@ - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.Odbc/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.Odbc/CS/Project.csproj index 273e8ded36c93..6e16082796ba9 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.Odbc/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.Odbc/CS/Project.csproj @@ -7,7 +7,7 @@ - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.OleDb/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.OleDb/CS/Project.csproj index b7e9de789635d..994f42896bf76 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.OleDb/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.OleDb/CS/Project.csproj @@ -7,7 +7,7 @@ - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.Oracle/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.Oracle/CS/Project.csproj index a224c25a99d79..901f8d82d108f 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.Oracle/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.Oracle/CS/Project.csproj @@ -8,6 +8,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.SqlClient/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.SqlClient/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.SqlClient/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SampleApp.SqlClient/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SnapshotIsolation.Demo/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SnapshotIsolation.Demo/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SnapshotIsolation.Demo/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SnapshotIsolation.Demo/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SnapshotIsolation.DemoUpdate/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SnapshotIsolation.DemoUpdate/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SnapshotIsolation.DemoUpdate/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SnapshotIsolation.DemoUpdate/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.ColumnMappingOrdersDetails/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.ColumnMappingOrdersDetails/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.ColumnMappingOrdersDetails/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.ColumnMappingOrdersDetails/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.DefaultTransaction/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.DefaultTransaction/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.DefaultTransaction/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.DefaultTransaction/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.InternalTransaction/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.InternalTransaction/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.InternalTransaction/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.InternalTransaction/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.SqlTransaction/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.SqlTransaction/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.SqlTransaction/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlBulkCopy.SqlTransaction/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.CAS/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.CAS/CS/Project.csproj index 8d467a80bbcba..8f9d0ef3365cd 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.CAS/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.CAS/CS/Project.csproj @@ -6,11 +6,11 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.DataAdapterUpdate/CS/SqlAdapter.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.DataAdapterUpdate/CS/SqlAdapter.csproj index f503809f2c322..b3978bc6c1127 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.DataAdapterUpdate/CS/SqlAdapter.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.DataAdapterUpdate/CS/SqlAdapter.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.GetSchemaTable/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.GetSchemaTable/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.GetSchemaTable/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.GetSchemaTable/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.GetXmlDataReader/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.GetXmlDataReader/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.GetXmlDataReader/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.GetXmlDataReader/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.HasRows/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.HasRows/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.HasRows/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.HasRows/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.MergeIdentity/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.MergeIdentity/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.MergeIdentity/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.MergeIdentity/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.NextResult/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.NextResult/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.NextResult/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.NextResult/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.RetrieveIdentityStoredProcedure/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.RetrieveIdentityStoredProcedure/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.RetrieveIdentityStoredProcedure/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.RetrieveIdentityStoredProcedure/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.SprocIdentityReturn/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.SprocIdentityReturn/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.SprocIdentityReturn/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.SprocIdentityReturn/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.StoredProcedure/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.StoredProcedure/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.StoredProcedure/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlClient.StoredProcedure/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlCommand.ExecuteScalar/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlCommand.ExecuteScalar/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlCommand.ExecuteScalar/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlCommand.ExecuteScalar/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlNotification.Perms/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlNotification.Perms/CS/Project.csproj index c527e4605163a..2875b95f0719d 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlNotification.Perms/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlNotification.Perms/CS/Project.csproj @@ -7,11 +7,11 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTransaction.Local/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTransaction.Local/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTransaction.Local/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTransaction.Local/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.CompareNulls/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.CompareNulls/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.CompareNulls/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.CompareNulls/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.GetTypeAW/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.GetTypeAW/CS/Project.csproj index 50c8db8d85dfa..3785d16ad2f1b 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.GetTypeAW/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.GetTypeAW/CS/Project.csproj @@ -7,6 +7,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.Guid/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.Guid/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.Guid/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.Guid/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.IsNull/CS/Project.csproj b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.IsNull/CS/Project.csproj index e90c6d6e93c98..41a1f6cd5f86c 100644 --- a/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.IsNull/CS/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_ADO.NET/DataWorks SqlTypes.IsNull/CS/Project.csproj @@ -6,6 +6,6 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_CLR/CryptoWalkThru/cs/cryptowalkthru.csproj b/samples/snippets/csharp/VS_Snippets_CLR/CryptoWalkThru/cs/cryptowalkthru.csproj index c14ba8326ccb3..063ed284af9f9 100644 --- a/samples/snippets/csharp/VS_Snippets_CLR/CryptoWalkThru/cs/cryptowalkthru.csproj +++ b/samples/snippets/csharp/VS_Snippets_CLR/CryptoWalkThru/cs/cryptowalkthru.csproj @@ -8,6 +8,6 @@ 4 - + diff --git a/samples/snippets/csharp/VS_Snippets_CLR/HowToDecryptXMLElementAsymmetric/cs/decryptxml.csproj b/samples/snippets/csharp/VS_Snippets_CLR/HowToDecryptXMLElementAsymmetric/cs/decryptxml.csproj index 780cbcae40000..37f9705a1c001 100644 --- a/samples/snippets/csharp/VS_Snippets_CLR/HowToDecryptXMLElementAsymmetric/cs/decryptxml.csproj +++ b/samples/snippets/csharp/VS_Snippets_CLR/HowToDecryptXMLElementAsymmetric/cs/decryptxml.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_CLR/HowToDecryptXMLElementX509/cs/decryptxml.csproj b/samples/snippets/csharp/VS_Snippets_CLR/HowToDecryptXMLElementX509/cs/decryptxml.csproj index ba8fb029b6251..37f9705a1c001 100644 --- a/samples/snippets/csharp/VS_Snippets_CLR/HowToDecryptXMLElementX509/cs/decryptxml.csproj +++ b/samples/snippets/csharp/VS_Snippets_CLR/HowToDecryptXMLElementX509/cs/decryptxml.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementAsymmetric/cs/encryptxml.csproj b/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementAsymmetric/cs/encryptxml.csproj index 780cbcae40000..37f9705a1c001 100644 --- a/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementAsymmetric/cs/encryptxml.csproj +++ b/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementAsymmetric/cs/encryptxml.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementSymmetric/cs/encryptxml.csproj b/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementSymmetric/cs/encryptxml.csproj index ba8fb029b6251..37f9705a1c001 100644 --- a/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementSymmetric/cs/encryptxml.csproj +++ b/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementSymmetric/cs/encryptxml.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementX509/cs/encryptxml.csproj b/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementX509/cs/encryptxml.csproj index 9a802b21d926e..37f9705a1c001 100644 --- a/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementX509/cs/encryptxml.csproj +++ b/samples/snippets/csharp/VS_Snippets_CLR/HowToEncryptXMLElementX509/cs/encryptxml.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_CLR/HowToSignXMLDocumentRSA/cs/signxml.csproj b/samples/snippets/csharp/VS_Snippets_CLR/HowToSignXMLDocumentRSA/cs/signxml.csproj index ba8fb029b6251..37f9705a1c001 100644 --- a/samples/snippets/csharp/VS_Snippets_CLR/HowToSignXMLDocumentRSA/cs/signxml.csproj +++ b/samples/snippets/csharp/VS_Snippets_CLR/HowToSignXMLDocumentRSA/cs/signxml.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_CLR/HowToVerifyXMLDocumentRSA/cs/verifyxml.csproj b/samples/snippets/csharp/VS_Snippets_CLR/HowToVerifyXMLDocumentRSA/cs/verifyxml.csproj index ba8fb029b6251..37f9705a1c001 100644 --- a/samples/snippets/csharp/VS_Snippets_CLR/HowToVerifyXMLDocumentRSA/cs/verifyxml.csproj +++ b/samples/snippets/csharp/VS_Snippets_CLR/HowToVerifyXMLDocumentRSA/cs/verifyxml.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_Misc/cds/cs/Project.csproj b/samples/snippets/csharp/VS_Snippets_Misc/cds/cs/Project.csproj index f3462ab8ee804..2b61c2e984ef8 100644 --- a/samples/snippets/csharp/VS_Snippets_Misc/cds/cs/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_Misc/cds/cs/Project.csproj @@ -6,7 +6,7 @@ - + diff --git a/samples/snippets/csharp/VS_Snippets_Misc/lazy/cs/Project.csproj b/samples/snippets/csharp/VS_Snippets_Misc/lazy/cs/Project.csproj index a262d2bc28925..878e38824d818 100644 --- a/samples/snippets/csharp/VS_Snippets_Misc/lazy/cs/Project.csproj +++ b/samples/snippets/csharp/VS_Snippets_Misc/lazy/cs/Project.csproj @@ -4,6 +4,6 @@ net8.0 - + diff --git a/samples/snippets/csharp/VS_Snippets_Misc/tpldataflow_batchdatabase/cs/DataFlowBatch.csproj b/samples/snippets/csharp/VS_Snippets_Misc/tpldataflow_batchdatabase/cs/DataFlowBatch.csproj index 3cc2349349211..a390f7ca7487f 100644 --- a/samples/snippets/csharp/VS_Snippets_Misc/tpldataflow_batchdatabase/cs/DataFlowBatch.csproj +++ b/samples/snippets/csharp/VS_Snippets_Misc/tpldataflow_batchdatabase/cs/DataFlowBatch.csproj @@ -6,7 +6,7 @@ - + diff --git a/samples/snippets/csharp/roslyn-sdk/SemanticQuickStart/SemanticQuickStart.csproj b/samples/snippets/csharp/roslyn-sdk/SemanticQuickStart/SemanticQuickStart.csproj index bf7a2d2af5ad3..a2967c23b1709 100644 --- a/samples/snippets/csharp/roslyn-sdk/SemanticQuickStart/SemanticQuickStart.csproj +++ b/samples/snippets/csharp/roslyn-sdk/SemanticQuickStart/SemanticQuickStart.csproj @@ -7,7 +7,7 @@ - + diff --git a/samples/snippets/csharp/xunit-test/xunit-test.csproj b/samples/snippets/csharp/xunit-test/xunit-test.csproj index f69c5a87b38a3..9c2036a655426 100644 --- a/samples/snippets/csharp/xunit-test/xunit-test.csproj +++ b/samples/snippets/csharp/xunit-test/xunit-test.csproj @@ -6,9 +6,9 @@ - - - + + + From fe0cef5f65b2b40b70e4420521e41914ccaddca4 Mon Sep 17 00:00:00 2001 From: "Andy (Steve) De George" <67293991+adegeo@users.noreply.github.com> Date: Wed, 23 Sep 2026 18:34:04 -0700 Subject: [PATCH 17/24] GHCP Upgrade redesign (#56227) --- .openpublishing.redirection.core.json | 12 +++++ .../github-copilot-upgrade/best-practices.md | 18 +++---- .../github-copilot-upgrade/concepts.md | 21 ++++---- .../github-copilot-upgrade/customization.md | 8 +-- .../github-copilot-upgrade/dashboard.md | 10 ++-- ...net-how-to-custom-upgrade-instructions.md} | 2 +- ...net-how-to-upgrade-with-github-copilot.md} | 0 .../github-copilot-upgrade/dotnet-overview.md | 41 +++++++++++++++ ...ills.md => dotnet-scenarios-and-skills.md} | 12 ++--- .../porting/github-copilot-upgrade/faq.yml | 26 +++++++--- .../porting/github-copilot-upgrade/index.yml | 47 ++++++++--------- .../porting/github-copilot-upgrade/install.md | 11 ++-- .../javascript-typescript-capabilities.md | 38 ++++++++++++++ .../javascript-typescript-overview.md | 33 ++++++++++++ ...ascript-typescript-upgrade-dependencies.md | 51 ++++++++++++++++++ ...avascript-typescript-upgrade-typescript.md | 52 +++++++++++++++++++ ...ascript-typescript-validate-application.md | 47 +++++++++++++++++ .../github-copilot-upgrade/overview.md | 33 ++++++++---- .../porting/github-copilot-upgrade/toc.yml | 43 ++++++++++----- .../github-copilot-upgrade/troubleshooting.md | 29 ++++++++--- .../working-with-agent.md | 6 ++- docs/navigate/migration-guide/toc.yml | 21 ++++---- 22 files changed, 447 insertions(+), 114 deletions(-) rename docs/core/porting/github-copilot-upgrade/{how-to-custom-upgrade-instructions.md => dotnet-how-to-custom-upgrade-instructions.md} (98%) rename docs/core/porting/github-copilot-upgrade/{how-to-upgrade-with-github-copilot.md => dotnet-how-to-upgrade-with-github-copilot.md} (100%) create mode 100644 docs/core/porting/github-copilot-upgrade/dotnet-overview.md rename docs/core/porting/github-copilot-upgrade/{scenarios-and-skills.md => dotnet-scenarios-and-skills.md} (97%) create mode 100644 docs/core/porting/github-copilot-upgrade/javascript-typescript-capabilities.md create mode 100644 docs/core/porting/github-copilot-upgrade/javascript-typescript-overview.md create mode 100644 docs/core/porting/github-copilot-upgrade/javascript-typescript-upgrade-dependencies.md create mode 100644 docs/core/porting/github-copilot-upgrade/javascript-typescript-upgrade-typescript.md create mode 100644 docs/core/porting/github-copilot-upgrade/javascript-typescript-validate-application.md diff --git a/.openpublishing.redirection.core.json b/.openpublishing.redirection.core.json index 0bf161a99e6cf..88021bc55b234 100644 --- a/.openpublishing.redirection.core.json +++ b/.openpublishing.redirection.core.json @@ -1386,6 +1386,18 @@ "source_path_from_root": "/docs/core/porting/github-copilot-app-modernization/working-with-agent.md", "redirect_url": "/dotnet/core/porting/github-copilot-upgrade/working-with-agent" }, + { + "source_path_from_root": "/docs/core/porting/github-copilot-upgrade/how-to-custom-upgrade-instructions.md", + "redirect_url": "/dotnet/core/porting/github-copilot-upgrade/dotnet-how-to-custom-upgrade-instructions" + }, + { + "source_path_from_root": "/docs/core/porting/github-copilot-upgrade/how-to-upgrade-with-github-copilot.md", + "redirect_url": "/dotnet/core/porting/github-copilot-upgrade/dotnet-how-to-upgrade-with-github-copilot" + }, + { + "source_path_from_root": "/docs/core/porting/github-copilot-upgrade/scenarios-and-skills.md", + "redirect_url": "/dotnet/core/porting/github-copilot-upgrade/dotnet-scenarios-and-skills" + }, { "source_path_from_root": "/docs/core/porting/how-to-upgrade-with-github-copilot.md", "redirect_url": "/dotnet/core/porting/github-copilot-upgrade/how-to-upgrade-with-github-copilot" diff --git a/docs/core/porting/github-copilot-upgrade/best-practices.md b/docs/core/porting/github-copilot-upgrade/best-practices.md index 17874b5831878..a3a3f3889f9e0 100644 --- a/docs/core/porting/github-copilot-upgrade/best-practices.md +++ b/docs/core/porting/github-copilot-upgrade/best-practices.md @@ -1,17 +1,17 @@ --- title: Best practices for GitHub Copilot upgrade -description: "Learn best practices for using GitHub Copilot upgrade to upgrade .NET projects, including preparation, collaboration tips, common pitfalls, and recovery strategies." +description: "Learn how to prepare projects, collaborate with the agent, avoid common upgrade problems, and recover from unsuccessful changes." ms.topic: best-practice -ms.date: 07/07/2026 +ms.date: 09/21/2026 ai-usage: ai-assisted -#customer intent: As a developer, I want to follow best practices when using GitHub Copilot upgrade so that I can get the best results from my .NET upgrades and avoid common problems. +#customer intent: As a developer, I want to follow best practices when I use GitHub Copilot upgrade so that I can improve upgrade results and avoid common problems. --- # Best practices for GitHub Copilot upgrade -Follow these guidelines to get the best results from GitHub Copilot upgrade when upgrading .NET projects. +Follow these guidelines to get the best results from GitHub Copilot upgrade across supported technologies. Technology-specific package managers, build systems, and validation tools might require additional preparation. ## Before you start @@ -119,13 +119,13 @@ Watch for these common issues that can slow down or complicate an upgrade. The agent works project-by-project, so large solutions take time. Be patient and monitor progress. Consider starting with one representative project end-to-end before committing to the full solution. A single-project pilot surfaces systemic issues early. -### Private NuGet feeds +### Private package feeds -For private NuGet feeds, authenticate before starting the upgrade (for example, through your organization's credential provider or feed configuration). Without authentication, package restore failures block progress. +For private NuGet or npm feeds, authenticate before you start the upgrade. Use your organization's credential provider or package-manager configuration. Without authentication, package restore or installation failures block progress. -### Custom MSBuild targets and imports +### Custom build logic -Complex build customizations, such as custom `.targets` files, conditional imports, or non-standard build logic, can confuse the assessment and cause unexpected build failures. If your solution has these customizations, mention them in chat or in `scenario-instructions.md` so the agent can account for them. +Complex build customizations, such as custom MSBuild `.targets` files, package scripts, conditional imports, or nonstandard build tools, can confuse the assessment and cause unexpected failures. If your project has these customizations, mention them in chat or in `scenario-instructions.md` so the agent can account for them. ### Session timeouts @@ -225,6 +225,6 @@ Your original code is untouched. If you're working without source control, resto ## Related content - [What is GitHub Copilot upgrade?](overview.md) -- [Upgrade a .NET app with GitHub Copilot upgrade](how-to-upgrade-with-github-copilot.md) +- [Upgrade a .NET app with GitHub Copilot upgrade](dotnet-how-to-upgrade-with-github-copilot.md) - [Core concepts](concepts.md) - [Troubleshoot GitHub Copilot upgrade](troubleshooting.md) diff --git a/docs/core/porting/github-copilot-upgrade/concepts.md b/docs/core/porting/github-copilot-upgrade/concepts.md index 367ec09e211a1..ff903a8cd11e3 100644 --- a/docs/core/porting/github-copilot-upgrade/concepts.md +++ b/docs/core/porting/github-copilot-upgrade/concepts.md @@ -2,7 +2,7 @@ title: GitHub Copilot upgrade core concepts description: "Learn the key concepts behind GitHub Copilot upgrade, including scenarios, skills, tasks, the three-stage workflow, state management, and flow modes." ms.topic: concept-article -ms.date: 07/07/2026 +ms.date: 09/21/2026 ai-usage: ai-assisted #customer intent: As a developer, I want to understand the core concepts of GitHub Copilot upgrade so that I can use the agent effectively and get the best results from my upgrades. @@ -11,16 +11,16 @@ ai-usage: ai-assisted # GitHub Copilot upgrade concepts -GitHub Copilot upgrade uses a structured approach to upgrade .NET projects. Understanding how the agent works, including its scenarios, skills, tasks, and workflow, helps you collaborate with the agent effectively and get the best results. +GitHub Copilot upgrade uses structured workflows to upgrade supported projects. Learn how the agent uses technology packs, scenarios, skills, tasks, and persistent state to plan and validate changes. > [!TIP] -> Think of the agent as a skilled colleague who understands .NET deeply, follows a structured plan, and adapts to your feedback. The more context you give, the better the agent performs. +> Describe the outcome that you want instead of memorizing scenario or skill names. The agent detects the technologies in your repository and selects relevant capabilities. ## The agent as a teammate The agent excels at collaboration, not automation in a vacuum: -- **Deep .NET knowledge:** The agent understands project files, NuGet dependencies, breaking changes, and upgrade patterns across dozens of .NET technologies for both C# and Visual Basic projects. +- **Technology-specific knowledge:** Technology packs provide upgrade workflows, tools, and guidance for supported languages, frameworks, package managers, and project types. - **Structured workflow:** Every upgrade goes through assessment, planning, and execution. No random changes, no surprises. - **Learns your preferences:** When you say "always use explicit types instead of `var`," the agent writes that preference to `scenario-instructions.md` and remembers it across sessions. - **Correctable mid-flight:** Made a wrong call? Tell the agent. It adapts and applies the correction going forward. @@ -28,7 +28,7 @@ The agent excels at collaboration, not automation in a vacuum: ## Scenarios -A _scenario_ is a managed, end-to-end upgrade workflow. When you tell the agent "upgrade my solution to .NET 10," you're triggering the `.NET version upgrade` scenario. +A _scenario_ is a managed, end-to-end upgrade workflow. For example, _"upgrade my solution to .NET 10"_ triggers the .NET version upgrade scenario. A technology pack can also provide a workflow for a specialized integration, such as Dependabot validation for a JavaScript or TypeScript dependency update. ### How scenarios are discovered @@ -44,7 +44,7 @@ You can also ask directly: _"What scenarios are available for my solution?"_ Each active scenario gets its own folder at `.github/upgrades/{scenarioId}/`. The scenario folder contains the plan, task progress, your preferences, and execution logs. The folder is part of your Git repository. -For a complete list of scenarios, see [Scenarios and skills reference](scenarios-and-skills.md). +For available workflows, see [.NET scenarios and skills](dotnet-scenarios-and-skills.md) and [JavaScript and TypeScript capabilities](javascript-typescript-capabilities.md). ## The workflow lifecycle @@ -114,17 +114,18 @@ During the assessment stage, the agent evaluates your solution and recommends on _Skills_ are smaller, targeted modernization capabilities. When the agent encounters EF6 code during an upgrade, it loads the EF6-to-EF-Core skill with detailed, step-by-step upgrade instructions. Invoke a skill directly during an upgrade: _"upgrade the WCF services in my project to CoreWCF."_ -The agent ships with 30+ built-in skills organized by domain: +Technology packs provide built-in skills organized by domain. Examples include: - **Data access:** EF6 to EF Core (code-first and EDMX), LINQ to SQL, and SqlClient upgrade - **Web/ASP.NET:** Identity, Global.asax, OWIN, MVC routing/filters/bundling, and WCF to CoreWCF - **Serialization:** Newtonsoft.Json to System.Text.Json - **Cloud:** Azure Functions in-process to isolated worker model - **Libraries:** ADAL to MSAL, SignalR, PowerShell SDK, and more +- **JavaScript and TypeScript:** npm dependency upgrades, TypeScript compiler upgrades, framework migration guidance, and runtime validation Skills load automatically based on what the agent detects in your codebase. You don't need to manage skill loading. Just describe what you need. -For the complete list, see [Scenarios and skills reference](scenarios-and-skills.md). +For technology-specific lists, see [.NET scenarios and skills](dotnet-scenarios-and-skills.md) and [JavaScript and TypeScript capabilities](javascript-typescript-capabilities.md). ## Tasks @@ -208,7 +209,7 @@ Best for first-time users, complex solutions, and when you want to learn the pro ## Related content - [What is GitHub Copilot upgrade?](overview.md) -- [Scenarios and skills reference](scenarios-and-skills.md) -- [Upgrade a .NET app with GitHub Copilot upgrade](how-to-upgrade-with-github-copilot.md) +- [.NET scenarios and skills](dotnet-scenarios-and-skills.md) +- [Upgrade a .NET app with GitHub Copilot upgrade](dotnet-how-to-upgrade-with-github-copilot.md) - [Best practices](best-practices.md) - [Troubleshoot GitHub Copilot upgrade](troubleshooting.md) diff --git a/docs/core/porting/github-copilot-upgrade/customization.md b/docs/core/porting/github-copilot-upgrade/customization.md index 50e1acce6d729..436a5b78ea5df 100644 --- a/docs/core/porting/github-copilot-upgrade/customization.md +++ b/docs/core/porting/github-copilot-upgrade/customization.md @@ -2,7 +2,7 @@ title: Customize GitHub Copilot upgrade description: "Learn how to customize GitHub Copilot upgrade with custom skills, custom scenarios, scenario artifact edits, and chat instructions to encode your team's upgrade patterns." ms.topic: concept-article -ms.date: 07/07/2026 +ms.date: 09/21/2026 ai-usage: ai-assisted #customer intent: As a developer, I want to customize GitHub Copilot upgrade so that I can encode my team's upgrade patterns, enforce coding standards during upgrades, and define custom upgrade workflows. @@ -184,7 +184,7 @@ equivalents, updating configuration, and verifying behavior. | `name` | Yes | Unique identifier in kebab-case. Start with a gerund verb (for example, `upgrading-`, `converting-`). Maximum 64 characters. | | `description` | Yes | Determines when the agent loads the skill. Include trigger phrases, such as words and patterns that should activate the skill. | | `metadata.discovery` | No | Controls when the skill loads: `preload` (always available), `lazy` (on-demand when description matches, default and recommended), or `scenario` (defines a workflow orchestrator). | -| `metadata.traits` | No | Keywords describing the technologies in your project, such as `.NET`, `CSharp`, `VisualBasic`, or `DotNetCore`. | +| `metadata.traits` | No | Keywords that describe the technologies in your project, such as `.NET`, `CSharp`, `VisualBasic`, `DotNetCore`, `NodeJs`, `TypeScript`, or `JavaScript`. | ### Skill authoring best practices @@ -299,6 +299,6 @@ The agent collects skills from all sources. When skills have overlapping scope, ## Related content - [Core concepts](concepts.md) -- [Scenarios and skills reference](scenarios-and-skills.md) -- [Apply custom upgrade instructions](how-to-custom-upgrade-instructions.md) +- [.NET scenarios and skills](dotnet-scenarios-and-skills.md) +- [Apply custom .NET upgrade instructions](dotnet-how-to-custom-upgrade-instructions.md) - [Best practices](best-practices.md) diff --git a/docs/core/porting/github-copilot-upgrade/dashboard.md b/docs/core/porting/github-copilot-upgrade/dashboard.md index c0d520d852c83..c813188bdaef9 100644 --- a/docs/core/porting/github-copilot-upgrade/dashboard.md +++ b/docs/core/porting/github-copilot-upgrade/dashboard.md @@ -2,7 +2,7 @@ title: Monitor upgrades with the Upgrade Dashboard description: "Learn how to use the Upgrade Dashboard to monitor progress, review assessment results, inspect dependencies, and check upgrade settings." ms.topic: concept-article -ms.date: 08/03/2026 +ms.date: 09/21/2026 ai-usage: ai-assisted #customer intent: As a developer using GitHub Copilot upgrade, I want to understand the Upgrade Dashboard so that I can monitor my upgrade progress and review assessment results visually. @@ -19,6 +19,9 @@ The Upgrade Dashboard provides a visual view of a GitHub Copilot upgrade session - Check the upgrade strategy and settings. - Publish the assessment as a private GitHub gist for team review. +> [!NOTE] +> Dashboard fields depend on the active scenario and technology pack. The project, target framework, NuGet package, and compatibility views in this article describe a .NET version upgrade. + In the GitHub Copilot app for desktop, the dashboard opens as a side panel. In other environments, such as the GitHub Copilot CLI or an IDE, it opens in your browser. ## Open the dashboard @@ -178,5 +181,6 @@ Use the **Log**, **Commits**, and **By file** subtabs to review activity. Each l ## Related content - [What is GitHub Copilot upgrade?](overview.md) -- [Upgrade with GitHub Copilot](how-to-upgrade-with-github-copilot.md) -- [Scenarios and skills reference](scenarios-and-skills.md) +- [Upgrade .NET projects](dotnet-overview.md) +- [Upgrade JavaScript and TypeScript projects](javascript-typescript-overview.md) +- [.NET scenarios and skills](dotnet-scenarios-and-skills.md) diff --git a/docs/core/porting/github-copilot-upgrade/how-to-custom-upgrade-instructions.md b/docs/core/porting/github-copilot-upgrade/dotnet-how-to-custom-upgrade-instructions.md similarity index 98% rename from docs/core/porting/github-copilot-upgrade/how-to-custom-upgrade-instructions.md rename to docs/core/porting/github-copilot-upgrade/dotnet-how-to-custom-upgrade-instructions.md index a17ba992aa982..4d234ed0a8ee1 100644 --- a/docs/core/porting/github-copilot-upgrade/how-to-custom-upgrade-instructions.md +++ b/docs/core/porting/github-copilot-upgrade/dotnet-how-to-custom-upgrade-instructions.md @@ -159,7 +159,7 @@ Remove or consolidate any temporary instruction files to avoid overlapping trans ## Related content -- [Upgrade a .NET app with GitHub Copilot upgrade](how-to-upgrade-with-github-copilot.md) +- [Upgrade a .NET app with GitHub Copilot upgrade](dotnet-how-to-upgrade-with-github-copilot.md) - [GitHub Copilot upgrade FAQ](faq.yml) - [What is GitHub Copilot upgrade?](overview.md) - [Install GitHub Copilot upgrade](install.md) diff --git a/docs/core/porting/github-copilot-upgrade/how-to-upgrade-with-github-copilot.md b/docs/core/porting/github-copilot-upgrade/dotnet-how-to-upgrade-with-github-copilot.md similarity index 100% rename from docs/core/porting/github-copilot-upgrade/how-to-upgrade-with-github-copilot.md rename to docs/core/porting/github-copilot-upgrade/dotnet-how-to-upgrade-with-github-copilot.md diff --git a/docs/core/porting/github-copilot-upgrade/dotnet-overview.md b/docs/core/porting/github-copilot-upgrade/dotnet-overview.md new file mode 100644 index 0000000000000..e8bdb49e48480 --- /dev/null +++ b/docs/core/porting/github-copilot-upgrade/dotnet-overview.md @@ -0,0 +1,41 @@ +--- +title: Upgrade .NET projects with GitHub Copilot +description: Learn which .NET upgrade and modernization workflows GitHub Copilot upgrade supports. +ms.topic: overview +ms.date: 09/21/2026 +ai-usage: ai-generated + +#customer intent: As a .NET developer, I want to understand which upgrades GitHub Copilot can perform so that I can choose the right workflow for my project. +--- + +# Upgrade .NET projects with GitHub Copilot + +GitHub Copilot upgrade supports C# and Visual Basic projects across modern .NET and .NET Framework. Use the agent to upgrade target frameworks, modernize project files, replace libraries, and migrate application architectures. + +## Choose an upgrade workflow + +- To move an application to a newer .NET version, follow [Upgrade a .NET app](dotnet-how-to-upgrade-with-github-copilot.md). +- To encode transformations for your codebase, follow [Apply custom .NET upgrade instructions](dotnet-how-to-custom-upgrade-instructions.md). +- To review available workflows and focused capabilities, see [.NET scenarios and skills](dotnet-scenarios-and-skills.md). +- To move a .NET application to Azure services, see [GitHub Copilot modernization overview](../../../azure/migration/appmod/overview.md). + +The agent can combine related capabilities during an upgrade. For example, a .NET version upgrade might also convert legacy project files, update NuGet packages, or migrate an unsupported library. + +## Supported project types + +The .NET technology pack supports common project types, including: + +- ASP.NET Core, ASP.NET Web Forms, and Blazor applications. +- Azure Functions projects. +- Windows Forms, Windows Presentation Foundation (WPF), WinUI, .NET MAUI, and Xamarin applications. +- Class libraries, console applications, and test projects. +- Visual Studio extensions. + +Support varies by upgrade scenario. For the complete capability list, see [.NET scenarios and skills](dotnet-scenarios-and-skills.md). + +## Related content + +- [GitHub Copilot upgrade overview](overview.md) +- [Install GitHub Copilot upgrade](install.md) +- [GitHub Copilot upgrade concepts](concepts.md) +- [Troubleshoot GitHub Copilot upgrade](troubleshooting.md) diff --git a/docs/core/porting/github-copilot-upgrade/scenarios-and-skills.md b/docs/core/porting/github-copilot-upgrade/dotnet-scenarios-and-skills.md similarity index 97% rename from docs/core/porting/github-copilot-upgrade/scenarios-and-skills.md rename to docs/core/porting/github-copilot-upgrade/dotnet-scenarios-and-skills.md index fc156846e04fb..164f11b97fd05 100644 --- a/docs/core/porting/github-copilot-upgrade/scenarios-and-skills.md +++ b/docs/core/porting/github-copilot-upgrade/dotnet-scenarios-and-skills.md @@ -1,15 +1,15 @@ --- -title: GitHub Copilot upgrade scenarios and skills +title: .NET upgrade scenarios and skills description: "Complete reference of all scenarios and built-in upgrade skills available in GitHub Copilot upgrade for .NET, organized by domain." ms.topic: reference ms.date: 08/13/2026 ai-usage: ai-assisted -#customer intent: As a developer, I want to see all the scenarios and skills that GitHub Copilot upgrade supports so that I can understand which upgrade tasks the agent can handle for me. +#customer intent: As a .NET developer, I want to review the available scenarios and skills so that I can understand which .NET upgrade tasks the agent can handle. --- -# Scenarios and skills reference +# .NET scenarios and skills GitHub Copilot upgrade for .NET helps you upgrade and modernize through _scenarios_ and _skills_: @@ -269,11 +269,11 @@ Create custom skills to teach the agent patterns specific to your codebase, such Place skills in your repository (`.github/skills/`) or user profile (`%UserProfile%/.copilot/skills/`), and the agent picks them up automatically. -For more information about creating custom skills, see [Apply custom upgrade instructions](how-to-custom-upgrade-instructions.md). +For more information about creating custom skills, see [Apply custom .NET upgrade instructions](dotnet-how-to-custom-upgrade-instructions.md). ## Related content - [What is GitHub Copilot upgrade?](overview.md) - [Core concepts](concepts.md) -- [Upgrade a .NET app with GitHub Copilot upgrade](how-to-upgrade-with-github-copilot.md) -- [Apply custom upgrade instructions](how-to-custom-upgrade-instructions.md) +- [Upgrade a .NET app with GitHub Copilot upgrade](dotnet-how-to-upgrade-with-github-copilot.md) +- [Apply custom .NET upgrade instructions](dotnet-how-to-custom-upgrade-instructions.md) diff --git a/docs/core/porting/github-copilot-upgrade/faq.yml b/docs/core/porting/github-copilot-upgrade/faq.yml index a90425bb83c6d..e93d6950883a6 100644 --- a/docs/core/porting/github-copilot-upgrade/faq.yml +++ b/docs/core/porting/github-copilot-upgrade/faq.yml @@ -1,10 +1,10 @@ ### YamlMime:FAQ metadata: - title: GitHub Copilot upgrade for .NET FAQ - description: "This article answers frequently asked questions about GitHub Copilot upgrade for .NET." + title: GitHub Copilot upgrade FAQ + description: "Find answers to frequently asked questions about GitHub Copilot upgrade and its supported technology packs." titleSuffix: "" ms.topic: faq - ms.date: 07/07/2026 + ms.date: 09/21/2026 title: GitHub Copilot upgrade FAQ summary: | @@ -27,7 +27,7 @@ sections: questions: - question: What can the agent do? answer: | - GitHub Copilot upgrade helps you upgrade your .NET (.NET, .NET Core, and .NET Framework) projects to newer versions of .NET. It upgrades dependencies and fixes errors in code after the upgrade. The agent performs the following steps in a Copilot chat session: + GitHub Copilot upgrade helps you upgrade and modernize supported projects. Technology packs provide workflows for .NET, JavaScript, and TypeScript projects. The agent performs the following steps in a Copilot chat session: - Analyzes your projects and proposes an upgrade plan. - Runs a series of tasks to upgrade your projects according to the plan. @@ -52,7 +52,7 @@ sections: - question: Can I customize or guide the agent? answer: | - The agent uses customization Copilot provides, such as instruction files and skills. Customization is based on what your Copilot supports. The agent includes 30+ built-in upgrade skills that load automatically based on the technologies detected in your codebase. You can also create custom skills and scenarios. For more information, see [Apply custom upgrade instructions](how-to-custom-upgrade-instructions.md). + The agent uses customization Copilot provides, such as instruction files and skills. Customization is based on what your Copilot supports. Built-in upgrade skills load automatically based on the technologies detected in your codebase. You can also create custom skills and scenarios. For more information, see [Customize GitHub Copilot upgrade](customization.md). If you manually adjust a fix, provide additional instructions in chat, or update the Markdown in the plan file, the agent learns from that interaction in the short term. Preferences and decisions are saved to `scenario-instructions.md` in the `.github/upgrades/` folder so they persist across sessions. @@ -79,7 +79,7 @@ sections: questions: - question: What can the agent upgrade? answer: | - GitHub Copilot upgrade helps you upgrade your .NET projects. The agent supports multiple scenarios beyond framework upgrades, including Aspire integration, SDK-style conversion, Newtonsoft.Json upgrade, SqlClient upgrade, Azure Functions upgrade, and Semantic Kernel to Microsoft Agent Framework upgrade. For a full reference, see [Scenarios and skills reference](scenarios-and-skills.md). + GitHub Copilot upgrade helps you upgrade your .NET projects. The agent supports multiple scenarios beyond framework upgrades, including Aspire integration, SDK-style conversion, Newtonsoft.Json upgrade, SqlClient upgrade, Azure Functions upgrade, and Semantic Kernel to Microsoft Agent Framework upgrade. For a full reference, see [.NET scenarios and skills](dotnet-scenarios-and-skills.md). The agent works with these project types: @@ -116,6 +116,20 @@ sections: answer: | Yes. Because each task is committed separately, you can cherry-pick specific commits by using standard Git commands. Review the commit history with `git log --oneline` and use `git cherry-pick` to select individual changes. + - name: Upgrade JavaScript and TypeScript projects + questions: + - question: What JavaScript and TypeScript upgrades are supported? + answer: | + The agent can update selected npm packages or all project dependencies, upgrade the TypeScript compiler across major versions, repair compatibility problems, and validate application behavior. For details, see [Upgrade JavaScript and TypeScript projects](javascript-typescript-overview.md). + + - question: Can the agent upgrade JavaScript projects without TypeScript? + answer: | + Yes. JavaScript-only projects don't need a `tsconfig.json`. The agent preserves valid JavaScript and uses the project's build, test, and runtime behavior to validate dependency updates. + + - question: How does the agent validate a JavaScript or TypeScript upgrade? + answer: | + The agent captures a baseline before the upgrade and repeats the relevant checks afterward. Based on the project, checks can include compilation, bundler builds, tests, command-line execution, server startup, endpoint probes, and browser flows. For details, see [Validate a JavaScript or TypeScript application](javascript-typescript-validate-application.md). + - name: Migrate to Azure questions: - question: Can GitHub Copilot upgrade migrate my app to Azure? diff --git a/docs/core/porting/github-copilot-upgrade/index.yml b/docs/core/porting/github-copilot-upgrade/index.yml index cc36ab110a5cd..5692ec124cdf9 100644 --- a/docs/core/porting/github-copilot-upgrade/index.yml +++ b/docs/core/porting/github-copilot-upgrade/index.yml @@ -1,21 +1,21 @@ ### YamlMime:Landing -title: Use GitHub Copilot upgrade to upgrade .NET apps -summary: Learn about upgrading .NET apps with GitHub Copilot upgrade. +title: Use GitHub Copilot upgrade to modernize projects +summary: Upgrade and modernize .NET, JavaScript, and TypeScript projects with GitHub Copilot. metadata: - title: Use GitHub Copilot upgrade to upgrade .NET apps - description: Learn about upgrading .NET apps with GitHub Copilot upgrade. + title: Use GitHub Copilot upgrade to modernize projects + description: Upgrade and modernize .NET, JavaScript, and TypeScript projects with GitHub Copilot. ms.topic: landing-page - ms.date: 08/03/2026 + ms.date: 09/21/2026 landingContent: - - title: Upgrade .NET apps + - title: Get started linkLists: - linkListType: overview links: - - text: Upgrade .NET apps + - text: GitHub Copilot upgrade overview url: overview.md - linkListType: get-started links: @@ -27,34 +27,35 @@ landingContent: url: concepts.md - text: Working with the agent url: working-with-agent.md + + - title: Choose a technology + linkLists: + - linkListType: how-to-guide + links: + - text: Upgrade .NET projects + url: dotnet-overview.md + - text: Upgrade JavaScript and TypeScript projects + url: javascript-typescript-overview.md + + - title: Manage complex upgrades + linkLists: + - linkListType: concept + links: - text: Dashboard url: dashboard.md - text: Customization url: customization.md - linkListType: how-to-guide links: - - text: How to upgrade a .NET app - url: how-to-upgrade-with-github-copilot.md - - text: How to apply custom upgrade instructions - url: how-to-custom-upgrade-instructions.md - text: Troubleshooting url: troubleshooting.md - linkListType: learn links: - text: Best practices url: best-practices.md - - text: Scenarios and skills reference - url: scenarios-and-skills.md - text: FAQ url: faq.yml - - title: Migrate .NET apps to Azure - linkLists: - - linkListType: overview - links: - - text: GitHub Copilot modernization overview - url: ../../../azure/migration/appmod/overview.md - - title: Get help and community linkLists: - linkListType: how-to-guide @@ -65,7 +66,5 @@ landingContent: url: /visualstudio/ide/report-a-problem - linkListType: learn links: - - text: .NET on Q&A - url: /answers/products/dotnet - - text: .NET tech community forums - url: https://techcommunity.microsoft.com/category/dotnet + - text: GitHub Copilot documentation + url: https://docs.github.com/copilot diff --git a/docs/core/porting/github-copilot-upgrade/install.md b/docs/core/porting/github-copilot-upgrade/install.md index e0cdc09010c11..5629ad804a367 100644 --- a/docs/core/porting/github-copilot-upgrade/install.md +++ b/docs/core/porting/github-copilot-upgrade/install.md @@ -2,17 +2,17 @@ title: Install GitHub Copilot upgrade description: "Learn how to install and set up GitHub Copilot upgrade across Visual Studio, Visual Studio Code, GitHub Copilot CLI, GitHub Copilot app, and GitHub.com." ms.topic: install-set-up-deploy -ms.date: 07/07/2026 +ms.date: 09/21/2026 ai-usage: ai-assisted zone_pivot_groups: copilot-upgrade-install -#customer intent: As a developer, I want to install GitHub Copilot upgrade so that I can upgrade my .NET applications. +#customer intent: As a developer, I want to install GitHub Copilot upgrade so that I can upgrade supported projects in my preferred development environment. --- # Install GitHub Copilot upgrade -GitHub Copilot upgrade works across multiple development environments. Choose your preferred environment to install and set up GitHub Copilot upgrade. +GitHub Copilot upgrade works across multiple development environments. Choose your preferred environment to install and set up the agent. Technology support and prerequisites can vary by environment. ::: zone pivot="visualstudio" @@ -56,7 +56,7 @@ Install as a Visual Studio Code extension: 1. Search for **GitHub Copilot upgrade**. 1. Select **Install**. -The extension automatically acquires the .NET SDK if it's missing, registers tools, and adds the agent to Copilot Chat as `Upgrade`. +The extension registers the available upgrade tools and adds the agent to Copilot Chat as `Upgrade`. For .NET projects, the extension also acquires the .NET SDK if it's missing. ## Verify the installation @@ -155,6 +155,7 @@ Add the custom coding agent to your repository: ## Related content - [What is GitHub Copilot upgrade?](overview.md) -- [Upgrade a .NET app with GitHub Copilot upgrade](how-to-upgrade-with-github-copilot.md) +- [Upgrade .NET projects](dotnet-overview.md) +- [Upgrade JavaScript and TypeScript projects](javascript-typescript-overview.md) - [Core concepts](concepts.md) - [GitHub Copilot upgrade FAQ](faq.yml) diff --git a/docs/core/porting/github-copilot-upgrade/javascript-typescript-capabilities.md b/docs/core/porting/github-copilot-upgrade/javascript-typescript-capabilities.md new file mode 100644 index 0000000000000..182a9d15dba1d --- /dev/null +++ b/docs/core/porting/github-copilot-upgrade/javascript-typescript-capabilities.md @@ -0,0 +1,38 @@ +--- +title: JavaScript and TypeScript upgrade capabilities +description: Review the JavaScript and TypeScript workflows and focused capabilities available in GitHub Copilot upgrade. +ms.topic: reference +ms.date: 09/21/2026 +ai-usage: ai-generated + +#customer intent: As a JavaScript or TypeScript developer, I want to compare the available GitHub Copilot upgrade capabilities so that I can choose the right workflow. +--- + +# JavaScript and TypeScript upgrade capabilities + +GitHub Copilot upgrade provides workflows for common JavaScript and TypeScript maintenance tasks. Describe the result that you want, and the agent selects the relevant workflow and project-specific guidance. + +## Upgrade workflows + +| Capability | Use it to | Example prompt | +|---|---|---| +| Dependency upgrade | Update selected npm packages or all project dependencies and repair breaking changes. | _"Upgrade all dependencies in this project."_ | +| TypeScript compiler upgrade | Move the TypeScript compiler through major versions and resolve new compiler errors at each step. | _"Upgrade TypeScript to version 7."_ | +| Runtime validation | Compile, build, test, run, and inspect an application before or after an upgrade. | _"Validate this application."_ | +| Dependabot update validation | Validate a JavaScript or TypeScript dependency update that Dependabot already selected and applied. | This workflow runs as part of a configured Dependabot update. | + +## Framework-specific guidance + +During a dependency upgrade, the agent can detect supported frameworks and apply migration guidance for their package relationships and breaking changes. The guidance can define required peer packages, package groups that must move together, codemods, and checks for individual major-version transitions. + +The available guidance evolves independently from the top-level workflow. Ask the agent to assess the repository when you need to know which framework-specific guidance applies to the current project. + +## Validation behavior + +Dependency and compiler upgrades include pre-upgrade and post-upgrade validation. Depending on the project, the agent can use compilation, bundler builds, tests, command-line execution, server startup, endpoint probes, and browser flows. For more information, see [Validate a JavaScript or TypeScript application](javascript-typescript-validate-application.md). + +## Related content + +- [Upgrade JavaScript and TypeScript projects](javascript-typescript-overview.md) +- [Upgrade JavaScript and TypeScript dependencies](javascript-typescript-upgrade-dependencies.md) +- [Upgrade the TypeScript compiler](javascript-typescript-upgrade-typescript.md) diff --git a/docs/core/porting/github-copilot-upgrade/javascript-typescript-overview.md b/docs/core/porting/github-copilot-upgrade/javascript-typescript-overview.md new file mode 100644 index 0000000000000..99a1c89f91b16 --- /dev/null +++ b/docs/core/porting/github-copilot-upgrade/javascript-typescript-overview.md @@ -0,0 +1,33 @@ +--- +title: Upgrade JavaScript and TypeScript projects with GitHub Copilot +description: Learn how GitHub Copilot upgrade updates JavaScript and TypeScript dependencies, upgrades the TypeScript compiler, and validates applications. +ms.topic: overview +ms.date: 09/21/2026 +ai-usage: ai-generated + +#customer intent: As a JavaScript or TypeScript developer, I want to understand which upgrades GitHub Copilot can perform so that I can choose the right workflow for my project. +--- + +# Upgrade JavaScript and TypeScript projects with GitHub Copilot + +GitHub Copilot upgrade can update npm dependencies, upgrade the TypeScript compiler, repair compatibility problems, and validate JavaScript and TypeScript applications. The agent detects the project structure and applies guidance for supported frameworks and libraries. + +JavaScript-only projects don't need a `tsconfig.json`. For these projects, the agent preserves valid JavaScript and uses the project's own build and test scripts as part of validation. + +## Choose an upgrade workflow + +- To update one package, a group of packages, or all project dependencies, see [Upgrade JavaScript and TypeScript dependencies](javascript-typescript-upgrade-dependencies.md). +- To move a project through TypeScript compiler versions, see [Upgrade the TypeScript compiler](javascript-typescript-upgrade-typescript.md). +- To check an application before or after an upgrade, see [Validate a JavaScript or TypeScript application](javascript-typescript-validate-application.md). +- To compare the available workflows, see [JavaScript and TypeScript capabilities](javascript-typescript-capabilities.md). + +## What the agent validates + +The agent establishes a baseline before it changes dependencies or the compiler. Based on the project, validation can include compilation, bundler builds, tests, command-line execution, server startup, endpoint checks, and browser flows. After the upgrade, the agent repeats the relevant checks and repairs regressions caused by the upgrade. + +## Related content + +- [GitHub Copilot upgrade overview](overview.md) +- [Install GitHub Copilot upgrade](install.md) +- [GitHub Copilot upgrade concepts](concepts.md) +- [Troubleshoot GitHub Copilot upgrade](troubleshooting.md) diff --git a/docs/core/porting/github-copilot-upgrade/javascript-typescript-upgrade-dependencies.md b/docs/core/porting/github-copilot-upgrade/javascript-typescript-upgrade-dependencies.md new file mode 100644 index 0000000000000..5c27eb2ec0f76 --- /dev/null +++ b/docs/core/porting/github-copilot-upgrade/javascript-typescript-upgrade-dependencies.md @@ -0,0 +1,51 @@ +--- +title: Upgrade JavaScript and TypeScript dependencies +description: Use GitHub Copilot upgrade to update npm dependencies and repair compatibility problems in JavaScript and TypeScript projects. +ms.topic: how-to +ms.date: 09/21/2026 +ai-usage: ai-generated + +#customer intent: As a JavaScript or TypeScript developer, I want to update project dependencies and resolve breaking changes with GitHub Copilot. +--- + +# Upgrade JavaScript and TypeScript dependencies + +Use GitHub Copilot upgrade to update selected npm packages or all dependencies in a JavaScript or TypeScript project. The agent scans the dependency graph, groups related packages, applies framework-specific guidance, and repairs compatibility problems introduced by the updates. + +## Start the upgrade + +1. Install GitHub Copilot upgrade. For instructions, see [Install GitHub Copilot upgrade](install.md). +1. Open the repository in a supported GitHub Copilot environment. +1. Ask the agent to update all dependencies or name the packages that you want to update. For example: + + - _"Upgrade all dependencies in this project."_ + - _"Upgrade React and its peer dependencies."_ + - _"Upgrade axios to the latest version."_ + +1. Review the proposed scope. For a package-specific upgrade, confirm whether the agent should include related peer dependencies. +1. Let the agent establish the compile, build, test, and runtime baseline before it updates packages. +1. Review the compatibility repairs and final validation summary. + +## How package upgrades work + +The agent preserves the scope you request. For a package-specific request, it doesn't update unrelated dependencies. If the selected package requires compatible peer dependencies, the agent identifies those dependencies and asks you to confirm the expanded scope. + +For supported frameworks, the agent applies framework-specific migration guidance and required package groupings. It upgrades one dependency group at a time and validates each group before it continues. If an updated package requires a newer TypeScript version, the agent applies the smallest compatible compiler change or starts the structured compiler upgrade when the required version crosses multiple major releases. + +## Validate the result + +After the dependency updates, the agent repeats the project checks it captured before the upgrade. For details about the available checks, see [Validate a JavaScript or TypeScript application](javascript-typescript-validate-application.md). + +Review the final summary for: + +- Packages that the agent updated successfully. +- Packages that the agent couldn't update. +- Source or configuration changes that resolve breaking changes. +- Compile, build, test, and runtime validation results. +- Environment, authentication, or toolchain blockers. + +## Related content + +- [Upgrade JavaScript and TypeScript projects](javascript-typescript-overview.md) +- [Upgrade the TypeScript compiler](javascript-typescript-upgrade-typescript.md) +- [JavaScript and TypeScript capabilities](javascript-typescript-capabilities.md) diff --git a/docs/core/porting/github-copilot-upgrade/javascript-typescript-upgrade-typescript.md b/docs/core/porting/github-copilot-upgrade/javascript-typescript-upgrade-typescript.md new file mode 100644 index 0000000000000..9213153000aae --- /dev/null +++ b/docs/core/porting/github-copilot-upgrade/javascript-typescript-upgrade-typescript.md @@ -0,0 +1,52 @@ +--- +title: Upgrade the TypeScript compiler +description: Use GitHub Copilot upgrade to update the TypeScript compiler through supported major versions and resolve compatibility problems. +ms.topic: how-to +ms.date: 09/21/2026 +ai-usage: ai-generated + +#customer intent: As a TypeScript developer, I want to upgrade the TypeScript compiler and resolve errors introduced by each major version. +--- + +# Upgrade the TypeScript compiler + +Use GitHub Copilot upgrade to move a project to a newer TypeScript compiler version. The agent upgrades the compiler incrementally across major versions, resolves new compiler errors at each step, and validates application behavior after the upgrade. + +Use the dependency upgrade workflow instead when you want to update packages other than `typescript`. For more information, see [Upgrade JavaScript and TypeScript dependencies](javascript-typescript-upgrade-dependencies.md). + +## Start the compiler upgrade + +1. Install GitHub Copilot upgrade. For instructions, see [Install GitHub Copilot upgrade](install.md). +1. Open the repository that contains the TypeScript project in a supported GitHub Copilot environment. +1. Ask the agent to upgrade TypeScript. Name the target version when you need a specific release. For example: + + - _"Upgrade this project to the latest TypeScript version."_ + - _"Upgrade TypeScript to version 7."_ + +1. Review the detected current and target compiler versions. +1. Let the agent capture the compile and runtime baseline. +1. Review the changes and validation results for each major-version step. + +## How compiler upgrades work + +The agent moves through major TypeScript versions one at a time. At each step, it updates the compiler, compiles the project, and resolves errors caused by that compiler version. This approach keeps failures tied to a specific version transition and avoids combining unrelated breaking changes. + +The agent preserves strictness settings and fixes affected code instead of suppressing new errors. It might also update related `@types` packages when their versions must remain compatible with the underlying libraries and compiler. + +## Validate the result + +After the final compiler update, the agent compiles the project again and repeats the runtime validation plan. Review the summary for: + +- Starting and ending TypeScript versions. +- Successful and unsuccessful version transitions. +- Source and configuration changes. +- Compile and runtime validation results. +- Preexisting code defects exposed by the newer compiler. + +For details about runtime checks, see [Validate a JavaScript or TypeScript application](javascript-typescript-validate-application.md). + +## Related content + +- [Upgrade JavaScript and TypeScript projects](javascript-typescript-overview.md) +- [Upgrade JavaScript and TypeScript dependencies](javascript-typescript-upgrade-dependencies.md) +- [JavaScript and TypeScript capabilities](javascript-typescript-capabilities.md) diff --git a/docs/core/porting/github-copilot-upgrade/javascript-typescript-validate-application.md b/docs/core/porting/github-copilot-upgrade/javascript-typescript-validate-application.md new file mode 100644 index 0000000000000..4c0dbdcd9bfb5 --- /dev/null +++ b/docs/core/porting/github-copilot-upgrade/javascript-typescript-validate-application.md @@ -0,0 +1,47 @@ +--- +title: Validate a JavaScript or TypeScript application +description: Use GitHub Copilot upgrade to compile, build, test, run, and inspect a JavaScript or TypeScript application. +ms.topic: how-to +ms.date: 09/21/2026 +ai-usage: ai-generated + +#customer intent: As a JavaScript or TypeScript developer, I want to validate my application so that I can detect regressions before and after an upgrade. +--- + +# Validate a JavaScript or TypeScript application + +Use GitHub Copilot upgrade to create and run a repeatable validation plan for a JavaScript or TypeScript project. You can run validation as part of a dependency or compiler upgrade, or request a standalone application health check. + +## Start validation + +1. Install GitHub Copilot upgrade. For instructions, see [Install GitHub Copilot upgrade](install.md). +1. Open the repository in a supported GitHub Copilot environment. +1. Ask the agent to validate the application. For example, enter _"Validate this application before I upgrade its dependencies."_ +1. Review the checks that the agent selects for the project. +1. Let the agent run the validation plan and review the results. + +## Validation checks + +The validation plan reflects how the project actually runs. Based on the available scripts and application type, the plan can: + +- Install project dependencies with the configured package manager. +- Compile TypeScript or type-check JavaScript. +- Run the project's build and test scripts. +- Start a command-line application, server, or web application. +- Probe application endpoints. +- Exercise browser workflows and verify expected results. + +The agent keeps the plan deterministic so it can safely repeat the same checks. The plan distinguishes application failures from invalid checks and reports environment or credential blockers instead of weakening assertions. + +## Validation during an upgrade + +For dependency and compiler upgrades, the agent captures a baseline before it changes the project. After the upgrade, it repeats the plan and compares the results. The comparison helps the agent focus repairs on regressions introduced by the upgrade. + +Standalone validation checks the current project health without creating or changing an upgrade baseline. + +## Related content + +- [Upgrade JavaScript and TypeScript projects](javascript-typescript-overview.md) +- [Upgrade JavaScript and TypeScript dependencies](javascript-typescript-upgrade-dependencies.md) +- [Upgrade the TypeScript compiler](javascript-typescript-upgrade-typescript.md) +- [JavaScript and TypeScript capabilities](javascript-typescript-capabilities.md) diff --git a/docs/core/porting/github-copilot-upgrade/overview.md b/docs/core/porting/github-copilot-upgrade/overview.md index 0e28b124405e8..aaed6fd96cfb7 100644 --- a/docs/core/porting/github-copilot-upgrade/overview.md +++ b/docs/core/porting/github-copilot-upgrade/overview.md @@ -1,26 +1,37 @@ --- title: GitHub Copilot upgrade overview -description: "Learn about GitHub Copilot upgrade, a Copilot agent available across Visual Studio, Visual Studio Code, GitHub Copilot CLI, and GitHub.com that upgrades .NET projects to newer versions of .NET." +description: "Learn how GitHub Copilot upgrade assesses, plans, executes, and validates upgrades for supported project technologies." titleSuffix: "" ms.topic: overview -ms.date: 07/07/2026 +ms.date: 09/21/2026 ai-usage: ai-assisted -#customer intent: As a developer, I want to learn about what GitHub Copilot upgrade is, so that I understand its capabilities and how I can take advantage of it. +#customer intent: As a developer, I want to understand GitHub Copilot upgrade so that I can determine whether it supports my project and upgrade goal. --- # What is GitHub Copilot upgrade? -GitHub Copilot upgrade is a GitHub Copilot agent that helps you upgrade projects to newer versions of .NET quickly and confidently. It guides you through assessment, solution recommendations, code fixes, and validation across Visual Studio, Visual Studio Code, GitHub Copilot CLI, and GitHub.com. +GitHub Copilot upgrade is a GitHub Copilot agent that helps you upgrade and modernize supported projects. It guides you through assessment, recommendations, code changes, and validation across Visual Studio, Visual Studio Code, GitHub Copilot CLI, and GitHub.com. Use this agent to: -- Upgrade to a newer version of .NET. -- Modernize your .NET app, especially when upgrading from .NET Framework. +- Upgrade frameworks, compilers, and dependencies. +- Modernize application architecture and replace libraries. - Assess your application's code, configuration, and dependencies. - Validate that your app builds and tests successfully. +## Supported technologies + +Choose the technology pack that matches your project: + +| Technology | Supported work | +|---|---| +| [.NET](dotnet-overview.md) | Upgrade .NET and .NET Framework projects, modernize project files, replace libraries, and migrate application architectures. | +| [JavaScript and TypeScript](javascript-typescript-overview.md) | Upgrade npm dependencies and the TypeScript compiler, repair compatibility problems, and validate application behavior. | + +Each technology pack can provide its own scenarios, focused capabilities, prerequisites, and validation process. Additional technology packs can extend the agent without changing the shared workflow concepts. + ## Scenarios The agent provides multiple end-to-end modernization workflows called _scenarios_. Each scenario is a managed workflow that guides you through a specific type of upgrade or migration: @@ -36,8 +47,10 @@ The agent provides multiple end-to-end modernization workflows called _scenarios | **Aspire integration** | Adds [Aspire](https://aspire.dev) support for inner-loop and Azure deployment. | _"Add Aspire to my app"_ | | **Aspire version upgrade** | Upgrades existing Aspire applications to newer versions. | _"Upgrade my Aspire version"_ | | **WebForms-to-Blazor upgrade** | Upgrades ASP.NET Web Forms applications to Blazor. | _"Migrate my Web Forms app to Blazor"_ | +| **JavaScript and TypeScript dependency upgrade** | Updates selected npm packages or all project dependencies and repairs breaking changes. | _"Upgrade all dependencies in this project"_ | +| **TypeScript compiler upgrade** | Moves a project through TypeScript compiler versions and resolves new compiler errors. | _"Upgrade TypeScript to version 7"_ | -For a full reference of all scenarios and 30+ built-in upgrade skills, see [Scenarios and skills reference](scenarios-and-skills.md). +For technology-specific details, see [.NET scenarios and skills](dotnet-scenarios-and-skills.md) or [JavaScript and TypeScript capabilities](javascript-typescript-capabilities.md). ## Provide feedback @@ -67,7 +80,7 @@ The upgrade agent supports upgrading C# and Visual Basic projects of the followi - Console apps - Test projects (MSTest, NUnit, and xUnit) -To start an upgrade, see [Upgrade a .NET app with GitHub Copilot upgrade](how-to-upgrade-with-github-copilot.md). +To start an upgrade, see [Upgrade a .NET app with GitHub Copilot upgrade](dotnet-how-to-upgrade-with-github-copilot.md). ### Supported upgrade paths @@ -162,10 +175,10 @@ The tool collects data about project types, intent to upgrade, and upgrade durat ## Related content - [Install GitHub Copilot upgrade](install.md) -- [Upgrade a .NET app with GitHub Copilot upgrade](how-to-upgrade-with-github-copilot.md) +- [Upgrade a .NET app with GitHub Copilot upgrade](dotnet-how-to-upgrade-with-github-copilot.md) - [Monitor upgrades with the Upgrade Dashboard](dashboard.md) - [Core concepts](concepts.md) -- [Scenarios and skills reference](scenarios-and-skills.md) +- [.NET scenarios and skills](dotnet-scenarios-and-skills.md) - [Best practices](best-practices.md) - [Troubleshoot GitHub Copilot upgrade](troubleshooting.md) - [GitHub Copilot upgrade FAQ](faq.yml) diff --git a/docs/core/porting/github-copilot-upgrade/toc.yml b/docs/core/porting/github-copilot-upgrade/toc.yml index 9c23a77ec1c80..ef4921e451b2d 100644 --- a/docs/core/porting/github-copilot-upgrade/toc.yml +++ b/docs/core/porting/github-copilot-upgrade/toc.yml @@ -1,5 +1,5 @@ items: - - name: GitHub Copilot upgrade for .NET + - name: GitHub Copilot upgrade href: index.yml - name: Overview href: overview.md @@ -11,25 +11,40 @@ items: href: dashboard.md - name: Working with the agent href: working-with-agent.md - - name: Scenarios and skills reference - href: scenarios-and-skills.md - name: Customization href: customization.md + - name: Best practices + href: best-practices.md + - name: Troubleshooting + href: troubleshooting.md - name: FAQ href: faq.yml displayName: copilot, upgrade - - name: Upgrade .NET apps + - name: Upgrade .NET projects expanded: true items: - - name: How to upgrade with GitHub Copilot - href: how-to-upgrade-with-github-copilot.md - - name: How to apply custom upgrade instructions - href: how-to-custom-upgrade-instructions.md - - name: Best practices - href: best-practices.md - - name: Troubleshooting - href: troubleshooting.md + - name: Overview + href: dotnet-overview.md + - name: Upgrade a .NET app + href: dotnet-how-to-upgrade-with-github-copilot.md + - name: Apply custom .NET upgrade instructions + href: dotnet-how-to-custom-upgrade-instructions.md + - name: .NET scenarios and skills + href: dotnet-scenarios-and-skills.md + - name: Migrate .NET apps to Azure + href: ../../../azure/migration/appmod/overview.md - - name: Migrate .NET apps to Azure - href: ../../../azure/migration/appmod/overview.md + - name: Upgrade JavaScript and TypeScript projects + expanded: true + items: + - name: Overview + href: javascript-typescript-overview.md + - name: Upgrade dependencies + href: javascript-typescript-upgrade-dependencies.md + - name: Upgrade the TypeScript compiler + href: javascript-typescript-upgrade-typescript.md + - name: Validate an upgraded application + href: javascript-typescript-validate-application.md + - name: JavaScript and TypeScript capabilities + href: javascript-typescript-capabilities.md diff --git a/docs/core/porting/github-copilot-upgrade/troubleshooting.md b/docs/core/porting/github-copilot-upgrade/troubleshooting.md index c246131dd50b6..1e761e9cf2e8e 100644 --- a/docs/core/porting/github-copilot-upgrade/troubleshooting.md +++ b/docs/core/porting/github-copilot-upgrade/troubleshooting.md @@ -1,17 +1,17 @@ --- title: Troubleshoot GitHub Copilot upgrade -description: "Find solutions to common problems when you use GitHub Copilot upgrade for .NET, including workflow, build, Git, performance, and customization issues." +description: "Find solutions to common GitHub Copilot upgrade workflow, build, package, Git, performance, and customization problems." ms.topic: troubleshooting-general -ms.date: 07/07/2026 +ms.date: 09/21/2026 ai-usage: ai-assisted -#customer intent: As a developer, I want to troubleshoot issues with GitHub Copilot upgrade so that I can resolve problems and continue my .NET upgrade. +#customer intent: As a developer, I want to troubleshoot GitHub Copilot upgrade so that I can resolve problems and continue my project upgrade. --- # Troubleshoot GitHub Copilot upgrade -This article covers common issues you might encounter when you use GitHub Copilot upgrade for .NET, organized by category. Each entry follows a problem, cause, and solution format so you can find and resolve issues quickly. +This article covers common issues you might encounter when you use GitHub Copilot upgrade. Each entry follows a problem, cause, and solution format so you can find and resolve issues quickly. ## Workflow issues @@ -19,12 +19,12 @@ These issues relate to scenario discovery, resuming work, and task state. ### Agent says "no scenarios found" -**Cause:** The agent doesn't recognize the workspace as a .NET project. +**Cause:** The agent doesn't recognize a supported project or can't find its project files from the workspace root. **Solution:** -1. Verify that the workspace root contains a `.sln`, `.csproj`, or `.vbproj` file. -1. Ask the agent: _"What solution or project file are you using?"_ +1. Verify that the workspace contains recognizable project files. For example, check for a `.sln` or project file in a .NET workspace, or a `package.json` file in a JavaScript or TypeScript workspace. +1. Ask the agent: _"Which project files and technologies did you detect?"_ 1. If your solution or project file is in a subdirectory, open that directory as the workspace root or point the agent to the file explicitly. ### Agent can't resume previous work @@ -61,12 +61,14 @@ Be explicit about what you want. Instead of _"upgrade my project,"_ say: - _"I want to upgrade to .NET 10."_ - _"I want to upgrade from Newtonsoft.Json to System.Text.Json."_ - _"Convert my project to SDK-style format."_ +- _"Upgrade all dependencies in this JavaScript project."_ +- _"Upgrade this project to TypeScript 7."_ Add scenario preferences to `scenario-instructions.md` to prevent future mismatches. ## Build and compilation issues -These issues relate to build failures, NuGet restore problems, and code generation errors. +These issues relate to build failures, package restore or installation problems, and code generation errors. ### Build fails after agent's changes @@ -88,6 +90,17 @@ These issues relate to build failures, NuGet restore problems, and code generati - **For incompatible packages:** Tell the agent which package is problematic. The agent can search for compatible versions or suggest alternative packages. - **For feed connectivity issues:** Verify that you can run `dotnet restore` manually. Fix any feed issues first, then let the agent retry. +### npm package installation fails + +**Cause:** The configured package manager is unavailable, the lock file conflicts with the package manifest, a private registry requires authentication, or package versions can't satisfy peer dependency constraints. + +**Solution:** + +1. Confirm that the repository declares and uses the expected package manager. +1. Authenticate to private registries before you restart the upgrade. +1. Ask the agent to report the dependency or peer dependency conflict without changing unrelated packages. +1. Resolve environment or package-manager installation problems, and then ask the agent to retry through the JavaScript and TypeScript upgrade workflow. + ### Agent generates code that doesn't compile **Cause:** AI-generated code might contain errors, especially in edge cases or with uncommon API patterns. diff --git a/docs/core/porting/github-copilot-upgrade/working-with-agent.md b/docs/core/porting/github-copilot-upgrade/working-with-agent.md index dc51a4b97a19d..e2013cf5b08b6 100644 --- a/docs/core/porting/github-copilot-upgrade/working-with-agent.md +++ b/docs/core/porting/github-copilot-upgrade/working-with-agent.md @@ -2,10 +2,10 @@ title: Work with GitHub Copilot upgrade description: "Learn how to collaborate effectively with GitHub Copilot upgrade, including communication patterns, teaching preferences, mid-session corrections, and multi-session workflows." ms.topic: concept-article -ms.date: 07/07/2026 +ms.date: 09/21/2026 ai-usage: ai-assisted -#customer intent: As a developer, I want to learn how to work effectively with the GitHub Copilot upgrade agent so that I can get the best results from my .NET upgrade. +#customer intent: As a developer, I want to work effectively with GitHub Copilot upgrade so that I can guide, review, and resume project upgrades. --- @@ -40,6 +40,8 @@ Natural language works. Try these examples: |---|---| | Upgrade a full solution | _"Upgrade my solution to .NET 10"_ | | Upgrade a specific technology | _"Help me upgrade from EF6 to EF Core"_ | +| Upgrade project dependencies | _"Upgrade all dependencies in this TypeScript project"_ | +| Upgrade a compiler | _"Upgrade this project to TypeScript 7"_ | | See what's available | _"What scenarios are available?"_ | | Upgrade one project first | _"Upgrade the API project first, then the shared library"_ | | Understand the current state | _"What's the current status of my upgrade?"_ | diff --git a/docs/navigate/migration-guide/toc.yml b/docs/navigate/migration-guide/toc.yml index ea4f28a43456c..f19f8ff9174fd 100644 --- a/docs/navigate/migration-guide/toc.yml +++ b/docs/navigate/migration-guide/toc.yml @@ -18,29 +18,26 @@ items: - name: Working with the agent href: ../../core/porting/github-copilot-upgrade/working-with-agent.md displayName: copilot, upgrade - - name: Scenarios and skills reference - href: ../../core/porting/github-copilot-upgrade/scenarios-and-skills.md - displayName: copilot, upgrade - name: Customization href: ../../core/porting/github-copilot-upgrade/customization.md displayName: copilot, upgrade - name: FAQ href: ../../core/porting/github-copilot-upgrade/faq.yml displayName: copilot, upgrade - - name: Upgrade .NET apps + - name: Upgrade .NET projects expanded: false items: - - name: How to upgrade with GitHub Copilot - href: ../../core/porting/github-copilot-upgrade/how-to-upgrade-with-github-copilot.md + - name: Overview + href: ../../core/porting/github-copilot-upgrade/dotnet-overview.md displayName: copilot, upgrade - - name: How to apply custom upgrade instructions - href: ../../core/porting/github-copilot-upgrade/how-to-custom-upgrade-instructions.md + - name: Upgrade a .NET app + href: ../../core/porting/github-copilot-upgrade/dotnet-how-to-upgrade-with-github-copilot.md displayName: copilot, upgrade - - name: Best practices - href: ../../core/porting/github-copilot-upgrade/best-practices.md + - name: Apply custom .NET upgrade instructions + href: ../../core/porting/github-copilot-upgrade/dotnet-how-to-custom-upgrade-instructions.md displayName: copilot, upgrade - - name: Troubleshooting - href: ../../core/porting/github-copilot-upgrade/troubleshooting.md + - name: .NET scenarios and skills + href: ../../core/porting/github-copilot-upgrade/dotnet-scenarios-and-skills.md displayName: copilot, upgrade - name: Migrate .NET apps to Azure href: ../../azure/migration/appmod/predefined-tasks.md From d51af0585347393f3ae6972f782f078c0fca85f5 Mon Sep 17 00:00:00 2001 From: "azure-sdk-automation[bot]" <191533747+azure-sdk-automation[bot]@users.noreply.github.com> Date: Thu, 24 Sep 2026 10:18:25 -0400 Subject: [PATCH 18/24] Update package index with latest published versions (#56243) Co-authored-by: azure-sdk --- docs/azure/includes/dotnet-all.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index e8e84f32458c8..59543348b8533 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -626,7 +626,7 @@ | App Service - API Apps Service | NuGet [0.9.64](https://www.nuget.org/packages/Microsoft.Azure.AppService.ApiApps.Service/0.9.64) | | | | Code Analyzers for Durable Functions | NuGet [0.5.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.DurableTask.Analyzers/0.5.0) | | GitHub [0.5.0](https://github.com/Azure/azure-functions-durable-extension/tree/Analyzer-v0.3.0/src/WebJobs.Extensions.DurableTask.Analyzers) | | Cosmos DB - BulkExecutor | NuGet [2.5.1-preview](https://www.nuget.org/packages/Microsoft.Azure.CosmosDB.BulkExecutor/2.5.1-preview) | | GitHub [2.5.1-preview](https://github.com/Azure/azure-cosmosdb-bulkexecutor-dotnet-getting-started) | -| Cosmos DB - Direct | NuGet [3.44.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos.Direct/3.44.0) | | GitHub [3.44.0](https://github.com/Azure/azure-cosmos-dotnet-v3) | +| Cosmos DB - Direct | NuGet [3.44.1](https://www.nuget.org/packages/Microsoft.Azure.Cosmos.Direct/3.44.1) | | GitHub [3.44.1](https://github.com/Azure/azure-cosmos-dotnet-v3) | | Cosmos DB - Encryption | NuGet [2.0.3](https://www.nuget.org/packages/Microsoft.Azure.Cosmos.Encryption/2.0.3)
NuGet [2.1.0-preview4](https://www.nuget.org/packages/Microsoft.Azure.Cosmos.Encryption/2.1.0-preview4) | | GitHub [2.0.3](https://github.com/Azure/azure-cosmos-dotnet-v3/tree/releases/encryption/1.0.0-preview4/Microsoft.Azure.Cosmos.Encryption) | | Cosmos DB - Encryption | NuGet [1.0.0-preview07](https://www.nuget.org/packages/Microsoft.Azure.Cosmos.Encryption.Custom/1.0.0-preview07) | | | | Extensions - Caching Cosmos | NuGet [1.8.0](https://www.nuget.org/packages/Microsoft.Extensions.Caching.Cosmos/1.8.0) | | GitHub [1.8.0](https://github.com/Azure/Microsoft.Extensions.Caching.Cosmos/tree/v1.0.0-preview4) | From a5eddfaa63dbb8f2ad47e87c6fa66d64615bff95 Mon Sep 17 00:00:00 2001 From: Jacques Eloff Date: Thu, 24 Sep 2026 12:23:27 -0700 Subject: [PATCH 19/24] Initial docs for DNIM (#55967) * Initial docs for DNIM * Fix typo in dnim-cli-layout.md for previews option Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Add FAQ * Fix environment variable typo * Update FAQ * PR feedback, edits * Build warnings and minor edits * Update TOC, fix relative URLs * Remove trailing space * Make URL relative * Fix up CLI command docs * rename * rename pt2 * rename pt1 * rename pt2 * Fix include paths * Update docs/core/additional-tools/index.md Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> * Update docs/core/additional-tools/dnim-faq.yml Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> * Update docs/core/additional-tools/dnim-net-installs.md Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> * Update docs/core/additional-tools/dnim-net-installs.md Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> * Update docs/core/additional-tools/dnim-net-installs.md Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> * Update docs/core/additional-tools/dnim-net-installs.md Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> * Update docs/core/additional-tools/dnim-net-installs.md Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> * Update docs/core/additional-tools/dnim-overview.md Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> * Update docs/core/additional-tools/dnim-net-installs.md Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> * Update classification * Fix lint errors * Add aka.ms link for DLC * Minor updates * Add Caution bubbles for uninstall/update * Update uninstall doc with DNIM reference * Fix typos * Minor fixes, incomplete sentences * Update TOC * PR feedback --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --- docfx.json | 1 + docs/core/additional-tools/dnim-cli-layout.md | 59 ++++++ .../dnim-cli-query-products.md | 89 ++++++++ .../dnim-cli-query-releases.md | 89 ++++++++ docs/core/additional-tools/dnim-cli-scan.md | 91 ++++++++ docs/core/additional-tools/dnim-cli-trace.md | 64 ++++++ .../additional-tools/dnim-cli-uninstall.md | 198 ++++++++++++++++++ docs/core/additional-tools/dnim-cli-update.md | 143 +++++++++++++ docs/core/additional-tools/dnim-faq.yml | 73 +++++++ docs/core/additional-tools/dnim-logs.md | 78 +++++++ .../additional-tools/dnim-net-installs.md | 131 ++++++++++++ docs/core/additional-tools/dnim-overview.md | 36 ++++ .../includes/dnim-cli-accept-license.md | 7 + .../dnim-cli-create-system-restore-point.md | 9 + .../additional-tools/includes/dnim-cli-cve.md | 10 + .../dnim-cli-download-updates-when-offline.md | 10 + .../dnim-cli-except-product-version.md | 10 + .../includes/dnim-cli-except-support-phase.md | 10 + .../includes/dnim-cli-ignore-dependents.md | 7 + .../dnim-cli-include-bin-deployed-installs.md | 7 + .../includes/dnim-cli-include-installers.md | 7 + .../includes/dnim-cli-include-previews.md | 7 + .../includes/dnim-cli-install-type.md | 7 + .../dnim-cli-keep-latest-product-version.md | 7 + .../dnim-cli-keep-latest-support-phase.md | 7 + .../includes/dnim-cli-latest.md | 7 + .../includes/dnim-cli-layout-directory.md | 7 + .../dnim-cli-log-extra-debug-information.md | 7 + .../includes/dnim-cli-log-file.md | 7 + .../includes/dnim-cli-no-wua.md | 10 + .../dnim-cli-offline-revocation-checks.md | 7 + .../includes/dnim-cli-offline.md | 7 + .../includes/dnim-cli-output-file.md | 7 + .../includes/dnim-cli-output-format.md | 7 + .../includes/dnim-cli-product-version.md | 10 + .../includes/dnim-cli-release-version.md | 7 + .../dnim-cli-remove-eol-versions-from-vs.md | 10 + .../dnim-cli-remove-orphaned-installs.md | 7 + .../includes/dnim-cli-report-issues.md | 7 + .../includes/dnim-cli-restore-point-suffix.md | 7 + .../includes/dnim-cli-security.md | 7 + .../includes/dnim-cli-support-phase.md | 10 + .../dnim-cli-update-discontinued-sdks.md | 7 + .../includes/dnim-cli-update-eol-versions.md | 7 + .../includes/dnim-cli-verbosity.md | 7 + .../includes/dnim-cli-verify-signatures.md | 7 + .../includes/dnim-cli-what-if.md | 7 + docs/core/additional-tools/index.md | 4 + .../media/dnim/dotnet-bundles.svg | 86 ++++++++ .../additional-tools/media/dnim/eventlog.png | Bin 0 -> 22172 bytes .../install/remove-runtime-sdk-versions.md | 6 +- docs/navigate/tools-diagnostics/toc.yml | 27 +++ 52 files changed, 1445 insertions(+), 1 deletion(-) create mode 100644 docs/core/additional-tools/dnim-cli-layout.md create mode 100644 docs/core/additional-tools/dnim-cli-query-products.md create mode 100644 docs/core/additional-tools/dnim-cli-query-releases.md create mode 100644 docs/core/additional-tools/dnim-cli-scan.md create mode 100644 docs/core/additional-tools/dnim-cli-trace.md create mode 100644 docs/core/additional-tools/dnim-cli-uninstall.md create mode 100644 docs/core/additional-tools/dnim-cli-update.md create mode 100644 docs/core/additional-tools/dnim-faq.yml create mode 100644 docs/core/additional-tools/dnim-logs.md create mode 100644 docs/core/additional-tools/dnim-net-installs.md create mode 100644 docs/core/additional-tools/dnim-overview.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-accept-license.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-create-system-restore-point.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-cve.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-download-updates-when-offline.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-except-product-version.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-except-support-phase.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-ignore-dependents.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-include-bin-deployed-installs.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-include-installers.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-include-previews.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-install-type.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-keep-latest-product-version.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-keep-latest-support-phase.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-latest.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-layout-directory.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-log-extra-debug-information.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-log-file.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-no-wua.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-offline-revocation-checks.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-offline.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-output-file.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-output-format.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-product-version.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-release-version.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-remove-eol-versions-from-vs.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-remove-orphaned-installs.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-report-issues.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-restore-point-suffix.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-security.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-support-phase.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-update-discontinued-sdks.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-update-eol-versions.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-verbosity.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-verify-signatures.md create mode 100644 docs/core/additional-tools/includes/dnim-cli-what-if.md create mode 100644 docs/core/additional-tools/media/dnim/dotnet-bundles.svg create mode 100644 docs/core/additional-tools/media/dnim/eventlog.png diff --git a/docfx.json b/docfx.json index f1f84f8a269db..03b7ce746c1a8 100644 --- a/docfx.json +++ b/docfx.json @@ -222,6 +222,7 @@ "_vblang/spec/*.md": "language-reference", "docs/architecture/**/*.md": "concept-article", "docs/azure/migration/**/*.md": "upgrade-and-migration-article", + "docs/core/additional-tools/dnim*.md": "reference", "docs/core/compatibility/**/*.md": "concept-article", "docs/core/deploying/native-aot/warnings/**.md": "error-reference", "docs/core/deploying/single-file/warnings/**.md": "error-reference", diff --git a/docs/core/additional-tools/dnim-cli-layout.md b/docs/core/additional-tools/dnim-cli-layout.md new file mode 100644 index 0000000000000..b0fe55ec030ba --- /dev/null +++ b/docs/core/additional-tools/dnim-cli-layout.md @@ -0,0 +1,59 @@ +--- +title: dnim layout command +description: The layout command creates a cache for offline deployments. +author: joeloff +ms.date: 08/11/2026 +--- + +# dnim layout + +## Name + +`dnim-win-[x86|x64|arm64] layout` - Creates or updates a cache for offline deployments. + +## Synopsis + +```dotnetcli +dnim-win-[x86|x64|arm64] layout [-a|--accept-license] + [--include-installers] + [--include-previews] + [-l|--log-file ] + [--latest] + [-v|--verbosity ] + +dnim-win-[x86|x64|arm64] layout -?|-h|--help +``` + +## Description + +The command creates or updates a cache used for offline deployments inside network restricted environments. The command requires internet access to download the necessary files and will verify the signatures of any installers that are downloaded. Adminitrators should place the files on a machine that is accessible from client devices inside the network. + +## Options + +- [!INCLUDE [accept-license](includes/dnim-cli-accept-license.md)] + +- [!INCLUDE [include-installers](includes/dnim-cli-include-installers.md)] + +- [!INCLUDE [include-previews](includes/dnim-cli-include-previews.md)] + +- [!INCLUDE [log-file](includes/dnim-cli-log-file.md)] + +- [!INCLUDE [latest](includes/dnim-cli-latest.md)] + +- [!INCLUDE [verbosity](includes/dnim-cli-verbosity.md)] + +## Examples + +- Create an offline deployment in `C:\dnim\layout` that only includes the release metadata (no installers). + + ```console + dnim-win-[x86|x64|arm64] layout C:\dnim\layout + ``` + +- Create an offline deployment in `C:\dnim\layout` that includes the latest installers. + + ```console + dnim-win-[x86|x64|arm64] layout C:\dnim\layout --include-installers --latest + ``` + +## See also diff --git a/docs/core/additional-tools/dnim-cli-query-products.md b/docs/core/additional-tools/dnim-cli-query-products.md new file mode 100644 index 0000000000000..2583213280257 --- /dev/null +++ b/docs/core/additional-tools/dnim-cli-query-products.md @@ -0,0 +1,89 @@ +--- +title: dnim query products command +description: The query releases command provides information about specific .NET products. +author: joeloff +ms.date: 08/11/2026 +ai-usage: ai-assisted +--- + +# dnim query products + +## Name + +`dnim-win-[x86|x64|arm64] query products` - Queries release information about specific .NET products. + +## Synopsis + +```dotnetcli +dnim-win-[x86|x64|arm64] query products [-a|--accept-license] + [--epv|--except-product-version ] + [--esp|--except-support-phase ] + [-o|--output-file ] [--offline ] + [--output-format ] [--pv|--product-version ] + [--sp|--support-phase ] + [-v|--verbosity ] + +dnim-win-[x86|x64|arm64] query products -?|-h|--help +``` + +## Description + +The command provides a summary of .NET products, including the latest versions, support phase and expected end-of-life date. + +> [!IMPORTANT] +> The information provided by this command depends on the published releases JSON data. + +## Options + +- [!INCLUDE [accept-license](includes/dnim-cli-accept-license.md)] + +- [!INCLUDE [except-product-version](includes/dnim-cli-except-product-version.md)] + +- [!INCLUDE [except-support-phase](includes/dnim-cli-except-support-phase.md)] + +- [!INCLUDE [output-file](includes/dnim-cli-output-file.md)] + +- [!INCLUDE [offline](includes/dnim-cli-offline.md)] + +- [!INCLUDE [output-format](includes/dnim-cli-output-format.md)] + +- [!INCLUDE [product-version](includes/dnim-cli-product-version.md)] + +- [!INCLUDE [support-phase](includes/dnim-cli-support-phase.md)] + +- [!INCLUDE [verbosity](includes/dnim-cli-verbosity.md)] + +## Results + +The example below lists all products whose support phase is not `eol`. The security update column indicates whether the latest release addressed security vulnerabilities. The [`query releases`](dnim-cli-query-releases.md) command can be used to obtain a list of vulnerabilities addressed by the latest release. + +| Version | Support | Release type | Latest release | Latest release date | Latest SDK | Latest runtime | End of support | Security update | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| 11.0 | GoLive | STS | 11.0.0-rc.1 | 9/8/2026 | 11.0.100-rc.1.26425.128 | 11.0.0-rc.1.26425.128 | n/a | True | +| 10.0 | Active | LTS | 10.0.12 | 9/8/2026 | 10.0.401 | 10.0.12 | 11/14/2028 | True | +| 9.0 | Maintenance | STS | 9.0.20 | 9/8/2026 | 9.0.318 | 9.0.20 | 11/10/2026 | True | +| 8.0 | Maintenance | LTS | 8.0.31 | 9/8/2026 | 8.0.425 | 8.0.31 | 11/10/2026 | True | + +## Examples + +- Display information for all .NET products. + + ```console + dnim-win-[x86|x64|arm64] query products + ``` + +- Display information for all products that are not end-of-life: + + ```console + dnim-win-[x86|x64|arm64] query products --esp eol + ``` + +- Only display information for the .NET 7.0 and 9.0 products. + + ```console + dnim-win-[x86|x64|arm64] query products --pv 7.0 --pv 9.0 + ``` + +## See also + +The [`query-releases`](dnim-cli-query-releases.md) command. diff --git a/docs/core/additional-tools/dnim-cli-query-releases.md b/docs/core/additional-tools/dnim-cli-query-releases.md new file mode 100644 index 0000000000000..86bfc61da7c04 --- /dev/null +++ b/docs/core/additional-tools/dnim-cli-query-releases.md @@ -0,0 +1,89 @@ +--- +title: dnim query prreleases command +description: The query releases command provides information about specific .NET releases. +author: joeloff +ms.date: 08/11/2026 +ai-usage: ai-assisted +--- + +# dnim query releases + +## Name + +`dnim-win-[x86|x64|arm64] query releases` - Queries release information about specific .NET products. + +## Synopsis + +```dotnetcli +dnim-win-[x86|x64|arm64] query releases [-a|--accept-license] + [--epv|--except-product-version ] + [--esp|--except-support-phase ] + [-o|--output-file ] [--offline ] + [--output-format ] [--pv|--product-version ] + [--sp|--support-phase ] + [-v|--verbosity ] + +dnim-win-[x86|x64|arm64] query releases -?|-h|--help +``` + +## Description + +The command can be used to obtain information for specific .NET releases. + +> [!IMPORTANT] +> The information provided by this command depends on the published releases JSON data. + +## Options + +- [!INCLUDE [accept-license](includes/dnim-cli-accept-license.md)] + +- [!INCLUDE [except-product-version](includes/dnim-cli-except-product-version.md)] + +- [!INCLUDE [except-support-phase](includes/dnim-cli-except-support-phase.md)] + +- [!INCLUDE [output-file](includes/dnim-cli-output-file.md)] + +- [!INCLUDE [offline](includes/dnim-cli-offline.md)] + +- [!INCLUDE [output-format](includes/dnim-cli-output-format.md)] + +- [!INCLUDE [product-version](includes/dnim-cli-product-version.md)] + +- [!INCLUDE [support-phase](includes/dnim-cli-support-phase.md)] + +- [!INCLUDE [verbosity](includes/dnim-cli-verbosity.md)] + +## Results + +The example below shows the latest release information for .NET Core 3.1. + +```console +Version: 3.1.32 +Release date: 12/13/2022 +Release notes: https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.32/3.1.32.md +Security: True +CVEs: + CVE-2022-41089, https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41089 +SDK 3.1.426 + ASP.NET Core Runtime 3.1.32 + .NET Core Runtime 3.1.32 + Desktop Runtime 3.1.32 +``` + +## Examples + +- Display all releases that addressed a specific CVE: + + ```console + dnim-win-[x86|x64|arm64] query releases --cve CVE-2026-71328 + ``` + +- Display the latest releases available for all products that are not end-of-life. + + ```console + dnim-win-[x86|x64|arm64] query release --esp eol --latest + ``` + +## See also + +The [`query products`](dnim-cli-query-products.md) command. diff --git a/docs/core/additional-tools/dnim-cli-scan.md b/docs/core/additional-tools/dnim-cli-scan.md new file mode 100644 index 0000000000000..cfc12e64f78bf --- /dev/null +++ b/docs/core/additional-tools/dnim-cli-scan.md @@ -0,0 +1,91 @@ +--- +title: dnim scan command +description: The scan command identifies .NET installations. +author: joeloff +ms.date: 08/11/2026 +ai-usage: ai-assisted +--- + +# dnim scan + +## Name + +`dnim-win-[x86|x64|arm64] scan` - Detects, classifies, and reports .NET installations on a device. + +## Synopsis + +```dotnetcli +dnim-win-[x86|x64|arm64] scan [-a|--accept-license] [-b|--include-bin-deployed-installs] + [--epv|--except-product-version ] + [--esp|--except-support-phase ] + [-l|--log-file ] [-o|--output-file ] [--offline ] + [--output-format ] [--pv|--product-version ] + [--sp|--support-phase ] + [-v|--verbosity ] + +dnim-win-[x86|x64|arm64] scan -?|-h|--help +``` + +## Description + +The `scan` command detects, classifies and reports .NET installations on Windows. MSIs and bundles are detected by default. Bin deployed (xcopy/zip) installs under `Program Files` can be detected using the `--include-bin-deployed-installs` option. + +Results can be filtered using the product version and support phase options to only include installations matching the specified criteria. Results are written to both the console and diagnostic log. Additional output formats are available and include JSON, HTML and CSV. + +## Options + +- [!INCLUDE [accept-license](includes/dnim-cli-accept-license.md)] + +- [!INCLUDE [bin-deployed-installs](includes/dnim-cli-include-bin-deployed-installs.md)] + +- [!INCLUDE [except-product-version](includes/dnim-cli-except-product-version.md)] + +- [!INCLUDE [except-support-phase](includes/dnim-cli-except-support-phase.md)] + +- [!INCLUDE [log-file](includes/dnim-cli-log-file.md)] + +- [!INCLUDE [output-file](includes/dnim-cli-output-file.md)] + +- [!INCLUDE [offline](includes/dnim-cli-offline.md)] + +- [!INCLUDE [output-format](includes/dnim-cli-output-format.md)] + +- [!INCLUDE [product-version](includes/dnim-cli-product-version.md)] + +- [!INCLUDE [support-phase](includes/dnim-cli-support-phase.md)] + +- [!INCLUDE [verbosity](includes/dnim-cli-verbosity.md)] + +## Results + +The results presents a summary of each installation, including its type (MSI, bundle, etc.), the .NET product to which it belongs and its current support phase. It may also include information about its origin. In the example below there are three installations: two bundles and one MSI. The targeting pack MSI is shared between both SDK installs and two instances of Visual Studio: 17.14.37502 and 17.14.37110. + +| Display Name | Product | Release | Type | Support | Installed By | +| --- | --- | --- | --- | --- | --- | +| Microsoft .NET SDK 6.0.136 (x64) | 6.0 | 6.0.136 | Bundle | EOL | | +| Microsoft .NET SDK 6.0.428 (x64) | 6.0 | 6.0.428 | Bundle | EOL | | +| Microsoft Windows Desktop Targeting Pack - 6.0.36 (x64) | 6.0 | 6.0.36 | Msi | EOL | VS 17.14.37502, VS 17.14.37110, Microsoft .NET SDK 6.0.428 (x64), Microsoft .NET SDK 6.0.136 (x64) | + +## Examples + +- Scan and report all .NET installations: + + ```console + dnim-win-[x86|x64|arm64] scan + ``` + +- Scan and report .NET installations that are in active support: + + ```console + dnim-win-[x86|x64|arm64] scan --sp active + ``` + +- Scan for end-of-life (EOL) installations of .NET and write the results to an HTML file: + + ```console + dnim-win-[x86|x64|arm64] scan --sp eol -o report.html --output-format html + ``` + +## See also + +[.NET Installs](dnim-net-installs.md) diff --git a/docs/core/additional-tools/dnim-cli-trace.md b/docs/core/additional-tools/dnim-cli-trace.md new file mode 100644 index 0000000000000..4ab8a3954e02a --- /dev/null +++ b/docs/core/additional-tools/dnim-cli-trace.md @@ -0,0 +1,64 @@ +--- +title: dnim trace command +description: The trace command identifies .NET processes. +author: joeloff +ms.date: 08/11/2026 +ai-usage: ai-assisted +--- + +# dnim trace + +## Name + +`dnim-win-[x86|x64|arm64] trace` - Identifies running .NET and .NET Core processes and the runtimes and SDK being used. + +## Synopsis + +```dotnetcli +dnim-win-[x86|x64|arm64] trace [-a|--accept-license] + [-o|--output-file ] + [--output-format ] + [-v|--verbosity ] + +dnim-win-[x86|x64|arm64] trace -?|-h|--help +``` + +## Description + +The `trace` command processes kernel traces to identify running .NET and .NET Core processes. + +The command examines a number of events, including `ProcessDCStart`, `RuntimeStart`, and `ImageLoad` to identify running processes that depend on the global runtime under Program Files, including .NET SDKs. + +The command differentiates between single file and self-contained applications. While non-FDD processes may not be impacted by shared installations of .NET, the information provides a more complete view of a device, allowing administrators to make informed decisions. + +The command is useful to identify applications using end-of-life runtimes and how removing older versions of .NET could impact a device. + +> [!IMPORTANT] +> The command requires administrator access to process kernel traces. + +## Options + +- [!INCLUDE [accept-license](includes/dnim-cli-accept-license.md)] + +- [!INCLUDE [output-file](includes/dnim-cli-output-file.md)] + +- [!INCLUDE [output-format](includes/dnim-cli-output-format.md)] + +- [!INCLUDE [verbosity](includes/dnim-cli-verbosity.md)] + +## Results + +The results include information about each process (PID and start time) and the shared framework versions that were loaded. The table below contains examples of what the command reports. Note that some columns were removed for brevity. + +| Process | PID | Runtime Family | CLR | CLR Version | Frameworks and SDKs | +| --- | --- | --- | --- | --- | --- | +| dnim-win-x64 | 12016 | Net, SingleFile | dnim-win-x64.exe | 8.0.3026.36720 | | +| dotnet | 47852 | Net | coreclr.dll | 10.0.1126.37416 | Microsoft.NETCore.App (10.0.11), sdk (10.0.400-preview.0.26322.102) | +| pwsh | 37364 | Net | coreclr.dll | 10.0.1026.32716 | | + +1. DNIM is a single file application and the CLR is reported under the application host. +1. The `dotnet` process is an FDD application running on .NET 10.0.11. Note that the process also loaded modules from the .NET SDK. +1. The `pwsh` process is a self-contained application. The diagnostic log confirms this and shows a local copy of `coreclr.dll` was loaded. The version is also different from the global copy loaded by `dotnet` (second row). +`[2026-08-17 08:31:59.175]d0000: Event: RuntimeStart, timestamp: 08/17/2026 08:31:57, PID: 37364, path: C:\Program Files\PowerShell\7\coreclr.dll` + +## See also diff --git a/docs/core/additional-tools/dnim-cli-uninstall.md b/docs/core/additional-tools/dnim-cli-uninstall.md new file mode 100644 index 0000000000000..35dc481b9cfe3 --- /dev/null +++ b/docs/core/additional-tools/dnim-cli-uninstall.md @@ -0,0 +1,198 @@ +--- +title: dnim uninstall command +description: The uninstall command removes .NET installations. +author: joeloff +ms.date: 08/11/2026 +ai-usage: ai-assisted +--- + +# dnim uninstall + +## Name + +`dnim-win-[x86|x64|arm64] uninstall` - Detects, classifies, and removes .NET installations on a device. + +## Synopsis + +```dotnetcli +dnim-win-[x86|x64|arm64] uninstall [-a|--accept-license] + [-b|--include-bin-deployed-installs] + [--csrp|--create-system-restore-point] + [--epv|--except-product-version ] + [--esp|--except-support-phase ] + [--ignore-dependents] + [--it|--install-type ] + [--klpv|--keep-latest-product-version ] + [--klsp|--keep-latest-support-phase ] + [-l|--log-file ] + [--log-extra-debug-information, --lx] + [--no-wua] + [-o|--output-file ] + [--offline ] + [--offline-revocation-checks] + [--output-format ] + [--pv|--product-version ] + [--remove-EOL-versions-from-VS] + [--remove-orphaned-installs] + [--restore-point-suffix|--rps ] + [--ri|--report-issues] + [--rv|--release-version ] + [--sp|--support-phase ] + [-v|--verbosity ] + [--verify-signatures ] + [--what-if] + +dnim-win-[x86|x64|arm64] uninstall -?|-h|--help +``` + +## Description + +The `uninstall` command attempts to remove all copies of .NET from the device. This may not be possible if installations are shared with other products like Visual Studio (see [Managed .NET installations on Windows](dnim-net-installs.md)). + +> [!CAUTION] +> DNIM always attempts to remove all copies of .NET on a device. Use the `--what-if` option to review planned actions. + +Various options can be used to target specific installations. For example, an administrator may want to remove all copies of .NET that are not in active support to comply with their organization's internal policies. + +> [!IMPORTANT] +> This command must be run with elevated privileges to make changes. Include the `--what-if` option if you want to evaluate the results without making changes. + +## Options + +- [!INCLUDE [accept-license](includes/dnim-cli-accept-license.md)] + +- [!INCLUDE [bin-deployed-installs](includes/dnim-cli-include-bin-deployed-installs.md)] + +- [!INCLUDE [create-system-restore-point](includes/dnim-cli-create-system-restore-point.md)] + +- [!INCLUDE [except-product-version](includes/dnim-cli-except-product-version.md)] + +- [!INCLUDE [except-support-phase](includes/dnim-cli-except-support-phase.md)] + +- [!INCLUDE [ignore-dependents](includes/dnim-cli-ignore-dependents.md)] + +- [!INCLUDE [install-type](includes/dnim-cli-install-type.md)] + +- [!INCLUDE [keep-latest-product-version](includes/dnim-cli-keep-latest-product-version.md)] + +- [!INCLUDE [keep-latest-support-phase](includes/dnim-cli-keep-latest-support-phase.md)] + +- [!INCLUDE [log-file](includes/dnim-cli-log-file.md)] + +- [!INCLUDE [log-extra-debug-information](includes/dnim-cli-log-extra-debug-information.md)] + +- [!INCLUDE [no-wua](includes/dnim-cli-no-wua.md)] + +- [!INCLUDE [output-file](includes/dnim-cli-output-file.md)] + +- [!INCLUDE [offline](includes/dnim-cli-offline.md)] + +- [!INCLUDE [offline-revocation-checks](includes/dnim-cli-offline-revocation-checks.md)] + +- [!INCLUDE [output-format](includes/dnim-cli-output-format.md)] + +- [!INCLUDE [product-version](includes/dnim-cli-product-version.md)] + +- [!INCLUDE [remove-EOL-versions-from-VS](includes/dnim-cli-remove-eol-versions-from-vs.md)] + +- [!INCLUDE [remove-orphaned-installs](includes/dnim-cli-remove-orphaned-installs.md)] + +- [!INCLUDE [restore-point-suffix](includes/dnim-cli-restore-point-suffix.md)] + +- [!INCLUDE [report-issues](includes/dnim-cli-report-issues.md)] + +- [!INCLUDE [release-version](includes/dnim-cli-release-version.md)] + +- [!INCLUDE [support-phase](includes/dnim-cli-support-phase.md)] + +- [!INCLUDE [verbosity](includes/dnim-cli-verbosity.md)] + +- [!INCLUDE [verify-signatures](includes/dnim-cli-verify-signatures.md)] + +- [!INCLUDE [what-if](includes/dnim-cli-what-if.md)] + +## Results + +The results are similar to those produced by the [`scan`](dnim-cli-scan.md) command with the addition of an extra column indicating whether or not an installation can be removed. The excerpt below was generated from running `dnim-win-x64.exe uninstall --pv 8.0 --klsp active --klsp maintenance --what-if`. The command specifically targets removing .NET 8.0, but will retain installations if they are the latest known release and the support phase is either `active` or `maintenance`. The 3.1 and 6.0 SDKs are excluded because they are not part of .NET 8.0. The 8.0.130 SDK is also not removed because it was the latest known release version when the command was executed. + +| Display Name | Release | Type | Support | Uninstall Action | +| --- | --- | --- | --- | --- | +| Microsoft .NET Core SDK 3.1.426 (x64) | 3.1.426 | Bundle | EOL | NoneProductVersionExcluded | +| Microsoft .NET SDK 6.0.136 (x64) | 6.0.136 | Bundle | EOL | NoneProductVersionExcluded | +| Microsoft .NET SDK 8.0.130 (x64) | 8.0.130 | Bundle | Maintenance | NoneLatestReleasedVersion | + +## Policy Evaluation + +DNIM generates a set of internal policy rules based on the command-line options. Every installation is evaluated against the policies. Evaluation stops when a policy applies. If no policies apply, the .NET installation can be removed. + +The table below contains an overview of the policies created from the command-line options. + +| Policy | Description | +| --- | --- | +| Product Version | Include or exclude installations based on their product version. | +| Support Phase | Include or exclude installations based on their support phase. | +| Release Version | Include or exclude installations based on their release version. | +| Retention | Retain installations based on product version or support phase. | +| Install Type | Include or exclude installations based on their install type. | +| Orphaned Installations | Consider orphaned installations for removal. | +| Visual Studio EOL | Considers installations marked as out-of-support in Visual Studio. | +| Dependency Provider | Exclude installations if other products depend on them. | +| Signing | Exclude or include installations based on whether packages are signed. | + +### Example + +Consider the following command-line: `dnim-win-x64 uninstall --pv 6.0`. The command only considers installations associated with .NET 6.0. When the tool evaluates a .NET 7.0 installation, the product version policy applies and excludes it. + +## Policy Results + +Every installation is assigned an action based on the evaluated policies. The table belows contains +a description for the various policy actions returned by the `uninstall` command. Policy actions with a +`None` prefix indicate the installation won't be removed. + +| Action | Policy | Description | +| --- | --- | --- | +| NoneNotOutOfSupport | Support Phase | The product is still considered to be in support based on the published release information. | +| NoneLatestReleasedVersion | Retention | The installation is the latest known released version and will be retained. | +| NoneNotOutOfSupportInVisualStudio | Visual Studio EOL | The product is out of support, but not all instances of Visual Studio considers it out-of-support. This indicates that product information in one or more Visual Studio catalog is outdated or incorrect. | +| NoneProductVersionExcluded | Product Version | The product will be retained because its version excluded it from being removed. | +| NoneProductVersionNotFound | Product Version | The installation belongs to an unknown .NET product version. This can happen when the .NET releases JSON data has not been updated or an old copy of data is being used. | +| NoneSupportPhaseExcluded | Support Phase | The installation will be retained because its support phase is excluded. | +| NoneInstallPlatformExcluded | Install Type | The installation will be retained because its platform is excluded. | +| NoneInstallTypeExcluded | Install Type | The installation will be retained because its type is excluded. For example, the user only specified MSIs to be removed. | +| NoneInstallComponentExcluded | Install Type | The installation will be retained because its component is excluded. For example, only SDK installations were selected, but the install is part of a shared framework like ASP.NET Core. | +| NoneReleaseVersionExcluded | Release Version | The installation will be retained because it does not match the specified release version. | +| NoneDependentsExist | Dependency Provider | The installation will be retained because another product still depends on it. For example, the same MSI was installed by both a standalone bundle and one or more Visual Studio instances. | +| NoneUnsigned | Signing | The installation package on disk is not signed. | +| Uninstall | N/A | The installation was successfully evaluated agaisnt all active policies and will be removed. | +| UninstallParentDependency | N/A | The installation will be removed because a parent dependency will be removed, e.g., an MSI will be removed becasue the .NET bundle to which it belongs will be removed. | +| UninstallOrphanedByVs | N/A | The installation will be removed because it was orphaned by Visual Studio. | +| NoneEolVersion | N/A | The product associated with an installation is EOL and won't be updated. | +| NoneDiscontinuedSdk | N/A | The .NET product is still supported, but the latest updates no longer include the specific feature band. | +| NoneNoComponent | N/A | The release data does not have any component data about the SDK or runtime. | +| NoneNoComponentFile | N/A | The release data includes component data, but not information about individual installation files. | + +## Examples + +- Remove all .NET installations that are end-of-life (EOL). + + ```console + dnim-win-[x86|x64|arm64] uninstall --sp eol + ``` + +- Remove all .NET installs, but retain the latest version for any products that are in active support if they are installed. + + ```console + dnim-win-[x86|x64|arm64] uninstall --klsp active + ``` + + Assume .NET 9 and 8 are in active support and when the command was executed, the latest releases included 9.0.19 and 8.0.30. If a device has .NET 9.0.17 and 8.0.30 installed, the command will remove 9.0.17, but retain 8.0.30. + +- Remove all SDK bundles if their release version is less than 10.0.0. + + ```console + dnim-win-[x86|x64|arm64] uninstall --it sdk --it bundle --rv [,10.0.0) + ``` + +## See also + +[.NET Installs](dnim-net-installs.md) diff --git a/docs/core/additional-tools/dnim-cli-update.md b/docs/core/additional-tools/dnim-cli-update.md new file mode 100644 index 0000000000000..220f6779fc241 --- /dev/null +++ b/docs/core/additional-tools/dnim-cli-update.md @@ -0,0 +1,143 @@ +--- +title: dnim update command +description: The update command updates existing .NET installations. +author: joeloff +ms.date: 09/16/2026 +ai-usage: ai-assisted +--- + +# dnim update + +## Name + +`dnim-win-[x86|x64|arm64] update` - Detects, classifies, removes and updates .NET installations on a device. + +## Synopsis + +```dotnetcli +dnim-win-[x86|x64|arm64] update [-a|--accept-license] + [-b|--include-bin-deployed-installs] + [--csrp|--create-system-restore-point] + [--epv|--except-product-version ] + [--esp|--except-support-phase ] + [--ignore-dependents] + [--it|--install-type ] + [--klpv|--keep-latest-product-version ] + [--klsp|--keep-latest-support-phase ] + [-l|--log-file ] + [--log-extra-debug-information, --lx] + [--no-wua] + [-o|--output-file ] + [--offline ] + [--offline-revocation-checks] + [--output-format ] + [--pv|--product-version ] + [--remove-EOL-versions-from-VS] + [--remove-orphaned-installs] + [--restore-point-suffix|--rps ] + [--ri|--report-issues] + [--rv|--release-version ] + [--sp|--support-phase ] + [--update-discontinued-sdks] + [--update-EOL-versions] + [-v|--verbosity ] + [--verify-signatures ] + [--what-if] + +dnim-win-[x86|x64|arm64] update -?|-h|--help +``` + +## Description + +The `update` command detects, classifies, removes and updates .NET installations on Windows. MSIs and bundles are detected by default. Bin deployed (xcopy/zip) installs under `Program Files` can be detected using the `--include-bin-deployed-installs` option. + +> [!CAUTION] +> DNIM always attempts to remove all copies of .NET on a device before updating, even if the latest release is instaleld. Use the `--what-if` option to review planned actions and consider using the `--keep-latest-product-version` and `keep-latest-support-phase` options to retain specific installations. + +The command can target specific products based on their product version, support phase, type and release version. Only standalone bundles can be updated. Installations of .NET that came from Visual Studio will require you to update Visual Studio. DNIM will not update Visual Studio. + +The command will first remove any applicable installs before applying updates. This approach yields better results to meet compliance goals and reduce the need for secondary deployments to remove old copies of .NET. + +## Options + +- [!INCLUDE [accept-license](includes/dnim-cli-accept-license.md)] + +- [!INCLUDE [bin-deployed-installs](includes/dnim-cli-include-bin-deployed-installs.md)] + +- [!INCLUDE [create-system-restore-point](includes/dnim-cli-create-system-restore-point.md)] + +- [!INCLUDE [except-product-version](includes/dnim-cli-except-product-version.md)] + +- [!INCLUDE [except-support-phase](includes/dnim-cli-except-support-phase.md)] + +- [!INCLUDE [ignore-dependents](includes/dnim-cli-ignore-dependents.md)] + +- [!INCLUDE [install-type](includes/dnim-cli-install-type.md)] + +- [!INCLUDE [keep-latest-product-version](includes/dnim-cli-keep-latest-product-version.md)] + +- [!INCLUDE [keep-latest-support-phase](includes/dnim-cli-keep-latest-support-phase.md)] + +- [!INCLUDE [log-file](includes/dnim-cli-log-file.md)] + +- [!INCLUDE [log-extra-debug-information](includes/dnim-cli-log-extra-debug-information.md)] + +- [!INCLUDE [no-wua](includes/dnim-cli-no-wua.md)] + +- [!INCLUDE [output-file](includes/dnim-cli-output-file.md)] + +- [!INCLUDE [offline](includes/dnim-cli-offline.md)] + +- [!INCLUDE [offline-revocation-checks](includes/dnim-cli-offline-revocation-checks.md)] + +- [!INCLUDE [output-format](includes/dnim-cli-output-format.md)] + +- [!INCLUDE [product-version](includes/dnim-cli-product-version.md)] + +- [!INCLUDE [remove-EOL-versions-from-VS](includes/dnim-cli-remove-eol-versions-from-vs.md)] + +- [!INCLUDE [remove-orphaned-installs](includes/dnim-cli-remove-orphaned-installs.md)] + +- [!INCLUDE [report-issues](includes/dnim-cli-report-issues.md)] + +- [!INCLUDE [release-version](includes/dnim-cli-release-version.md)] + +- [!INCLUDE [support-phase](includes/dnim-cli-support-phase.md)] + +- [!INCLUDE [update-discontinued-sdks](includes/dnim-cli-update-discontinued-sdks.md)] + +- [!INCLUDE [update-EOL-versions](includes/dnim-cli-update-eol-versions.md)] + +- [!INCLUDE [verbosity](includes/dnim-cli-verbosity.md)] + +- [!INCLUDE [verify-signatures](includes/dnim-cli-verify-signatures.md)] + +- [!INCLUDE [what-if](includes/dnim-cli-what-if.md)] + +## Results + +The results are similar to that of the uninstall command, but additional columns showing the update action and target version are included. + +| Display Name | Release | Type | Support | Uninstall Action | Update Action | Update Version | +| --- | --- | --- | --- | --- | --- | --- | +| Microsoft Windows Desktop Runtime 11.0.0 (x64) | 11.0.0-preview.7.26381.103 | Bundle | GoLive | Uninstall | Update | 11.0.0-rc.1.26425.128 | + +## Examples + +- Update .NET installs: + + ```console + dnim-win-[x86|x64|arm64] update + ``` + +- Updated all the .NET 8.0 installations, including discontinued SDKs. + + ```console + dnim-win-[x86|x64|arm64] update --update-discontinued-sdk --pv 8.0 + ``` + + Assume 8.0.31 is the latest .NET 8 release. It includes updates for both the 8.0.1xx and 8.0.4xx SDKs. The 8.0.2xx and 8.0.3xx SDKs are no longer produced and considered discontinued. If a device has the 8.0.202 SDK installed, DNIM can install the 8.0.425 SDK and remove the 8.0.202 SDK. + +## See also + +[.NET Installs](dnim-net-installs.md) diff --git a/docs/core/additional-tools/dnim-faq.yml b/docs/core/additional-tools/dnim-faq.yml new file mode 100644 index 0000000000000..e09640ac7d3bc --- /dev/null +++ b/docs/core/additional-tools/dnim-faq.yml @@ -0,0 +1,73 @@ +### YamlMime:FAQ +metadata: + title: .NET Install Manager FAQ + description: "This article answers frequently asked questions about the .NET Install Manager." + titleSuffix: "" + ms.topic: faq + ms.date: 09/14/2026 + +title: .NET Install Manager FAQ +summary: | + The .NET Install Manager (*DNIM*) is a command-line tool used to identify, remove, and update .NET installations on Windows. It's primarily intended to assist organizations in removing vulnerable copies of .NET from devices to meet compliance targets. + +sections: + - name: General + questions: + - question: What is the difference between DNIM and the .NET Uninstall tool? + answer: | + - The uninstall is targeted to developers to assist with cleaning up old SDKs and runtimes. + - The uninstall tool supports other operating systems like macOS. DNIM is specifically designed for Windows. + - The uninstall tool doesn't support MSI detection or detailed analysis of Visual Studio. + - The uninstall tool doesn't support updating installations. + - DNIM provides strong diagnostic capabilities, including the ability to identify .NET processes and runtime versions. + - DNIM was designed to work with deployment tools like Intune inside large enterprise environments. + + - question: Does DNIM require internet access? + answer: | + It depends. The [`layout`](dnim-cli-layout.md) command requires internet access to download release information and installer executables. Other commands like [`scan`](dnim-cli-scan.md) supports offline execution. + + - question: .NET x.y is EOL. Why isn't Visual Studio listing it as out-of-support? + answer: | + - The out-of-support metadata is unsupported by Visual Studio. The metadata was first introduced in Visual Studio 15.9.27, 16.0.18, 16.4.13, 16.7.3 and 16.8 Preview 3. + - .NET was still in support when Visual Studio shipped, but no additional updates of Visual Studio were shipped and the metadata couldn't be updated. + + - question: Does DNIM report the ASP.NET Core Module? + answer: | + No. The ANCM MSI is not currently reported. + + - question: Why is the SDK placeholder MSI being reported? + answer: | + MSIs shipping with Visual Studio are usually hidden from the Programs and Features list (ARP). When .NET Core 3.0 began shipping MSIs in Visual Studio, a placeholder MSI was added to create a visible entry in ARP and direct users to remove the SDK through Visual Studio. The MSI can become orphaned and users can be left with multiple entries alluding to SDKs installed by Visual Studio when infact they only of a few. This has created confusion for users trying to remove non-existing SDKs. DNIM is able to detect and remove these orphaned placeholders. + + - question: Is DNIM open source? + answer: | + No. DNIM is not an open source project. + + - name: Best Practices + questions: + - question: What is the recommended approach to remove end-of-life versions of .NET? + answer: | + - Start with a small pilot to gather information and understand the state of devices. + - To gather live data, you can push deploytments of the `uninstall` and `update` commands that include the `--what-if` option. To minimize risk, consider using Windows Sandbox to set up a controlled environment where you can install .NET and experiment with the CLI. + - If devices acquire .NET through Visual Studio, consider using [Visual Studio](https://learn.microsoft.com/visualstudio/install/update-visual-studio?view=visualstudio#remove-out-of-support-components) to remove old .NET components. + - Use Microsoft Update to patch .NET copies installed by the standalone bundles. + - Deploy DNIM to clean up any remaining installs using `--sp eol`. If a more agressive cleanup is required, consider including the `--remove-orphaned-installs` and `--remove-EOL-versions-from-VS` options. + + - question: Can DNIM be used instead of Microsoft Update? + answer: | + It is recommended to continue using Microsoft Update. DNIM can be used to manage updates when Windows do not offer automatic updates for .NET, for example Windows insiders. + + - name: Troubleshooting + questions: + - question: Can DNIM be used with application monitoring and profiling tools like Datadog? + answer: | + No. DNIM is a trimmed .NET application and will fail to launch. You can exclude DNIM from profiling by setting an environment variable before launching it: `DD_PROFILER_EXCLUDE_PROCESSES="dnim-win-x64.exe"`. + + - question: Why is DNIM unable to uninstall the version of .NET that my vulnerability scanning tool is reporting? + answer: | + - Use the `-b` option to check for bin-deployed installs. + - Check whether the uninstall command reported any dependents. + + - question: Why did Visual Studio reinstall an out-of-support .NET component? + answer: | + - If you manually removed the installation and VS considers it to be in support, actions like repairing Visual Studio may result in reinstalling the setup package. diff --git a/docs/core/additional-tools/dnim-logs.md b/docs/core/additional-tools/dnim-logs.md new file mode 100644 index 0000000000000..1405bc7b5ffc3 --- /dev/null +++ b/docs/core/additional-tools/dnim-logs.md @@ -0,0 +1,78 @@ +--- +title: .NET Install Manager Logging +description: An overview of various logs provided by DNIM. +author: joeloff +ms.date: 08/11/2026 +ai-usage: ai-assisted +--- + +# Logging + +DNIM provides a rich set of logs to diagnose and troubleshoot issues. + +## Console + +DNIM always generates output to the console. The default verbosity is `normal`. It is recommended to set the verbosity level to `quiet` when deploying DNIM using Configuration Manager to avoid disrupting users. + +## Diagnostic file log + +DNIM always generates a diagnostic log in the current user's `%TEMP%` directory. The default filename starts with the `dnim` prefix followed by the file creation date and time, for example, `dnim_20260811_203922.log` indicates the log was generated on August 11, 2026 at 8:39:22 pm. + +The contents of the log varies based on the command and device state. The start of the log includes information like the version of DNIM and the command that was executed. + +Each line consists of a timestamp, message type and event ID followed by a detailed message. + +```console +[2026-08-11 20:39:23.495]d1000: DNIM started, command: c:\Users\user1\Downloads\dnim-win-x64.exe scan, PID: 18800, PPID: 34220 (C:\WINDOWS\System32\cmd.exe), SID: S-1-5-21-2127521184-1604012920-1887927527-5663403. +``` + +In the previous example, `d1000` indicates a diagnostic message with event ID 1000 was logged. Messages can also be prefixed with `i` (informational) or `e` (error). Only messages with non-zero event ID are sent to the Windows Event log. + +## Registry + +DNIM stores information about its last execution in the registry. The data is stored under `HKCU\Software\Microsoft\DNIM` or `HKLM\Software\Microsoft\DNIM` (if the command was executed with administrator permissions). + +```console +D:\>reg query HKCU\Software\Microsoft\DNIM /s + +HKEY_CURRENT_USER\Software\Microsoft\DNIM + LastRunCommandLine REG_SZ c:\Users\user1\Downloads\dnim-win-x64.exe --help + LastRun REG_SZ 08/12/2026 03:40 + LastRunDate REG_SZ 08/12/2026 + LastRunTime REG_SZ 3:40:04.1996353 + +HKEY_CURRENT_USER\Software\Microsoft\DNIM\License + Accepted REG_DWORD 0x1 + Type REG_SZ prerelease +``` + +## Events + +Commands that modify the state of a device will generate events in the Windows Application log using `DNIM` as the event source. + +![DNIM Start Event](./media/dnim/eventlog.png) + +### Event IDs + +| Event ID | Remarks | +| --- | --- | +| 1000 | The application started and recorded its command and process details. | +| 1001 | An application configuration or environment problem was encountered. | +| 1002 | An installer signature was verified or signature verification failed. | +| 1003 | A general application error or exception occurred. | +| 1100 | An installation was evaluated against the configured policies. | +| 1101 | One or more installations require remediation. | +| 1200 | An uninstall operation started. | +| 1210 | An uninstall operation completed and reported its exit code. | +| 1299 | An uninstall operation threw an exception and failed. | +| 1300 | A system restore point was created. | +| 1301 | The System Restore service was not initialized. | +| 1310 | A system restore point was ended successfully. | +| 1399 | A System Restore initialization, creation, or completion operation failed. | +| 1400 | The Windows Update Agent service was started. | +| 1410 | The Windows Update Agent service was stopped or an attempt to stop it failed. | +| 1499 | The Windows Update Agent service failed to start. | +| 1500 | An update operation started. | +| 1510 | An update operation completed and reported its exit code. | +| 1550 | An update operation was skipped. This event ID is not currently used. | +| 1599 | An update could not be acquired or the update operation threw an exception. | diff --git a/docs/core/additional-tools/dnim-net-installs.md b/docs/core/additional-tools/dnim-net-installs.md new file mode 100644 index 0000000000000..486fb0818c5ee --- /dev/null +++ b/docs/core/additional-tools/dnim-net-installs.md @@ -0,0 +1,131 @@ +--- +title: Managed .NET installations on Windows +description: Provides a technical overview of .NET installations on Windows, including composition and reference counting. +author: joeloff +ms.date: 09/14/2026 +ai-usage: ai-assisted +--- + +# Managed .NET installations on Windows + +Partially removed .NET installations are a common reason why vulnerability scanning software like Microsoft Defender Vulnerability Management will report a device. Understanding how .NET installations work can assist administrators with investigating reports and taking remedial actions. + +On Windows, .NET components like the runtime and SDK consist of multiple MSIs. Individual MSIs are not directly distributed. Instead, they are chained together to create bundles. + +## Acquiring .NET on Windows + +- Standalone bundles (EXEs) can be downloaded from [the .NET website](https://dotnet.microsoft.com/download). +- WinGet provides packages that contain the .NET bundles. +- Servicing updates distribute the bundles through Microsoft Update using automatic updates, WSUS and the Windows Update Catalog. +- Independent software vendors (ISVs) may redistribute .NET bundles as part of their software. +- OEMs sometimes include preinstalled copies of .NET bundles in the factory images of new devices. +- Some Azure marketplace images of Windows include preinstalled copies of the bundles. +- Third party package managers like Chocolatey also distribute the .NET bundles. +- Enterprises sometimes repackage the bundles using proprietary packages for internal distribution. +- Some .NET application hosts might also direct users to download and install missing runtime bundles. + +Visual Studio can also be used to acquire .NET and uses the same MSIs as the standalone bundles. + +> [!NOTE] +> The .NET SDK bundle shipped with Visual Studio until 16.2. Starting with .NET Core 3.0 in Visual Studio 16.3, the SDK bundles were replaced with the individual .NET MSIs. + +## Upgrades + +.NET supports upgrades between patch versions within a major/minor release. .NET 8.0.7 will upgrade previous releases like 8.0.4 or 8.0.0, including prerelease versions, but won't upgrade a previous major release like .NET 7.0. The .NET SDK supports upgrades between patches within a feature band. The 8.0.100 SDK can be upgraded to 8.0.103, but the 8.0.3xx SDK will not upgrade the 1xx or 2xx feature bands. + +The majority of upgrades are handled at the bundle level. The previous version is only removed once the new version is installed. There are two exceptions: the .NET host and ASP.NET Core Module MSIs are updated in place. + +Starting with .NET 8, users have the option to [defer](/dotnet/core/install/windows#choose-when-previous-versions-are-removed) removing the previous version of a bundle. + +## Bundle composition and reference counting + +Bundles are composed from multiple MSIs, some of which are shared between multiple bundles. + +![.NET installer composition](media/dnim/dotnet-bundles.svg) + +- The runtime bundle contains three MSIs that also ship in the desktop runtime and SDK bundles. +- The desktop bundle includes an additional MSI that is shared with the SDK bundle. +- The SDK includes additional MSIs that contain the CLI, templates, and targeting packs used to create and build .NET applications. + +Shared MSIs are managed using reference counting. Every .NET MSI creates a registry key called a provider key that allows a bundle to register itself as a dependent. If an MSI is already installed, the bundle only updates the registration information. Bundles are unregistered when they're removed. The shared MSIs are only removed once there are no registered dependents. + +The registry information below is an example of the .NET host MSI provider key. There are four registered dependents, including Visual Studio. + +```console +HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\Dotnet_CLI_SharedHost_10.0_x64 + (Default) REG_SZ {8A8CC49F-7D1E-45DC-B7B5-35FF61A2C25E} + Version REG_SZ 80.40.55332 + DisplayName REG_SZ Microsoft .NET Host - 10.0.10 (x64) + +HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\Dotnet_CLI_SharedHost_10.0_x64\Dependents\VS.{AEF703B8-D2CC-4343-915C-F54A30B90937} + +HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\Dotnet_CLI_SharedHost_10.0_x64\Dependents\{609A456D-467D-4077-9BA2-B6404F1B1163} + +HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\Dotnet_CLI_SharedHost_10.0_x64\Dependents\{866BECDA-F284-473A-9E84-0CCE816BF06F} + +HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\Dotnet_CLI_SharedHost_10.0_x64\Dependents\{FD5EA214-C690-466F-B8FB-1741881913F9} +``` + +> [!NOTE] +> Individual MSIs become orphaned when dependents remain registered after a bundle is removed, for example, when the uninstall is interrupted. + +> [!NOTE] +> Visual Studio uses a well-known value, `VS.{AEF703B8-D2CC-4343-915C-F54A30B90937}`, to register itself as a dependent. The actual reference count is determined by checking the installation manifest for each Visual Studio instance. + +## Bin deployed installations + +Bin deployed installations refer to copies of .NET that aren't associated with an MSI. This can be achieved by running the install scripts as an administrator and setting the installation directory to `Program Files\dotnet'. Bin deployed installations can complicate remediation. Scanners will report vulnerabilities, but administrators won't find MSIs to uninstall. DNIM is able to detect bin deployed installs. + +## Detection + +DNIM relies on a number of heuristics to identify bundles and MSIs associated with .NET. Accurately detecting installations is critical to successfully remediate a non-complaint devices. + +### Bundles + +Bundles are identified using their display names and file information stored in the registry. Additional checks are performed on executables to ensure they are valid installers. This informatio is also compared against the JSON data .NET publishes for each release. + +### MSI Detection + +DNIM performs an exhaustive search against the installer component data stored in the registery under `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components` to identify .NET MSIs. + +Each subkey represents a different component ID. The values under each key represent product codes. Both the component ID and product codes are stored as packed GUIDs. The example below is of the component associated with `dotnet.exe`. + +```console +HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\BBB993545ADD68342A9E16F83B5CA481 + 40A3E8A8CB38EDC4299598B366C6A11B REG_SZ C:\Program Files\dotnet\dotnet.exe + A75437C333A10ED46B2CF6AB78E7F1FC REG_SZ C:\Program Files (x86)\dotnet\dotnet.exe + 79D2396D1F638B04C9CDAC38562B0100 REG_SZ C:\Program Files\dotnet\dotnet.exe + EA6D9CBF69367CF4CB81005882631FD6 REG_SZ C:\Program Files (x86)\dotnet\dotnet.exe + 872D9C61B8AA60F47A4CDF137C8523A3 REG_SZ C:\Program Files (x86)\dotnet\dotnet.exe + 6235DF10DB18AED4F910D396BBDD7AE5 REG_SZ C:\Program Files\dotnet\dotnet.exe + 0370151E43A53FE48B564853D1B81FAB REG_SZ C:\Program Files\dotnet\dotnet.exe + F6D22817F79056B46B45655C7495EE9A REG_SZ C:\Program Files (x86)\dotnet\dotnet.exe + D512842CB6C6A404BAE605D564042E50 REG_SZ C:\Program Files\dotnet\dotnet.exe +``` + +### Bin deployed installs + +Because DNIM performs an exhaustive search of installer components, any files under `Program Files\dotnet` not associated with an MSI are classified as bin deployed installations. + +## Classification + +Incorrect classification of installations can result in removing or retaining the wrong installation, potentially breaking applications or leaving devices in a non-compliant state. + +Once a product (for example, NET 10) is identified, additional information like its release (for example, 10.0.4) and support phase (for example, active) can be determined. This allows administrators to create flexible deployments. + +Installations are further classified according to their .NET component (ASP.NET Core, SDK, etc.), architecture, and type of installation (bundle, MSI, or bin deployed). + +There are some special cases worth mentioning. + +### .NET Standard 2.1 + +Ensuring consistent behavior requires installations to define their product, release, and support phase. The targeting pack for .NET Standard 2.1 presents an interesting challenge. It doesn't contain executable code and only provides reference assemblies for the APIs defined by the standard. The targeting pack first shipped as part of the .NET Core 3.0.100 SDK, but was included in every subsequent SDKs until .NET 10. While DNIM will classify the release and product under .NET Core 3.0, the support phase is always reported as active since it may be included in SDKs that are in active support. + +> [!NOTE] +> The .NET Standard 2.1 targeting pack was removed from the SDK installation in .NET 10. SDKs automatically download missing targeting packs using NuGet packages when building applications. + +### .NET SDK feature bands + +In .NET Core 1.0 and 1.1, SDKs used a versioning scheme similar to the runime. The last SDK in .NET Core 1.1 was versioned as 1.1.14 and included the 1.1.13 runtime. + +SDK features bands were introduced in the 2.1.100 SDK to differentiate between supported features in Visual Studio. The SDK shipped as part of the .NET Core 2.0.5 release. The last 2.0 SDK was versioned as 2.1.202 and included in the 2.0.9 release. The first SDK to ship in .NET Core 2.1 was versioned as 2.1.300. In later releases, SDK feature bands always start at 100, e.g., 2.2.100, 3.0.100, etc. diff --git a/docs/core/additional-tools/dnim-overview.md b/docs/core/additional-tools/dnim-overview.md new file mode 100644 index 0000000000000..533c60885af17 --- /dev/null +++ b/docs/core/additional-tools/dnim-overview.md @@ -0,0 +1,36 @@ +--- +title: .NET Install Manager overview +description: An overview of the .NET Install Manager. This tool is a guided command-line tool to manage .NET installations. +author: joeloff +ms.date: 09/14/2026 +ai-usage: ai-assisted +--- + +# .NET Install Manager overview + +The .NET Install Manager (*DNIM*) is a command-line tool used to identify, remove, and update .NET installations on Windows. It's primarily intended to assist organizations in removing vulnerable copies of .NET from devices to meet compliance targets. + +DNIM ships as a trimmed, single file .NET executable, making it easy to deploy across devices using tools like [Microsoft Configuration Manager](/intune/configmgr/). + +> [!IMPORTANT] +> DNIM doesn't enforce any policies by default. Administrators should use the CLI to create deployments that best express their organization's compliance policies. + +The tool is data driven and depends on the [release information](https://builds.dotnet.microsoft.com/dotnet/release-metadata/releases-index.json) published for .NET. While internet access is required to download the latest release information and updates, administrators can prepare offline deployments for network restricted environments. + +## Download + +The latest release can be found on the [Microsoft Download Center](https://aka.ms/dnim). + +## System Requirements + +DNIM is currently built using .NET 8 and compatible with all versions of Windows supported by .NET 8. + +## Support + +> [!IMPORTANT] +> Because DNIM is a single file application, new builds are regularly published to ensure the .NET runtime remains up to date. Any changes, including security fixes are documented in the release notes. Enterprise customers should contact their [customer support representative](https://engagecenter.microsoft.com/#view/Microsoft_AzureCXP_EngageHub/EngageHubMenu.MenuView/~/helpSupport) to address concerns or report issues. + +## See also + +* [Managed .NET installations on Windows](dnim-net-installs.md) +* [Logging](dnim-logs.md) diff --git a/docs/core/additional-tools/includes/dnim-cli-accept-license.md b/docs/core/additional-tools/includes/dnim-cli-accept-license.md new file mode 100644 index 0000000000000..003a0d0b668f1 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-accept-license.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/11/2026 +ms.topic: include +--- +**`-a|--accept-license`** + +Automatically accept the license agreement. On first run, the user will be prompted to accept the license. The command will fail if the verbosity is set to `quiet` and the tool is executed for the first time. Administrators should include this option when deploying DNIM across their network. diff --git a/docs/core/additional-tools/includes/dnim-cli-create-system-restore-point.md b/docs/core/additional-tools/includes/dnim-cli-create-system-restore-point.md new file mode 100644 index 0000000000000..013be43129583 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-create-system-restore-point.md @@ -0,0 +1,9 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--csrp|--create-system-restore-point`** + +Create a system restore point before making changes to the machine. This option has no effect when System Restore isn't supported, such as on Windows Server, or when the service is disabled. + +Refer to the [System Restore](https://support.microsoft.com/Windows/Experience/Backup-Recovery/system-restore) documentation for additional information. diff --git a/docs/core/additional-tools/includes/dnim-cli-cve.md b/docs/core/additional-tools/includes/dnim-cli-cve.md new file mode 100644 index 0000000000000..b2a644142a417 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-cve.md @@ -0,0 +1,10 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--cve `** + +Filter releases using the Common Vulnerabilities and Exposures (CVE) identifier. Only releases that address the specified CVEs are included. Specify the option once for each CVE. + +> [!IMPORTANT] +> This option depends on the release information published by .NET. diff --git a/docs/core/additional-tools/includes/dnim-cli-download-updates-when-offline.md b/docs/core/additional-tools/includes/dnim-cli-download-updates-when-offline.md new file mode 100644 index 0000000000000..a93e016a98c38 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-download-updates-when-offline.md @@ -0,0 +1,10 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--duwo|--download-updates-when-offline`** + +Allow missing updates to be downloaded when offline. + +> [!TIP] +> This option is useful when DNIM is deployed offline, but Administrators still want devices to update even when they are not connected to a corporate network. For example, a user might take their laptop home before DNIM is deployed. diff --git a/docs/core/additional-tools/includes/dnim-cli-except-product-version.md b/docs/core/additional-tools/includes/dnim-cli-except-product-version.md new file mode 100644 index 0000000000000..89276394c9f2d --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-except-product-version.md @@ -0,0 +1,10 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--epv|--except-product-version `** + +Exclude installations that match the specified product version. Product versions contain a major and minor version, such as `2.2` or `5.0`. Specify the option once for each product version. + +> [!NOTE] +> The `--product-version` and `--except-product-version` options are mutually exclusive. diff --git a/docs/core/additional-tools/includes/dnim-cli-except-support-phase.md b/docs/core/additional-tools/includes/dnim-cli-except-support-phase.md new file mode 100644 index 0000000000000..3e17265ac68fe --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-except-support-phase.md @@ -0,0 +1,10 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--esp|--except-support-phase `** + +Exclude installations that match the specified support phase. Specify the option once for each support phase. + +> [!NOTE] +> The `--support-phase` and `--except-support-phase` options are mutually exclusive. diff --git a/docs/core/additional-tools/includes/dnim-cli-ignore-dependents.md b/docs/core/additional-tools/includes/dnim-cli-ignore-dependents.md new file mode 100644 index 0000000000000..6d599bee53645 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-ignore-dependents.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--ignore-dependents`** + +Ignore installation dependencies that would otherwise prevent packages from being removed. diff --git a/docs/core/additional-tools/includes/dnim-cli-include-bin-deployed-installs.md b/docs/core/additional-tools/includes/dnim-cli-include-bin-deployed-installs.md new file mode 100644 index 0000000000000..58704e0063ec3 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-include-bin-deployed-installs.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`-b|--include-bin-deployed-installs`** + +Search for bin-deployed installations under Program Files. This option will incur additional overhead to verify installations that aren't backed by an MSI. diff --git a/docs/core/additional-tools/includes/dnim-cli-include-installers.md b/docs/core/additional-tools/includes/dnim-cli-include-installers.md new file mode 100644 index 0000000000000..a293a1696d694 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-include-installers.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--include-installers`** + +Download installation packages when creating or updating a layout. diff --git a/docs/core/additional-tools/includes/dnim-cli-include-previews.md b/docs/core/additional-tools/includes/dnim-cli-include-previews.md new file mode 100644 index 0000000000000..ec619586f23f1 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-include-previews.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--include-previews`** + +Include preview versions when downloading installation packages. diff --git a/docs/core/additional-tools/includes/dnim-cli-install-type.md b/docs/core/additional-tools/includes/dnim-cli-install-type.md new file mode 100644 index 0000000000000..31cbf58c4a625 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-install-type.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--it|--install-type `** + +Target installations based on their package type, component, or architecture. You can specify this option multiple times. For example, use `--it sdk --it x64` to only target 64-bit SDK installations. diff --git a/docs/core/additional-tools/includes/dnim-cli-keep-latest-product-version.md b/docs/core/additional-tools/includes/dnim-cli-keep-latest-product-version.md new file mode 100644 index 0000000000000..db401aff93635 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-keep-latest-product-version.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--klpv|--keep-latest-product-version `** + +Keep an installation when it matches the specified product version and is the latest known version of that product. Specify the option once for each product version. diff --git a/docs/core/additional-tools/includes/dnim-cli-keep-latest-support-phase.md b/docs/core/additional-tools/includes/dnim-cli-keep-latest-support-phase.md new file mode 100644 index 0000000000000..e4c874ec08701 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-keep-latest-support-phase.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--klsp|--keep-latest-support-phase `** + +Keep an installation when it matches the specified support phase and is the latest known version. Specify the option once for each support phase. diff --git a/docs/core/additional-tools/includes/dnim-cli-latest.md b/docs/core/additional-tools/includes/dnim-cli-latest.md new file mode 100644 index 0000000000000..a8bc9d5fbbf59 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-latest.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--latest`** + +Include only the latest release of each product. diff --git a/docs/core/additional-tools/includes/dnim-cli-layout-directory.md b/docs/core/additional-tools/includes/dnim-cli-layout-directory.md new file mode 100644 index 0000000000000..374751cc879ac --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-layout-directory.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--layout-directory `** + +Specify the path to the layout directory. The path can be a local directory or a UNC path. diff --git a/docs/core/additional-tools/includes/dnim-cli-log-extra-debug-information.md b/docs/core/additional-tools/includes/dnim-cli-log-extra-debug-information.md new file mode 100644 index 0000000000000..7b4009eb83f05 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-log-extra-debug-information.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--lx|--log-extra-debug-information`** + +Enable additional debug logging when directly executing an MSI. This option doesn't set the Windows Installer logging policy and doesn't affect MSIs executed as part of a bundle. diff --git a/docs/core/additional-tools/includes/dnim-cli-log-file.md b/docs/core/additional-tools/includes/dnim-cli-log-file.md new file mode 100644 index 0000000000000..2b90546beb99e --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-log-file.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`-l|--log-file `** + +Specify the path of the log file. By default, DNIM creates a timestamped log file in the user's temporary directory. diff --git a/docs/core/additional-tools/includes/dnim-cli-no-wua.md b/docs/core/additional-tools/includes/dnim-cli-no-wua.md new file mode 100644 index 0000000000000..e6b051893b39b --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-no-wua.md @@ -0,0 +1,10 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--no-wua`** + +Temporarily stop the Windows Update Agent service when executing installation packages. DNIM stops the service only if it's running and restarts it only if DNIM stopped it. The option is intended to minimize the impact from other updates that may interfere with updating .NET. + +> [!CAUTION] +> DNIM will make a best effort to restart WUA. It is possible for DNIM to exit abruptly before it is able to restart WUA if the process is killed. This could leave a device in a vulnerable state. diff --git a/docs/core/additional-tools/includes/dnim-cli-offline-revocation-checks.md b/docs/core/additional-tools/includes/dnim-cli-offline-revocation-checks.md new file mode 100644 index 0000000000000..55c63e211e8db --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-offline-revocation-checks.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--offline-revocation-checks`** + +Use cached certificate revocation lists when verifying file signatures. Use this option on machines with restricted network access. diff --git a/docs/core/additional-tools/includes/dnim-cli-offline.md b/docs/core/additional-tools/includes/dnim-cli-offline.md new file mode 100644 index 0000000000000..f58ae832eb34f --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-offline.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--offline `** + +Use files from the specified layout directory instead of retrieving required files from the internet. diff --git a/docs/core/additional-tools/includes/dnim-cli-output-file.md b/docs/core/additional-tools/includes/dnim-cli-output-file.md new file mode 100644 index 0000000000000..999d1178ea21f --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-output-file.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`-o|--output-file `** + +Specify the full path of the file where DNIM writes the command results. diff --git a/docs/core/additional-tools/includes/dnim-cli-output-format.md b/docs/core/additional-tools/includes/dnim-cli-output-format.md new file mode 100644 index 0000000000000..798ef8d1fa333 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-output-format.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--output-format `** + +Specify the output format for command results. The default format is `csv`. diff --git a/docs/core/additional-tools/includes/dnim-cli-product-version.md b/docs/core/additional-tools/includes/dnim-cli-product-version.md new file mode 100644 index 0000000000000..e2f183bdd3747 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-product-version.md @@ -0,0 +1,10 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--pv|--product-version `** + +Include installations that match the specified product version. Product versions contain a major and minor version, such as `2.2` or `5.0`. Specify the option once for each product version. By default, all known product versions are included. + +> [!NOTE] +> The `--product-version` and `--except-product-version` options are mutually exclusive. diff --git a/docs/core/additional-tools/includes/dnim-cli-release-version.md b/docs/core/additional-tools/includes/dnim-cli-release-version.md new file mode 100644 index 0000000000000..cfafd1f7872fc --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-release-version.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--rv|--release-version `** + +Include a specific version or range of versions using interval notation. For example, `[,7.0.3)` selects versions earlier than 7.0.3, and `[6.0.15]` selects only version 6.0.15. This option can't be combined with other installation filtering options. diff --git a/docs/core/additional-tools/includes/dnim-cli-remove-eol-versions-from-vs.md b/docs/core/additional-tools/includes/dnim-cli-remove-eol-versions-from-vs.md new file mode 100644 index 0000000000000..380caf50c104c --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-remove-eol-versions-from-vs.md @@ -0,0 +1,10 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--remove-EOL-versions-from-VS`** + +Remove end-of-life .NET installations installed by Visual Studio if every Visual Studio instance designates the installation as out of support. + +> [!NOTE] +> Starting with Visual Studio 15.9.27, 16.0.18, 16.4.13, 16.7.3 and 16.8 Preview 3, packages and components can be designated as out-of-support. Visual Studio will not reinstall out-of-support packages that have been manually uninstalled. diff --git a/docs/core/additional-tools/includes/dnim-cli-remove-orphaned-installs.md b/docs/core/additional-tools/includes/dnim-cli-remove-orphaned-installs.md new file mode 100644 index 0000000000000..93fc6d21a7efd --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-remove-orphaned-installs.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--remove-orphaned-installs`** + +Identify and remove orphaned installations that have dangling dependents. diff --git a/docs/core/additional-tools/includes/dnim-cli-report-issues.md b/docs/core/additional-tools/includes/dnim-cli-report-issues.md new file mode 100644 index 0000000000000..f30a52dde0c1a --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-report-issues.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--ri|--report-issues`** + +Return a nonzero exit code when the command succeeds but detects installations that require action. This option applies only when combined with `--what-if` and can be used by Intune detection scripts to trigger remediation. diff --git a/docs/core/additional-tools/includes/dnim-cli-restore-point-suffix.md b/docs/core/additional-tools/includes/dnim-cli-restore-point-suffix.md new file mode 100644 index 0000000000000..2ed8468a2fdc3 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-restore-point-suffix.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--rps|--restore-point-suffix `** + +Append a string of up to 128 characters to the system restore point description. diff --git a/docs/core/additional-tools/includes/dnim-cli-security.md b/docs/core/additional-tools/includes/dnim-cli-security.md new file mode 100644 index 0000000000000..d75670f442b9b --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-security.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--security`** + +Only include releases that contain security updates. diff --git a/docs/core/additional-tools/includes/dnim-cli-support-phase.md b/docs/core/additional-tools/includes/dnim-cli-support-phase.md new file mode 100644 index 0000000000000..6509e45987ae7 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-support-phase.md @@ -0,0 +1,10 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--sp|--support-phase `** + +Include only products, releases, or installations that match the specified support phase. Specify the option once for each support phase. By default, all support phases are included. + +> [!NOTE] +> The `--support-phase` and `--except-support-phase` options are mutually exclusive. diff --git a/docs/core/additional-tools/includes/dnim-cli-update-discontinued-sdks.md b/docs/core/additional-tools/includes/dnim-cli-update-discontinued-sdks.md new file mode 100644 index 0000000000000..68292a8b17bdf --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-update-discontinued-sdks.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--update-discontinued-sdks`** + +Allow SDK updates when an installed feature band has been discontinued. DNIM selects the highest applicable feature band and patch. diff --git a/docs/core/additional-tools/includes/dnim-cli-update-eol-versions.md b/docs/core/additional-tools/includes/dnim-cli-update-eol-versions.md new file mode 100644 index 0000000000000..d6747b25ebf35 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-update-eol-versions.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--update-EOL-versions`** + +Update end-of-life installations to the latest available version. diff --git a/docs/core/additional-tools/includes/dnim-cli-verbosity.md b/docs/core/additional-tools/includes/dnim-cli-verbosity.md new file mode 100644 index 0000000000000..1db3e6d222631 --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-verbosity.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`-v|--verbosity `** + +Set the console output verbosity. Log files always contain diagnostic output. The default value is `normal`. diff --git a/docs/core/additional-tools/includes/dnim-cli-verify-signatures.md b/docs/core/additional-tools/includes/dnim-cli-verify-signatures.md new file mode 100644 index 0000000000000..792bb2bec722e --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-verify-signatures.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--verify-signatures `** + +Control signature verification before DNIM executes a bundle. Daily .NET builds are unsigned and aren't removed by default. The default value is `always`. diff --git a/docs/core/additional-tools/includes/dnim-cli-what-if.md b/docs/core/additional-tools/includes/dnim-cli-what-if.md new file mode 100644 index 0000000000000..3f362037f861b --- /dev/null +++ b/docs/core/additional-tools/includes/dnim-cli-what-if.md @@ -0,0 +1,7 @@ +--- +ms.date: 08/12/2026 +ms.topic: include +--- +**`--what-if`** + +Display the actions the command would take without making changes to the system. diff --git a/docs/core/additional-tools/index.md b/docs/core/additional-tools/index.md index f93ceb29dfe7f..4374c76450b1b 100644 --- a/docs/core/additional-tools/index.md +++ b/docs/core/additional-tools/index.md @@ -54,3 +54,7 @@ You can use [dotnet dev-certs](self-signed-certificates-guide.md) to create self ## .NET code coverage tool You can use [dotnet-coverage](dotnet-coverage.md) to collect [code coverage](../testing/unit-testing-code-coverage.md) from any .NET process. + +## .NET Install Manager + +Use the [.NET Install Manager](dnim-overview.md) to detect, uninstall, or update .NET installations on Windows to remediate devices flagged by software vulnerability scanners. diff --git a/docs/core/additional-tools/media/dnim/dotnet-bundles.svg b/docs/core/additional-tools/media/dnim/dotnet-bundles.svg new file mode 100644 index 0000000000000..851205cfc128e --- /dev/null +++ b/docs/core/additional-tools/media/dnim/dotnet-bundles.svg @@ -0,0 +1,86 @@ + + + + + Windows x64 installer composition — .NET 10.0.11 / SDK 10.0.111 + + + Three shipping .exe bundles and the .msi packages they carry + + + + + + + + + + dotnet-runtime- + 10.0.11-win-x64.exe + + windowsdesktop-runtime- + 10.0.11-win-x64.exe + + dotnet-sdk-10.0.111-win-x64.exe + + + + + + Shared by all three + + + dotnet-host-10.0.11-win-x64.msi + dotnet-hostfxr-10.0.11-win-x64.msi + dotnet-runtime-10.0.11-win-x64.msi + + + + + + Desktop + SDK + + + windowsdesktop- + runtime-10.0.11- + win-x64.msi + + + + + + SDK only + + + dotnet-100templates-10.0.111-servicing.26373.116-win-x64.msi + dotnet-sdk-internal-10.0.111-servicing.26373.116-win-x64.msi + dotnet-apphost-pack-10.0.11-win-x64.msi + dotnet-targeting-pack-10.0.11-win-x64.msi + + + + + + Runtime bundle + + + Desktop runtime bundle + + + SDK bundle + + + + A package sits in the region formed by every bundle rectangle that overlaps it + + \ No newline at end of file diff --git a/docs/core/additional-tools/media/dnim/eventlog.png b/docs/core/additional-tools/media/dnim/eventlog.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d7f34f33ea07454a59867481b995b467cafe18 GIT binary patch literal 22172 zcmeEtWmH?;_hx_sr4%Tolol;gC@t>pQi{8~yE_3|iWMuR#oZl>OMv1UEI=p@0fH0_ z5Hw8szP~kV{PPvP|d0;E4EC~SoOu)Z2$41}dxxLr-1ONzo|9&tA zT}!P103A*R8A&ZalY?b~AWB^z`)wCP7eAD!uviN@+1Y`xG!lU05yO<^V7!4WGaN|*z^`$-3Zs^?=&-bR=-*iX?yXXF z%vbvwb{Wq_X|YfV7_h=O8w1EMerdn}NWh{)<(8Iop?#6O4h7FQ7)zTfvgKIYWh5s( z6kv|idtD8?PWHcpmda8ch1_?X6+5O}SQJ?=QU2MUYAcC*eJj3A4-~wZCs7A9DLsJeM23y?d*2`p9iC0}d`o5ZjBtA13R1A4h;( zCyF2T2a5b=BPWT!$1GW_-R1@!(?HYAve>h8{Uio3=*mp$alwG4EuY|F|U zbh2JE_1jZ*WPOhRHlN&3oRSB4w{NPuTE6V5I<<^)MQyuYKB@=zh3D%7JWbrv`Ff8~ zhexgc$7D#LPTcu}jDQ}@Bo0cR<6mc|+rKb+nZ!=;1eg1;Lw;Uzmfx=BD-{qv6-ZsP z9D!ZkGCx~k7_5hOUCi?E>wbd}QVOiO@IR`_fJ689cZaoEZC&W&#jgv*zYoszt={j| zeAuG^0Gyr^PgV|N!WV5j6`NPCg@k-=RSd4T;XCDy;}BJ^RjHfcTbs5kCZDMU5jcV? zSMd0B`RtRZsv7*AUe$9-8WvJkDmF2rM`}lfxcjQN` z=$}NvdO%ON^)3+T4^FGN?>>dq*Ixpct+06EO*n-sDADA+JoB-~NC>idW@<|E_x)wg zRzuGHRZfXG3MQVM1KT)vSL^Mr@`1&@G?gG7G+e#ryZ!?V$?Fun6i&bego0<^etCOB zgv|5j18#GND7bdsEq}lIsXMjB6#QA`4yJ#76LResaJebaaeT#|dz5|0$BNoV?hZ5M z6f$+)m7GnMxe7QcMCFWt_kgI%ik+)^m*;EgWO3pd5HARELde+^={0)uaMY!*vV6}$ zg5bjw0iw6;P@LmjsH;mDb~DXVGW7&6vC$4!HOA!rQHY~taUx^{am-WA%muaNOE|HO zYpxnZaG7_9D;&AbgKV-LLBYnbU-mO$D>N%))LsFXrUN%U-55k7A+>XKW8!x(>ADD6 zm_!&BzVT>Y*z*gB_#Na7>>8|zQ*f&f^A}J};%Y9s8)=W&{fJBLhHQRr$kFfr3x)wO z^BfM17zKrh-w1S|&TC4dEep=#21m|fF9w-!Lhen^@(ocW-r{hd>%FCkXNZqhpR$^3 zGI$7S#8?KoSEwh%&*fzWiAsKSby@B}XDA6*Cg9@tSBKXx;kXGQh>X=g@vHZmHD4k5 z^PgU*M2g{nRH{kWfs@MKAa0h7^dv<+GWfd04N;@yD?Mfcc=R@zw06NlzC)MxcXD#L7jnFNAw1-0PY` zbuvfv68pNlEa_}*5WYi$g8J@++#kHWj$Dr1+5Byq8%cemswLFQpsRsT7T+cj+>LMY z3g6l|_4HScKczTO{P>q?EB4VrGuaLz=N@E$KXo%GPItfM?PivX4>M?SeE_B03GHWb zYvtIsAz}MYNa^>3-E1v%58w3i)AhD<&aQnXj~ny(1TC#GVNXe*mwg8*y)F8Gs@o60<%HZchZyo@U;ut?dpg+lg{)qggqz$fK&Nwp zEWVA4T*wA=H$o>VOfm}`JN;;=T8iRKR{iPE?Jz1Jmi3HHm1CL5(~*1EA- zLblhUv7Xlp%9O-7mYrRAhkQ4<865RkA8k|<;+W~CJW5arqb671KP^CmR$a6_M3Tfc z24Z%&zj_N^9a@Xez`v>=K)Btf7oN2_-}HZchntw$`D)yqI|v5r{YZ@a&BzcE6@&>0 zT`*`}YY*DuLQB7}+nIK=Q{@`Wba(6-{HgP#>S!9?$sxabbrX^gH=S2bxi*!B8krP$ z5@qJ90uN(6Qm^*e%Vrr$@HMHuXe%A*zikvJm_Z~pj8Z)hzFv{3bs>bi=plt^R1&Ro zktMsBO3>ULv*G7zZeR_)5Tfb>ztx)+I1aO<(U3S3b4|D(iOxvraWffo4%lcoy~-8l#6qv9> zX_4(cZocj&ie5BuqJC%TyuEA-cAt@qtemROaLI>uoic4rBJ0`JE23@qOn18I)_bzB zi0d`q;F21B-PtBt{`~YA%P+wfYnWezTlX-|qc}NIal?iy+Z30={kTbB!e6l3AAN@IJ;1~Xa6}{=(!!{iqp4JqHNjf1 zGiY@v?wa73HD*ciEO~-YgdO@uwu%UCxGS~-;n_xph8h`6ip_P%&fpPOH^&7t`sFlAP7NK-8(KL0+tS+|Ag#J{mrGcYHi@$N*9*aG^^7V#M||8(X{|0PC3)e zvg6zH)6C~6MLI&ema^C?UsFDEvj>RREu99CJb&K9SX{t7$|?ymt1BLt9k54d9I(gi z(6RT{VHxcZOtbliZ5ZT?aB!NT;{X+b1d!yO4$cDx|G;GsJr`ktNr>sYe%=^ZcQeQul!jCuB0J z0quzW+SaHMbBp>a@c?@-CO;;C4Z*K*I7qgZ#>+$LAkZC)P~gIR!nOyU z32}GQc6;L6-o{t*JB$TALR85t8KxWU1ctJnBn`dUq$Kt|1=BB%u$WTX4@=HJ*V-Ja z&=d=hZu-vmdQ0V310$-#Lm##8^GYLEahZm!PcvV) ze9o?Vq*`0ELUrII|3G`sl(21+=dLEtL0FsqlOK*HE3JL>)5iB^2igvdt_5eDKQNi~ z2Rr$y%45CcQX3m}9Uh~9;Kc7Df#@Sqoh0C2lBlX$teCd(_Wm)R zEvg7L@{A)#TYA7^9K~d&cu4lepWpQIF8sFRnd&*|G!EagOPen-z|;4IyQhXb zjp|b|HG+E&m)YgZZStb&UASl8jq&A2S;tfQhYKH~=mV%ZDc!dhTJFwP*s}^e;eIVC zF8&jWJ8j*9ysS!NYlX0bvsTZXf@a^+BlOsl9K-3Eb?gkrg7rMz-8i@}+K6HvN{wxo zs*>DwQnY-xzjUn8hOJ6%t&1OHrbJm&2d|4-fHbkZc2d*j$Ig-yP{CN&;IqlTloiFB zqpQk?`shJlDSyM}v99SFTj|ElT9X2n6hY27aM^COSV#87-r7JtZSDW)YR``6LBCj2 z7ehqK2Dq+tDVzQ=(qqRuE4) zRc5!x2m-)5CIqT_%Hv$icOP6)>7-KVSF35>hT0r~&n&2-J_q0f4d(Jo*Yz@2csY~T zZOWjD=||7vtYf7F(WpErBCK!IZ-B%y+bC;oE8o+}X5vU&zH@>R{AzQ5+GkvJf)ie0~s$-o3TGuN^$Tft7L? z1G1d1-P1#;soUl6W+AjfJ|E;n9MWGn_^iaWj^&vaagrAUMeZ(YreY|xrR#&lmjh3q zw+$Z*1qv@$IB0B|Rj8onxA-26d>wEU%qtfAhb1T;^>rnJkqNzKa6Ik}jaN|8B3{E%1EL?5(T^*P1)6RX!n+-3)B$*^A&Yd&8Wj-(&e?78Ca2kkJEE8E zE@&OU3+~EuuI*lI%9uoU-2>Y$793~!L$C4MX#s#j*<;!9hj!^tF#jSm`cP^BFbH@S z_V&uJ9{?sn-)0!;bM2)b+T~7tQsn~xz|}f#VWGu%w7KZTtHsCRyUlXU@>P=f2NR@g zlheA6qW-~}X{O4wXh*BD-0eTV>(?>B;rL`TOn`Y8pM!-WF$_Q<2`&#h1je-^DS=fh zou|nGC`_wvwRdz(l8lS8_PJ)qMvo|wzPpBlL4ck?At5f8Q0jUJ@!wM~;m|5caQ)A> z1-DndKs&!RmG06!v_PRV(*HIo*G;sK?)T?aT=1gU z{aV)V=J4HIIb88;D3D*O^Dwt@_RhSc?Ew#R**6ERJM_6ZP<9O<5k+0X_6+a-taN0I zX9{X|g>L6XQfsWD+W{i-3DiY!F=Xp5o}HY${46>&0ssuQdcw)6Cv(v%LCZ+}Kg#$u zfZ(Cs2cDS~m4kt=!cFu&!cIpKG5PVzTmSdBrXfw>BR#=nlEukUUJB0~pDzqI zAgMu*f!1%rj034-h+kHVas{Ug*%8xf!dI#aqZf+Od!Q}*f#5IQA;hf#1xw z)q~)g&sVh2f|8ers{tmmw2R{I8wwwlm;Ub}YAqW?KW|B^_4!*ZthFZTVKp;NSo#xc z)tDypYa`1T>zN08MA$8|=`(UAd3kPj$FCk~zZFq}bQUasq*xAK2zg8M=1KnXt*<^; zr3{I@YWakFB|j_!9_mbSn!jHR@!dhlJRXcbL}rl)?y)|z=ezKqet5yN8Gx_FBVR2d zRkFhXUOLKRc$biwf5-1z>e^V1C%HLnT=Gb(HfulAbeVewUR@vsxlw`CrBkxHp={#S z$~5xnU!EHy;#B>{<%@u$X*W;3Rr&?w%GCESXRj6>373!;NiM?7wyQJXvw}~ILZ(k` zVw~Q%P8-iTOC@Q>55SKK@A~xLM0-`J){P%TC^DAEqnI|WrCR*YM(jDgic@?kf0 zI?s`rkEjbKy*L*;``){b?Q`ud#WhYeorP~n&!1DaiCQiMT(E{7NvfbYJv%T z*#Dq5VVhyX%OVL^82+pF>1zAO%k6zWL^+*d14LyW(gf!br?`Tp)Xg_`^{$l|MH65N$aR1RaCBHIuwD;<|Q#Hg_L4U{xowcI6r7c!gK zHrLZt{l(8fiOryz5Y{B3bVW&2N7ye~`XC}C2PIc}<8@Q#oW%ucg z(S}E4NemE7qMS10KlY_$$L7ZbtC7%O(VrZd_;lXdypv)6~)CRELC={-~5Qn}~ zmE!L>ZGWp*^Z+5ZIhYkNIA)!HA;_;nim)*kdO3AZ-;z1M(pg@Dde~%1<1@xUFWxgw zp-8?&Q4>_xu28JY!sgnELUEge9DD5R1Pd<&rH!W6+u34oM<|&E`N__Kn#Y{Jjyaj- z{=hMM2z9_entbXJztAUEGQ;`hgYJCi%rit=rTgK)0=xz8J#)^|4~Dhe*pwBmHI#2J zP5)uuYnO&z%ksh^3P%m_d$tJGO_pGGLX%F0ExpcjTl*OZ|E+m*;!5g-!=$GHu~JQ> z{z|Y9ZY)lS@GKI^JZmY$@61p+lVjT1qgKf_ZWmnhyEEMl!l)Hl+t?w7!ENLDntJidb* zo4ipR$g5HcSA_@c*xJ*>j42SL{E{E(D(|`%pU7~Q+E!daR$D6~kMI>2f3zrmyZ%q| zD|IqKauDKs(3j252PI2@V!4Hk)MG* zHU>;RbF|i7j8pU$94$yBjodr#-dGr@2Fo0H)`I8z2dBy+E{tU?XcA6*M?Fx4u_~Su zQ@tx9MwY%@lYKDZ3-dvi&j+BgJsDv!=)gd3yYwU%cJCA{%9XE1=fl zj7TvQrP5cw^!mp7dcUim>MHlCc_}5!0injg1iys1rDuhdtUAJoqGp}x#)3XGqZaQg{dGFnXRaekw?xM$8LqE^b zm$W}@L?A8$&gc6Kjxe5k6?490vpQ+{tgcFLu%Qzkm>Tgt(XdbwBToItTyTn0QtV?f z*+M@fD?1jWf_ibe^J+uo0oB->ncJm7$)Y$#4U?2NU)%gUdrRz1?Ve(eMjzdhJ+b)Q zPT&i2VBdC+ly!&eK;=je>#}AIQ#6N!7X^yuX4w`Ep@`3k5`S(vWdC?RbJ5{Ks=6fg zK~mGH`@$opK63K2JyOon;oMY>&WIHomWuDVOU2ep(Z;l2v-B-hwVDn_lqF7(o~UYb z5CDGg9*KsE)rAWFbmZzgF#TB>2}az!ApNauTj+N#I59ngBR|$*QL(0LdEAoAyPAq zv0752t>BL-nl4WdnZ*_j>1)I6HY|okx!%7<*nobg(-IikEoKc0-}<$EB~rsxM@EAE z1YcvOD|c%r)z7q7^BILQb|36UM#o2bpW%d3v9x9OE;cpCQO41yew^8Gxb`VYlfB=1 z1PGm&OYuZI&AB*-^gUU0{3j&`7=Wiz|Ap|@U|(>l zeQ=x;q0L&ba5d|JIM$ZU(RlIBVL=WlXt64F(H(Rj;Y^|JPyDLnhHq0< z`n+yCI6#03W!a5LyP`i9J62lSz1 z$SwD}D``k?jFTsUtH-w^Ou?6aQ`tWd($c)9&yVQN99n8m5?i@S1@ zyYa5J9n@tSLa|c8M2D==)O!{F6_|81>8`3}Nh4$C)+ZWR5%Rq2Ej#Az(Ka!EZ}0f% zUQie7+G0fS^=QRFp#F=Rz?}IeBqBxq$kv{4s_V_7l2rA_uLxSv8*Ti1fPSoRPg+;N z2n*b;F%@c;?_HrX2Sam7)+Xed{$~>;UK3eUJUMc7C-4z2^Egp+_)7ivwSas$(J0yI znjr*>Kfin2J{rwkbYj%+(hER@juVj$DNV|U3pHVW_GZD_y#WvHiZ@3B&V(%a& z?VCSNi^jUg>9yO5PabAgU6vfE?(x52dIBdmK5BC`$dgy`?=o`|ozwZaA8ZWrmRVu% z=ZprGM0rkKH7=1mR1Gq*m~L$9#(_?j>&Lhl2ijnN9EYx@5dyon#V!6_$~+>uiAR_x zcRaUp(Is)PjpLD|FZ+w2ayjI-(4r$~M{((uW9PMKYw2D2z1SjBIs4b)JD8wesf*lO zg58`I8~4*5kDnQ;*@>A<*7us95ZSbFA(H*)DcgCE#jQ(ISmki+Hnz=yqMdJywgP=J z-_F7|ERZYi8#&uN9ReR?YOZ3~y-vOtL*C{TUv8_Ne*k7X{H`g#@}mwxkas=L{pI>O z;XFN9h5tUYlRF_*X(iA^Ml1>!3iALVGky(Ih$ND0Ik$LSGjnULT^qn#xeS$7#(_EWIB0b;L23;9_t9RtQUl%=bwWCC`xuOMD)2n(y@PRSfWt8C>*(fkcHVRZib;Gh0};` zIx@bev41)jNi3hhWo|Jomm4>crQ)Vi9~^wvHbE!w^{DF65{MoVl|h`p^1ixEN&%-$ z0W)C%TI#)Q&ijFn7w(--VFe%;avgGSD(e+;Skb%;;##>Q^_h5NthyOxK&L{1dg_?nb`h<4Zaorj$z36~`aBz+hv1!ZcBMz7M>;A<0IH|J- zKcn!0Imjjx1?;D<69=(L?T1n(vN~7s8Ti5sy+^y{XsAX`e2FVhIKT4Bi>S`OJIA`Q z&PrJPsXAB zZ??kpHXb>|Exx>p{!;Pr9OD_5?;)fnI7Jn_0y*oOQfARJKDqea>AF|Jn7qZ$GFoEs zyU$!^TSLaARFJZp$@pZZY~^zAU6gD?NNktkw9)KuEu5$F%G+Fi=8SVawwO0y&Ro zY#8l&o|gWe+tt{;NKc!i{Uh=-n}~WfxD4PUy&EMY7Bs$}UN8yNQC40mwn8;pXi*Ov z9w`0oq6+Zc^@*Jp1<38Yj~oXPdHA_uOJ}#ykx8PVG4+m zfD^1#@yByrG;SyqR_MEqKx)bsWTho^Eyy4Jxc<^=YL19T?8O6R-=_1c?t@f*G>VW} z748%o#=60)?%=l=v~UG5qT3hL^851*uHWwa^w=GkW!*vj!^a+N31OPBAHFq%Q6d{% zTpHlCJgD0tqtJm#;BtPbCNlo*ek*&wv9HDeFB?|H@y)_Ob)fu?P|smXqEn;IMW9Yg z?N#q-znGZ%3Yr2W4$^gZMpTKjBqWWqzpnhb#CY6v06;0G)NCS)d#~gV9|{- zi$!ei%DG^7?S?7?(C?y4zaJ4Tax&1Ub#k2fGBs%|H8LZ`SC8hBmIRk7uhB)6Gn0VA zi0h=~;y`b7&U-xczXVcEEHTMp6Ix*LxR@YdyAk8@emLzu=PHfmO~16@@@+l%>p2Iz z@?JA%5R4Ahpo*ug*vF@@O^%M5nk|z*nf(5zM#xm*+9A+{NV|hPOSVg8^-9)=>>kf! zC_un%J*V4euHahib1`H*JNdXl81rwIGL)b!M1nr#r{;ZVIs#^X3Qgn2Gj%=+v^PJV z-C6HS9`5=;esqp_eN~+W>!!}k+kI@QplG#F0eOfHpHiTE$)UzN4rcd@7rHEly8hUq zmKu;NU!rtdY8d?PKtbvo_UV&g*}3f;gWZOb*CGc}-*_<5A!Zf=JCBi>pjm(BImg}J z9q|MLK6oWV&>cukShVwSzB~0h&?Y+ zh{^DrJHNjAgzTgW4l6@$YbXl&cX>I-pU>`_81$fr7efnKskn@lUW@J~`DyF?fHnxs zBUSryP^$(yAuKgL%#NukX)sd(^!d|HjTO zB>s!rLG*8&{eKEp|0lusqWVF}{ZowE~%%k8^kY24>{cG*{Bw&kkmJpu4h zrun;S5afNFenu}24EP2RAE53Q>AyFf{tN0#{5Z&_kz#r1|BPa0Xr<8bW-(tVWh zmflBKJ7pE`W@KJR$lIGceLK!Ip?Sw-BU4N`ZALRShPU|^J#V5od^@WoN#VwdZrxD} zrTw(bSQn|i7rE=z#Ct?(l6*Nk2Q3upsyDA)g+=VG>jtx$2aR&rtE4UL^LS(qL>F1V z8qmI+pd3@%&W*K;y{j1KW>3g3PQz?uu{cN)6*BGc%)L%M@$i4EktWv$b{}YynqcBx zEfg?uNEdZRr{l7C-{ca9Do%9z5eY%!&m;lxMNk zrHJV02G$E9NYLPO^#1rV@POx?V#BL1B__sf);M-8YQ_E5Cut?t^7d-VqmLiQ2s#pD zuXvHgDd~M-u2x7?-M;G#=$SW8C|>uL5alK%wG0Aa-ec3EvKC){J_JhQGEKo`4QtnnPE`LhSPiJ zfk&*Yr3u>k#j|S7mgt&_HG3tAq~D6h8@~f}QoiRup?Fu$4|q%O&{yh&hXk zhofJaU_kTkl`E^irz1iB9 zM!G}@ON)YHW&2xGsOMPzI6CDF$Rosvn=+!uDUr5`AFvijlcWpvmt>YN`Dp}!27U(O z=jsQHOs}~mG`HzRp$n4_y%BuZWMz)Vsy8YI{VFXtYF(>#_S8kc>8zKx8RIgt>a@J* z!&$spFDfhtfI4TKmg*2E8Gz6rFb5R$<2QN0n8%Ev8eBsgC7<>8e9N$IC;;Qc|9jO( z9X=UbsVc#M@{{El9wSMN#>UH<@PSg#m5W7obqKmc)A)Z-!f-XRn1^$NR}%dYP}%$Z z0S{`GahMFBrvr>i|7)lDpmY3!f9*=8CWPmoFHXlCVQmU2SoiSg7l{cS3DR^M%lFxn$$wj$Q}q zE1wY3C$nRYVX3}Oc@o(BKw{*m+@hXDJ!mK7rxlkv zk>@8f&n9POc|7SjeC?CJV7seV)Bw~>(OCChhWzd2(A1jUnvjv8B)4(z-ofQd@>G)W z6Tg~FtHE#wGJ=d62tRbaz1dgIRtNYU8sO?J)U&Ot!#F5&-G3(!MB*#B#(4|z)j7p` z1Z0nyJZfyT*jJ2* z!2LX=-UIP=rux{Pga z8}HTU75WF31{0fw_u0gr={3XM&12ulnVlekIAoQ^9WHn#8E>@6f*QHi_w|bVJ;)A7 zKaP(~V_FL@%Nr2mda3)n>jNR6tJm%<*JP3Qx4GAyYy(0hG`%lIuQ3~2blwke<8p7z zy`@htKi>%ctw-@knm+sV9b$$b!s`00Gq))4b6aui7nR3#*K95~W@*obO8Put76+7L zUJ#{KP(3wg>?n6ER9qU^c4d`r$6|x=xN&R1QLEy5v$Walf$Xi8JdmNS6WGfVwXIL{B%SfoYMpN{qc?I)ohnQz z>3=_K3RZxaeKD9j(B)ZFBrT~eON8PeRtAY;HVnOA6C9?*HJqq)w|!Av`KqN>UnhgF zb<7qK>$k`Lz3i=9^GE>MbDBRM-KGR1o7bZ}(^c7hr?T*}SNtkJS}_voqSzG&u#)L8 zXLs4i(23R-d*uu`!#kh_B%V`>YR%Wle8n=}AH3Ln5Vi zbvxbJCYcHsgSx7) zu#ds{Wnb7+@%T9XmDQTAvc_wyQI-z~3ESjLji~bu=fScUJbg)S`ow)o6h!M6AU^C1 z<;TlQQ~ZOFUL=6ug5qp&u36$P~2Ppy)v%Eugd-PgWc+s6u9y=>%N(kT|yR5f&@!Y~;fUFI3+Ei1QDLMU99u4mI;(AMC~89FO6l&nV9B+nUGa!b-To%?u^hv@wZZ-YekiHZBFb9_=p z6@32l20U0ri?1l1Y5BtTx5n^8u@5|k4KpSg{>~d7vB>_Vt`U(qoSQcvT1@#yaD=gs zie!yD7FSqRQte6aghC{HmDN-j#t#^q9Ow6Cly<@^1z3P&;B>}7cB_V_Kd(_>^*(;*?rXmvo$S871B{IC! zdisON*B#)dIJ1tV9Y&QwMSISKgtkNfu~>i8EUhQ(H6FZORrYiauVGOUwYFZEJ*?ZF{BP}>>YuXg`h^05c|VHjj?tq0d!gP5 zCp!0UP^QEyE3PZL$o6symv6V2^Co+0(n&>A{zpG{6J1?RQW(fe)1IFvyMV$C)%kDA zn=@i=xA=$J{O4*;h0r59w7MS!u)KhlAaqbd8!1{%zL1UDmFySAQ7SSfD0}wX`tQa= zuBXxr5{QKXWfej49GW60cb%oCP*ZDh4knjVbT*(}15IJ_bUVrf#Ly$N z(tkQf5$~lFim0KPUhW~09=OQW@B8zCCQs#O5<%!frp$D}swNh{`p%x|6+=-)ICz`x zq>$&O)5zM%zYN!Twu0A+P{Xw8eLW~O4acpDg;lMoUK&WE-_#s45;Gb-h{dq(_{F2f zF(gU-d}|zuq~*%Kxnj{FjyG_bJ**G{j(2^@y*v(dwkws7J<7|j zz1fgERHnk>S>lztGoMxBoz?+PX!o3Apx&aqU$<$upH2NF066a#4PQ{Wd`wAk+yXFmnA#ZJFc)zi<%<_3(! z!0C~@CYAEz49BMy<3(*o()!;>AGNxdk2&9>|2*lv=EDLvcv@7DRM!t`>^)Wr;Rm0A zBau_@*fp#~^PB@E&5=yhIoe1LT5gU%=h8`|FB+xOFv!`y4_7pdX{<_mL-E?#T`pG` zKGpw)`QuNondKHLkxN52JQ4^8H5&3m!=JATu73=38te$$8C7D>=4lbcReC3CPZ>9m zsVkM5B_+COd=R33#pg2aCY(G0vD1ko!#>P>!7qDP_v$=de#BxZf~?#IQl~tBQAzF} z@}-U4Ma|`_-2Q^3AIT8};5}Wd(w!Ct-1zD6iP5IbPVZh;+J@ab8eRY{>ztXbDxZ4@ zwEMHE`4c%Kz$rCOVm*BVaA#%L(B~%}jwBSE`|&chz@ONgrA50ze=j4wz`hQ;67@RM z<}fHX;mboS#;d@%gVvryRgq2+sW!~dVZ_bJ@~ki%O^Xc6{$rHL3UI2$WzWO)sXv;} ze~=^4>S<`@I~OBR6Zbxpw)A3wl`y)iKWjfT?c;#6C-h++-ZlzfZaI;#@ z2(Ctn)34fGmieW>VMoN$Si;{AW;O8nCkj=x6&0JOB= zRRktRc;|F~zGSbq2|TIAR%37XJu2q59p|YY#sioMzg3R)Q`S>(uTMC9j3%n#=&<0c zZ}&*|(|$~4CR7DOBcaPhT92tACJ$zMCK?4_HBN5+t$|#``G?2bIk2*_?vYF_ETmI5 z%;_+FN0)t~TmPpz&Hr_@fbZF4WtFIe^a1YfyoTjQzFbX+Eps%8Qp0t)TC$6w_T`Go z_z~Fth!%9oUv&xMPRP0LUn&mzZO&0;zjjY*d6ZrS>s%xM{9U3DfUzN$%C2GFCiSCF z{K$mpBL!#Ia{DL#09Uf2JaidWM#-a0MBBW(X z^veO6uW}w}|7dyvn!~gem6jH@5aG8iJ5L5(`J1o}-7dPLJrZvr z!(&rOODKJ#(g4lpw=mBK9-EZc@Y?*A-*1sHF@$5x2N2-dwH%GEjUE;(stC>I!cksi zz%`frJl~FJF`=8#^cXvr3(K=)-;OXBhQ-^2^445VnaSGueJxE@vQiN)S{Fk>@){-0 zk7(D&R9$s?!)ES41aHJ2{uk|5mPQ&T1z#7(#S~>7(Ob%BI&}0037?aw@;AeV;wrpP z`C=?BvQP)Q{E9Owisxe8b0mY-h3~`H%}5w&CSLBrELjs?PR%n+{i+pkwdtVOP4`Zw z+Tk5Yv9YIBGdW(0h;gi1Uh=1t4XioEk%lVMQz^#m^q2d=>y~G}CAvEv6OOxaA*c5GH$9RQ zrfev}jt-`vV91X!n*5Qwquf}e5bpdFVxGt4!s^w!4~X#_HYYp=N4}+6h~U}$C)#mt zTv>9ItFIJ&u2S|%u^O66y%c{K#Nude5tW#%ck>`ai85u^%#3yjR^|Y^6d58b8^cXX zFm~6$E_j`8{NlC0p0E&edo6?G`w#W_GyF?~=!i_G6y?Maf@Sz>1YtAV7C!c?R!?Ky znG}IC=v=yde*O+$-Gsrn+2N_WmHay_Se`FW(%egeSz9&JPb&WGtD5 zrKo3RytA99?= z7JyuI{SM3DhE7J>#8_Qur1%wkx@K-{3+TkI`p`J|Cyum@7>S(^|C}QK@qC`L)jgf; z;|CL@wEAEYR!Z)eWHm4?7ta{65&K%O%@kMg7WmPI>A626=^2B7yx+>{L*-I`LBB_H z&unnEWzy>#erW^2=!D;&DyQ^O+)so*yOOqjbzlaFg8~Z*rZR~UpD{qwLIhTNV^ic( zF&(wZU820T@>nDdc~MN)m4-1RwC7$l2bMwD-BEeEjGs(%*ei9S9t2 zEi0{f-(PLMnu9+oA^&VhXlVTizaN`^N5LaL%3oWYJ-a#Q8pO!d99^8%Cf}A`A03|Y zYYe!Rm$PH$X50H$%X3Sv#P7k%nknvMYB5;g{34CAA)y2Wd;*d!8o2r1XT1me91Zx0 z6VvUni+l((;IgVpP??vNRi$dE5o)5CAbOz(`&)cpNx@ILJN^p*;Cz*f5z3e!4Evn% z<;-*x;}_xP5eEgFD0Au`3!p5A%cJt9_a18buSM8htI6f;#9@5#Z(bltqmlFUe(K*F z1YS+-&wneLlvzxy{{7cdx?Uy@)4!aWoHcKq;9rBHQrBqDs#8Gn@7-GzfKiPJGQEMq ziL;l+052?H@yrB&jc4_*_!$>wqxN*LX!*29o_bYUn|)#{Wd?hD%XeRko#;vAHMZHg zRPVOGad%Kx)#qY{0ffF%el_1>N0eoMnJcWP?nb7XfZeG(v*Tu!lT{S_$ z^v3_KlBu`rj_nygc~3TNF&`b1c!79A|NPCHb&<_IwX}w#sKLC z>6#!Tlzc9|@8^Hc|D5N|^Zt6V-*t9=nVmIwMLtnE08d$fZN;xXwIVDvW~_Ukb?*fG ze?rh<4d0LVfIp$r*M()4*V!#q+j=B*#RL(D3CnBm@`@9f`>j!SE8WP*{c*V0UU?lpbC z5z}2-tgKYsaX=Y|>N1Hhf&)C;m-1AoF9js}^qVrn4hK@2szEGNnOgIlW0cDyvbEm9 z5#aqse_z=)%$bVPN8U`u0N(E#d~Sq~Z$bdMy{UPsL8QPlzoJA1n`Qa^`9)GnV2T_r zZ~%5u=Yf7@0k3r5CV{OQ(KrhJ5e0md+0yeRt+FoeBW=H}rk7y4Wci@l;~7x$g2c8A zDT>$OWDC|``yAHwbu!ceuYa<~R;c~zrGKWEM!gVZIE*o4^>xV6%x0K)dGVHU$m%Dl zWoR>M`gTyH(bD-Z>CUnHN*xv)qr0~YgMQlKx5RZ&G|4|+OJPOH?A1Wbe_e56VnUFw z$fCpTC=>iM_gwz!GGLp?c=x*)?{;es(^#_p0lAh@b0T|*Dr8S_&NCCpmE6%uEc@Fl z^)ADbdz`oV-27fa7{hDdqlZGpNh*N3W)UZreXLw43VUi6av zq75+zu1EWJqfbXH4#JvPQV8X>@@iJwavCYS^ALI8CkYWJ*!UUDb@BD$ZkE9q6|MBO z2QJ6xJ)-+|vVWho8O#bap&6LqnQw5E4ts1KIZHO4{|OY3K5H}!SPoD(Wcs~v=}VPC zZ$a>KiZfpfkJ^(ip^`UJ@=I=r$KRVN0U6I_Z@RJKKH(AWBp1>OiFK_iD$wjA*)lv8 z!7F^WbF$VpZ>h>!JG$D!f}xE(o^V&#TgRnif`Fnuf#wyI0CVs}cr*R{2By<9m*v?X zc56&nB*j#>Y?(xoFBEXs$=9*6w6{m)52munWstA@?%YFkG(O~te{y&0VGXtf$CuLv z3C)zJJm1s_?(f(i_~OcVezou8^NVOwF;`~cJj6w!T+0au^mF?(P$ljVI7E1(%+(s@H>PMrf}slQkyHztLHkaZRJ zJm^dj8@IpW))%)jZc64&Q~&XC;}u_r(CBMpv$+NsUF9<4dBZss?O>}cuH$HrezV$) z_jUp4Jo-;Qu64nRo9@77md$1+lqD!%CkshFxYofgOhHoqMQVcos^UCZu<5RG)O-2> zN8Gds&e`F*yOE!4_&%tKegA2&Z`i(1prW9kG~_z}+w&YE6z03`oky;VM-OnLH z!w3_PX1H!*H|g7)4kcQ|jKxvL?xJ46#TkXP_n#1QX|ciG3Zyo0W(fr`-Q{%bd~Nay zla_D)*n@cM@fEky=z>*^fUgjO?*TK&!wNARITLtlulZ))m8cq;DC)dKsljM;0lU?n zfJgt^GYdZ=@d2*;!TtD|q<8w&SsB;ShrW7_oaBD?SG_GWrxv!?xAATPl<;SlsI*=iBV z;ZY#+{VpN*-Rh~P$p@oiJ2_VGg?M6SyE%8v?$g^1<_VSx4k!I*dTsEr1}b2jRwi5_ z$8JmYD8 zJqbx4e0JFsJAZz}sGf6c=s$GG^mOr>Pw=E2J0|nNy=qK`3o%@Uk*X;I2%)l*WJ7OD z4#uEn!mqo`y0&I+WXX+nLWa`0XU+t5@s)PPu9a3FUY;U04xcNhq_3TVtP8c2jj-4l ztX3lZw|wy$h&6w#FGfKYL%f-F#0n<9mF8&}=#5GsoGWM5w~GzEBUj0e zj~5lh=NrDIGqC+~2L(`EZQqwUpr2GjW7#IOXAig()@q>W4<59$9AsRo>)7(H z^+IU3c6s4alQHOsP~viH(wu$o3th2@U;@cJ9&iZ$uB`lx)(n@6JsY@?3nJ#JlB;i0 z88^`^ck{8Iey{~(841RjT&V8SXCuyj9dBGC8d+K2Thfc9R&l`3F=9` z(V@mb#q-q#x{Wb;m&mGV?->(D0};ba z2S+(vN;~RjGdS2kn!=FXw;)5gH&E4eEFQsI*wSQ_xlC8_}%4$5Z<7 zQ6e(&Wwr_42zd7>M}Thf38V3Oj1j^eZd7d@DR7zd4ZhkMFC0$wV0+gpUs3K<9@7uQ z<7}3y9{9qIV@a(fRD>_`OcGGJomICl!+B%urMENv(iOOFE{VH1ui}5y+zseZ#H?QI zI3KhYgEzHHCWp2j*U&b$pw);4<658>5C6z(pMT&~FI8imUrh2dC6v8)^Io=)NBE;2 zYqs)4AW>C3vVD%5WbFp3%g&;a~vlsrmExK!Y4IIrak*j7`6fG##+ zI18D2m!1~J=ObO1syxoO68BW}Y4)ttNz}*A`(M)#+cfZcC7n7}uC3p@s$#M6Bw}e1 zqX@xaw~8B2e_O9jPUYf0CfWHUhxdW91@Dm91n-88IieSMx?;|)BAQ$ES_cW=8cvbS z56RoPtO#dQOLKs3T+lP^Z14oP1ZG)v_i;k@kNYjR*f|!dmU~{gJOSeL>>J|l_C62$ zi;Gsf!}08A>%Bh>R_t;TexLB|oQj)j4P`pi}2ARj`jHo_-RwIO?H44rjKs zJi-oP;{XkmmCgoUUaR>IR2wF+ubfAqBAp{A#e=RskFZ}g>+7Khb{2(2w!lvvVlw4R zd3A=${BK?4ocmMQ5lFa$69Vtw0v`KJivM@3_a(#cRpL;==zr>Ro}fP_7!kv@KNl`k zxC0XD|Jm=6pdZ?Mfo!)r`}kl=6_1yv4%~bev{#3#4+JmPyTN2o-yk#mZ%0Qe4fOrV?)W|I-go8qeE@SNrj#-agbhNqR@9Gs+5q_ zDstOYlzS|Z&Btq`PK1TTFJTC(&vv9vWy2K0Tg@uDghYeN;2D6w|gumBCvr70>m z=5gnuA4{WGu`E&H1WPNS3 zJhVu{3F0|XA)SljFsWL4Rn=Lwd}LA}Vcf;^Q7!9RjI$Pne3eUR&w8<@J;Ubsa^&Qu z-nJl|Kxl>8sED{ zHx~(u*JL)R6?tn(NH8F8UoNLQo#Q?-d(G0QJ-{62DI0b`KN7%Q?pMd$ADL3(R1g>& z5Frjt(-}p$=W|Jim^4Q8n-(x&O$d(6E@j~ST)Q=O3n5#gP{WcDv${kP3 zk)M?8?^*+%fq;3IK>Vv`xG&%%&P}h@#Me}i;zL>jepFX(ZZ?5KvTXdzjDU}5ddO)C z#t%IW_<@B1`fbr>US-3d_qg~50@}b@fkG5kc@%UxbH=gD*+{RIA47!+CWA{{;up!9 z924Q@cTUeECq2hX#e=nQX5^mho9v3CeruW3zif!9yKDab(ZY+U?6qWj5oOLOC{&U- z?mKa(?xEqu`+m9O{rQVVi=tJ&$_u}bm`P1Uq6%GGtAF1M#mvdgsnKX*=VVoLF<<}Tl z4j5*xdT96Wk>(OPx6_uC3`7XmiLA*=%#>7tSqB#N%@NbGCC~L}s}3eXrq%*op^);i zlcj=Oxni+DsfKQfj+oRmpDT$GcX>fntB%HyuhtGq|F531XH#}n&RWE_ZCkWc)V10# zBxy-Bii|HfEfTL|XaO7xWiAcA63=@=8r|f?si-pQU(tBP3Mk-Sw^ZN@{aS<;DTcdB zihfW{_T{W>)?9Tf92sqccz9oYc5QKX)?{G-uVwKnIc7jXq9tN-6&Q`OSH6}s!)N+n z7g@_-b3uU5Pwv%JX(Eu_R}d|<55>`|xC87)iBVYWWNFLf%~rrh)^FI|7G( zS?qZug)#4|n=*A|UC$y@JXV1nb64vq>Fc>+cskrUZzc^vX0(3eSv(l_*2;T(>SDe=VAYgc&TB{R!Z;3h zpYgA&eq+3BA981mse7bATF<-SFm5*+0&U>2yL{VhDtT;>z1iaoC3AXKpK(?h+myjS zT3aN;gAG=fNd%f@WvSZvRoyHDnTonEj&_nbrv6+v5z5^eLOD98(b0H0nBYxAS!)GB z6MhCU0U_;+V-FeF8pTy4Iwo_+=JcC_B=Cog2MwiXU$O|#tB=vca3{b-C(=@fs+Fl& GhyM=*AZ76Y literal 0 HcmV?d00001 diff --git a/docs/core/install/remove-runtime-sdk-versions.md b/docs/core/install/remove-runtime-sdk-versions.md index 12ba134ae0f51..0e8eefb93ddf7 100644 --- a/docs/core/install/remove-runtime-sdk-versions.md +++ b/docs/core/install/remove-runtime-sdk-versions.md @@ -1,6 +1,6 @@ --- title: Remove the .NET runtime and SDK -description: This article describes how to uninstall .NET on Windows, macOS, and Linux. Uninstall .NET manually, through a package manager, or with the .NET Uninstall Tool. +description: This article describes how to uninstall .NET on Windows, macOS, and Linux. Uninstall .NET manually, through a package manager, with the .NET Uninstall Tool, or the .NET Install Manager. author: adegeo ms.author: adegeo ms.date: 04/23/2026 @@ -149,6 +149,10 @@ sudo rm -rf /usr/local/share/dotnet/sdk/6.0.406 The .NET Uninstall Tool lets you remove .NET SDKs and runtimes from a system. A collection of options is available to specify which versions should be uninstalled. For more information, see [.NET uninstall tool overview](../additional-tools/uninstall-tool-overview.md). +## .NET Install Manager + +On Windows, the .NET Install Manager (DNIM) can be used to remove .NET SDKs and runtimes. DNIM was designed for at-scale deployments in large environments to assist organizations in removing vulnerable copies of .NET to meet their own compliance policies. For more information, see [.NET Install Manager overview] (../additional-tools/dnim-overview.md). + ## Remove the NuGet fallback directory Before .NET Core 3.0 SDK, the .NET Core SDK installers used a directory named *NuGetFallbackFolder* to store a cache of NuGet packages. This cache was used during operations such as `dotnet restore` or `dotnet build /t:Restore`. The *NuGetFallbackFolder* was located under the *sdk* folder where .NET is installed. For example it could be at *C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder* on Windows and at */usr/local/share/dotnet/sdk/NuGetFallbackFolder* on macOS. diff --git a/docs/navigate/tools-diagnostics/toc.yml b/docs/navigate/tools-diagnostics/toc.yml index 22b72ed8f2602..5ba0ec9f0b83e 100644 --- a/docs/navigate/tools-diagnostics/toc.yml +++ b/docs/navigate/tools-diagnostics/toc.yml @@ -372,6 +372,33 @@ items: href: ../../core/additional-tools/uninstall-tool-cli-dry-run.md - name: dotnet-core-uninstall remove href: ../../core/additional-tools/uninstall-tool-cli-remove.md + - name: .NET Install Manager + items: + - name: Overview + href: ../../core/additional-tools/dnim-overview.md + - name: Command reference + expanded: true + items: + - name: dnim layout + href: ../../core/additional-tools/dnim-cli-layout.md + - name: dnim query products + href: ../../core/additional-tools/dnim-cli-query-products.md + - name: dnim query releases + href: ../../core/additional-tools/dnim-cli-query-releases.md + - name: dnim scan + href: ../../core/additional-tools/dnim-cli-scan.md + - name: dnim trace + href: ../../core/additional-tools/dnim-cli-trace.md + - name: dnim uninstall + href: ../../core/additional-tools/dnim-cli-uninstall.md + - name: dnim update + href: ../../core/additional-tools/dnim-cli-update.md + - name: .NET Installs + href: ../../core/additional-tools/dnim-net-installs.md + - name: Logging + href: ../../core/additional-tools/dnim-logs.md + - name: FAQ + href: ../../core/additional-tools/dnim-faq.yml - name: .NET install tool for extension authors href: ../../core/additional-tools/vscode-dotnet-runtime.md - name: Generate self-signed certificates From 81264b1f157796739665f72deed3a03d10475feb Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 24 Sep 2026 18:49:56 -0700 Subject: [PATCH 20/24] Archive C# Office programming walkthrough (#56253) --- .openpublishing.redirection.csharp.json | 6 +- .../OfficeWalkthrough.csproj | 223 ---------------- .../Properties/AssemblyInfo.cs | 38 --- .../Properties/Resources.Designer.cs | 62 ----- .../Properties/Resources.resx | 117 --------- .../Properties/Settings.Designer.cs | 26 -- .../Properties/Settings.settings | 7 - .../OfficeWalkthrough/ThisAddIn.Designer.cs | 237 ------------------ .../OfficeWalkthrough/ThisAddIn.Designer.xml | 5 - .../snippets/OfficeWalkthrough/ThisAddIn.cs | 125 --------- .../snippets/OfficeWalkthrough/account.cs | 10 - .../OfficeWalkthrough/snippets.5000.json | 17 -- .../interop/walkthrough-office-programming.md | 134 ---------- docs/csharp/toc.yml | 2 - 14 files changed, 5 insertions(+), 1004 deletions(-) delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/OfficeWalkthrough.csproj delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/AssemblyInfo.cs delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Resources.Designer.cs delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Resources.resx delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Settings.Designer.cs delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Settings.settings delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.Designer.cs delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.Designer.xml delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.cs delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/account.cs delete mode 100644 docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/snippets.5000.json delete mode 100644 docs/csharp/advanced-topics/interop/walkthrough-office-programming.md diff --git a/.openpublishing.redirection.csharp.json b/.openpublishing.redirection.csharp.json index 8796e427efd30..7cc129ec6e261 100644 --- a/.openpublishing.redirection.csharp.json +++ b/.openpublishing.redirection.csharp.json @@ -1,5 +1,9 @@ { "redirections": [ + { + "source_path_from_root": "/docs/csharp/advanced-topics/interop/walkthrough-office-programming.md", + "redirect_url": "/previous-versions/dotnet/csharp/interop/walkthrough-office-programming" + }, { "source_path_from_root": "/docs/csharp/async.md", "redirect_url": "/dotnet/csharp/asynchronous-programming" @@ -4926,7 +4930,7 @@ }, { "source_path_from_root": "/docs/csharp/programming-guide/interop/walkthrough-office-programming.md", - "redirect_url": "/dotnet/csharp/advanced-topics/interop/walkthrough-office-programming" + "redirect_url": "/previous-versions/dotnet/csharp/interop/walkthrough-office-programming" }, { "source_path_from_root": "/docs/csharp/programming-guide/linq-query-expressions/how-to-create-a-nested-group.md", diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/OfficeWalkthrough.csproj b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/OfficeWalkthrough.csproj deleted file mode 100644 index e2c9249e84417..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/OfficeWalkthrough.csproj +++ /dev/null @@ -1,223 +0,0 @@ - - - - - {BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Debug - AnyCPU - {5A1BC04B-DFEF-4A19-9C0F-570492BE0DE7} - Library - false - OfficeWalkthrough - OfficeWalkthrough - 3 - v4.8 - VSTO40 - true - HomeSite - - - - False - Microsoft Visual Studio 2010 Tools for Office Runtime %28x86 and x64%29 - true - - - - - Excel - - - - true - full - false - bin\Debug\ - false - $(DefineConstants);DEBUG;TRACE - 4 - - - - pdbonly - true - bin\Release\ - false - $(DefineConstants);TRACE - 4 - - - - - - True - - - - - - - - - - - - - - False - - - False - - - False - - - False - - - False - - - - - True - - - - - False - true - - - False - true - - - False - - - - - - - Code - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - - - Code - - - ThisAddIn.cs - - - ThisAddIn.Designer.xml - - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - true - - - OfficeWalkthrough_TemporaryKey.pfx - - - 64E5FAB68A3026C22AD36BD5DF7B81CF865E4CCE - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/AssemblyInfo.cs b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/AssemblyInfo.cs deleted file mode 100644 index acbac56e94243..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Security; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("OfficeWalkthrough")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("OfficeWalkthrough")] -[assembly: AssemblyCopyright("Copyright © 2023")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("500e9810-a014-472b-a2a2-d4788b8a1e8b")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] - diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Resources.Designer.cs b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Resources.Designer.cs deleted file mode 100644 index d90dd91e028b0..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Resources.Designer.cs +++ /dev/null @@ -1,62 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace OfficeWalkthrough.Properties { - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OfficeWalkthrough.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Resources.resx b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Resources.resx deleted file mode 100644 index af7dbebbacef5..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Settings.Designer.cs b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Settings.Designer.cs deleted file mode 100644 index 310a76c3a23b7..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Settings.Designer.cs +++ /dev/null @@ -1,26 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace OfficeWalkthrough.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Settings.settings b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Settings.settings deleted file mode 100644 index 39645652af629..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.Designer.cs b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.Designer.cs deleted file mode 100644 index 1930812ecb4e5..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.Designer.cs +++ /dev/null @@ -1,237 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -#pragma warning disable 414 -namespace OfficeWalkthrough { - - - /// - [Microsoft.VisualStudio.Tools.Applications.Runtime.StartupObjectAttribute(0)] - [global::System.Security.Permissions.PermissionSetAttribute(global::System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")] - public sealed partial class ThisAddIn : Microsoft.Office.Tools.AddInBase { - - internal Microsoft.Office.Tools.CustomTaskPaneCollection CustomTaskPanes; - - internal Microsoft.Office.Tools.SmartTagCollection VstoSmartTags; - - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - private global::System.Object missing = global::System.Type.Missing; - - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - internal Microsoft.Office.Interop.Excel.Application Application; - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - public ThisAddIn(global::Microsoft.Office.Tools.Excel.ApplicationFactory factory, global::System.IServiceProvider serviceProvider) : - base(factory, serviceProvider, "AddIn", "ThisAddIn") { - Globals.Factory = factory; - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - protected override void Initialize() { - base.Initialize(); - this.Application = this.GetHostItem(typeof(Microsoft.Office.Interop.Excel.Application), "Application"); - Globals.ThisAddIn = this; - global::System.Windows.Forms.Application.EnableVisualStyles(); - this.InitializeCachedData(); - this.InitializeControls(); - this.InitializeComponents(); - this.InitializeData(); - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - protected override void FinishInitialization() { - this.InternalStartup(); - this.OnStartup(); - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - protected override void InitializeDataBindings() { - this.BeginInitialization(); - this.BindToData(); - this.EndInitialization(); - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - private void InitializeCachedData() { - if ((this.DataHost == null)) { - return; - } - if (this.DataHost.IsCacheInitialized) { - this.DataHost.FillCachedData(this); - } - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - private void InitializeData() { - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - private void BindToData() { - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - private void StartCaching(string MemberName) { - this.DataHost.StartCaching(this, MemberName); - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - private void StopCaching(string MemberName) { - this.DataHost.StopCaching(this, MemberName); - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - private bool IsCached(string MemberName) { - return this.DataHost.IsCached(this, MemberName); - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - private void BeginInitialization() { - this.BeginInit(); - this.CustomTaskPanes.BeginInit(); - this.VstoSmartTags.BeginInit(); - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - private void EndInitialization() { - this.VstoSmartTags.EndInit(); - this.CustomTaskPanes.EndInit(); - this.EndInit(); - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - private void InitializeControls() { - this.CustomTaskPanes = Globals.Factory.CreateCustomTaskPaneCollection(null, null, "CustomTaskPanes", "CustomTaskPanes", this); - this.VstoSmartTags = Globals.Factory.CreateSmartTagCollection(null, null, "VstoSmartTags", "VstoSmartTags", this); - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - private void InitializeComponents() { - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - private bool NeedsFill(string MemberName) { - return this.DataHost.NeedsFill(this, MemberName); - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - protected override void OnShutdown() { - this.VstoSmartTags.Dispose(); - this.CustomTaskPanes.Dispose(); - base.OnShutdown(); - } - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - internal sealed partial class Globals { - - /// - private Globals() { - } - - private static ThisAddIn _ThisAddIn; - - private static global::Microsoft.Office.Tools.Excel.ApplicationFactory _factory; - - private static ThisRibbonCollection _ThisRibbonCollection; - - internal static ThisAddIn ThisAddIn { - get { - return _ThisAddIn; - } - set { - if ((_ThisAddIn == null)) { - _ThisAddIn = value; - } - else { - throw new System.NotSupportedException(); - } - } - } - - internal static global::Microsoft.Office.Tools.Excel.ApplicationFactory Factory { - get { - return _factory; - } - set { - if ((_factory == null)) { - _factory = value; - } - else { - throw new System.NotSupportedException(); - } - } - } - - internal static ThisRibbonCollection Ribbons { - get { - if ((_ThisRibbonCollection == null)) { - _ThisRibbonCollection = new ThisRibbonCollection(_factory.GetRibbonFactory()); - } - return _ThisRibbonCollection; - } - } - } - - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "17.0.0.0")] - internal sealed partial class ThisRibbonCollection : Microsoft.Office.Tools.Ribbon.RibbonCollectionBase { - - /// - internal ThisRibbonCollection(global::Microsoft.Office.Tools.Ribbon.RibbonFactory factory) : - base(factory) { - } - } -} diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.Designer.xml b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.Designer.xml deleted file mode 100644 index 78d353d140328..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.Designer.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.cs b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.cs deleted file mode 100644 index fc559caf33d22..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/ThisAddIn.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -// -using System.Collections.Generic; -using Excel = Microsoft.Office.Interop.Excel; -using Word = Microsoft.Office.Interop.Word; -// - -namespace OfficeWalkthrough -{ - public partial class ThisAddIn - { - private void ThisAddIn_Startup(object sender, System.EventArgs e) - { - // - var bankAccounts = new List - { - new Account - { - ID = 345, - Balance = 541.27 - }, - new Account - { - ID = 123, - Balance = -127.44 - } - }; - // - - // - DisplayInExcel(bankAccounts, (account, cell) => - // This multiline lambda expression sets custom processing rules - // for the bankAccounts. - { - cell.Value = account.ID; - cell.Offset[0, 1].Value = account.Balance; - if (account.Balance < 0) - { - cell.Interior.Color = 255; - cell.Offset[0, 1].Interior.Color = 255; - } - }); - // - - // - var wordApp = new Word.Application(); - wordApp.Visible = true; - wordApp.Documents.Add(); - wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true); - // - } - - // - void DisplayInExcel(IEnumerable accounts, - Action DisplayFunc) - { - var excelApp = this.Application; - // Add a new Excel workbook. - excelApp.Workbooks.Add(); - excelApp.Visible = true; - excelApp.Range["A1"].Value = "ID"; - excelApp.Range["B1"].Value = "Balance"; - excelApp.Range["A2"].Select(); - - foreach (var ac in accounts) - { - DisplayFunc(ac, excelApp.ActiveCell); - excelApp.ActiveCell.Offset[1, 0].Select(); - } - // Copy the results to the Clipboard. - excelApp.Range["A1:B3"].Copy(); - } - // - - - private void ThisAddIn_Shutdown(object sender, System.EventArgs e) - { - } - - void Pieces(IEnumerable accounts, - Action DisplayFunc) - { - var excelApp = this.Application; - // Add a new Excel workbook. - excelApp.Workbooks.Add(); - excelApp.Visible = true; - excelApp.Range["A1"].Value = "ID"; - excelApp.Range["B1"].Value = "Balance"; - excelApp.Range["A2"].Select(); - - foreach (var ac in accounts) - { - DisplayFunc(ac, excelApp.ActiveCell); - excelApp.ActiveCell.Offset[1, 0].Select(); - } - // Copy the results to the Clipboard. - excelApp.Range["A1:B3"].Copy(); - - // - excelApp.Columns[1].AutoFit(); - excelApp.Columns[2].AutoFit(); - // - - // - // Visual C# 2010 provides indexed properties for COM programming. - excelApp.Range["A1"].Value = "ID"; - excelApp.ActiveCell.Offset[1, 0].Select(); - // - } - - #region VSTO generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InternalStartup() - { - this.Startup += new System.EventHandler(ThisAddIn_Startup); - this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); - } - - #endregion - } -} diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/account.cs b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/account.cs deleted file mode 100644 index cfeb558af9711..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/account.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace OfficeWalkthrough -{ - // - class Account - { - public int ID { get; set; } - public double Balance { get; set; } - } - // -} diff --git a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/snippets.5000.json b/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/snippets.5000.json deleted file mode 100644 index d81b4b07a87a4..0000000000000 --- a/docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/snippets.5000.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "host": "visualstudio", - "expectederrors": [ - { - "file": "docs/csharp/advanced-topics/interop/snippets/OfficeWalkthrough/OfficeWalkthrough.csproj", - "line": 211, - "column": 3, - "error": "MSB4019" - }, - { - "file": "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/MSBuild/Current/Bin/amd64/Microsoft.Common.CurrentVersion.targets", - "line": 3476, - "column": 5, - "error": "MSB3323" - } - ] -} diff --git a/docs/csharp/advanced-topics/interop/walkthrough-office-programming.md b/docs/csharp/advanced-topics/interop/walkthrough-office-programming.md deleted file mode 100644 index 30f2fcb2ca04b..0000000000000 --- a/docs/csharp/advanced-topics/interop/walkthrough-office-programming.md +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: "Walkthrough: Office Programming" -description: Learn about the features Visual Studio offers that improve Microsoft Office programming. -ms.date: 02/15/2023 -ms.topic: tutorial -dev_langs: - - "csharp" -helpviewer_keywords: - - "Office programming [C#]" ---- -# Walkthrough: Office Programming in C\# - -C# offers features that improve Microsoft Office programming. Helpful C# features include named and optional arguments and return values of type `dynamic`. In COM programming, you can omit the `ref` keyword and gain access to indexed properties. - -Both languages enable embedding of type information, which allows deployment of assemblies that interact with COM components without deploying primary interop assemblies (PIAs) to the user's computer. For more information, see [Walkthrough: Embedding Types from Managed Assemblies](../../../standard/assembly/embed-types-visual-studio.md). - -This walkthrough demonstrates these features in the context of Office programming, but many of these features are also useful in general programming. In the walkthrough, you use an Excel Add-in application to create an Excel workbook. Next, you create a Word document that contains a link to the workbook. Finally, you see how to enable and disable the PIA dependency. - -[!INCLUDE[vsto_framework](../../includes/vsto-framework.md)] - -## Prerequisites - -You must have Microsoft Office Excel and Microsoft Office Word installed on your computer to complete this walkthrough. - -[!INCLUDE[note_settings_general](~/includes/note-settings-general-md.md)] - -## Set up an Excel Add-in application - -1. Start Visual Studio. -1. On the **File** menu, point to **New**, and then select **Project**. -1. In the **Installed Templates** pane, expand **C#**, expand **Office**, and then select the version year of the Office product. -1. In the **Templates** pane, select **Excel \ Add-in**. -1. Look at the top of the **Templates** pane to make sure that **.NET Framework 4**, or a later version, appears in the **Target Framework** box. -1. Type a name for your project in the **Name** box, if you want to. -1. Select **OK**. -1. The new project appears in **Solution Explorer**. - -## Add references - -1. In **Solution Explorer**, right-click your project's name and then select **Add Reference**. The **Add Reference** dialog box appears. -1. On the **Assemblies** tab, select **Microsoft.Office.Interop.Excel**, version `.0.0.0` (for a key to the Office product version numbers, see [Microsoft Versions](https://en.wikipedia.org/wiki/Microsoft_Office#Versions)), in the **Component Name** list, and then hold down the CTRL key and select **Microsoft.Office.Interop.Word**, `version .0.0.0`. If you don't see the assemblies, you may need to install them (see [How to: Install Office Primary Interop Assemblies](/visualstudio/vsto/how-to-install-office-primary-interop-assemblies)). -1. Select **OK**. - -## Add necessary Imports statements or using directives - -In **Solution Explorer**, right-click the **ThisAddIn.cs** file and then select **View Code**. Add the following `using` directives (C#) to the top of the code file if they aren't already present. - -:::code language="csharp" source="./snippets/OfficeWalkthrough/ThisAddIn.cs" id="Usings"::: - -## Create a list of bank accounts - -In **Solution Explorer**, right-click your project's name, select **Add**, and then select **Class**. Name the class Account.cs. Select **Add**. Replace the definition of the `Account` class with the following code. The class definitions use *automatically implemented properties*. - -:::code language="csharp" source="./snippets/OfficeWalkthrough/account.cs" id="AccountClass"::: - -To create a `bankAccounts` list that contains two accounts, add the following code to the `ThisAddIn_Startup` method in *ThisAddIn.cs*. The list declarations use *collection initializers*. - -:::code language="csharp" source="./snippets/OfficeWalkthrough/ThisAddIn.cs" id="CreateAccount"::: - -## Export data to Excel - -In the same file, add the following method to the `ThisAddIn` class. The method sets up an Excel workbook and exports data to it. - -:::code language="csharp" source="./snippets/OfficeWalkthrough/ThisAddIn.cs" id="Display"::: - -- Method [Add]() has an *optional parameter* for specifying a particular template. Optional parameters enable you to omit the argument for that parameter if you want to use the parameter's default value. Because the previous example has no arguments, `Add` uses the default template and creates a new workbook. The equivalent statement in earlier versions of C# requires a placeholder argument: `excelApp.Workbooks.Add(Type.Missing)`. For more information, see [Named and Optional Arguments](../../programming-guide/classes-and-structs/named-and-optional-arguments.md). -- The `Range` and `Offset` properties of the [Range]() object use the *indexed properties* feature. This feature enables you to consume these properties from COM types by using the following typical C# syntax. Indexed properties also enable you to use the `Value` property of the `Range` object, eliminating the need to use the `Value2` property. The `Value` property is indexed, but the index is optional. Optional arguments and indexed properties work together in the following example. - -:::code language="csharp" source="./snippets/OfficeWalkthrough/ThisAddIn.cs" id="IndexedProperties"::: - -You can't create indexed properties of your own. The feature only supports consumption of existing indexed properties. - -Add the following code at the end of `DisplayInExcel` to adjust the column widths to fit the content. - -:::code language="csharp" source="./snippets/OfficeWalkthrough/ThisAddIn.cs" id="AutoFit"::: - -These additions demonstrate another feature in C#: treating `Object` values returned from COM hosts such as Office as if they have type [dynamic](../../language-reference/builtin-types/reference-types.md). COM objects are treated as `dynamic` automatically when **Embed Interop Types** has its default value, `True`, or, equivalently, when you reference the assembly with the [**EmbedInteropTypes**](../../language-reference/compiler-options/inputs.md#embedinteroptypes) compiler option. For more information about embedding interop types, see procedures "To find the PIA reference" and "To restore the PIA dependency" later in this article. For more information about `dynamic`, see [dynamic](../../language-reference/builtin-types/reference-types.md) or [Using Type dynamic](using-type-dynamic.md). - -## Invoke DisplayInExcel - -Add the following code at the end of the `ThisAddIn_StartUp` method. The call to `DisplayInExcel` contains two arguments. The first argument is the name of the list of accounts processed. The second argument is a multiline lambda expression defining how to process the data. The `ID` and `balance` values for each account are displayed in adjacent cells, and the row is displayed in red if the balance is less than zero. For more information, see [Lambda Expressions](../../language-reference/operators/lambda-expressions.md). - -:::code language="csharp" source="./snippets/OfficeWalkthrough/ThisAddIn.cs" id="CallDisplay"::: - -To run the program, press F5. An Excel worksheet appears that contains the data from the accounts. - -## Add a Word document - -Add the following code at the end of the `ThisAddIn_StartUp` method to create a Word document that contains a link to the Excel workbook. - -:::code language="csharp" source="./snippets/OfficeWalkthrough/ThisAddIn.cs" id="PasteIntoWord"::: - -This code demonstrates several of the features in C#: the ability to omit the `ref` keyword in COM programming, named arguments, and optional arguments.The [PasteSpecial]() method has seven parameters, all of which are optional reference parameters. Named and optional arguments enable you to designate the parameters you want to access by name and to send arguments to only those parameters. In this example, arguments indicate creating a link to the workbook on the Clipboard (parameter `Link`) and displaying that the link in the Word document as an icon (parameter `DisplayAsIcon`). C# also enables you to omit the `ref` keyword for these arguments. - -## Run the application - -Press F5 to run the application. Excel starts and displays a table that contains the information from the two accounts in `bankAccounts`. Then a Word document appears that contains a link to the Excel table. - -## Clean up the completed project - -In Visual Studio, select **Clean Solution** on the **Build** menu. Otherwise, the add-in runs every time that you open Excel on your computer. - -## Find the PIA reference - -1. Run the application again, but don't select **Clean Solution**. -1. Select the **Start**. Locate **Microsoft Visual Studio \** and open a developer command prompt. -1. Type `ildasm` in the Developer Command Prompt for Visual Studio window, and then press Enter. The IL DASM window appears. -1. On the **File** menu in the IL DASM window, select **File** > **Open**. Double-click **Visual Studio \**, and then double-click **Projects**. Open the folder for your project, and look in the bin/Debug folder for *your project name*.dll. Double-click *your project name*.dll. A new window displays your project's attributes, in addition to references to other modules and assemblies. The assembly includes the namespaces `Microsoft.Office.Interop.Excel` and `Microsoft.Office.Interop.Word`. By default in Visual Studio, the compiler imports the types you need from a referenced PIA into your assembly. For more information, see [How to: View Assembly Contents](../../../standard/assembly/view-contents.md). -1. Double-click the **MANIFEST** icon. A window appears that contains a list of assemblies that contain items referenced by the project. `Microsoft.Office.Interop.Excel` and `Microsoft.Office.Interop.Word` aren't in the list. Because you imported the types your project needs into your assembly, you aren't required to install references to a PIA. Importing the types into your assembly makes deployment easier. The PIAs don't have to be present on the user's computer. An application doesn't require deployment of a specific version of a PIA. Applications can work with multiple versions of Office, provided that the necessary APIs exist in all versions. Because deployment of PIAs is no longer necessary, you can create an application in advanced scenarios that works with multiple versions of Office, including earlier versions. Your code can't use any APIs that aren't available in the version of Office you're working with. It isn't always clear whether a particular API was available in an earlier version. Working with earlier versions of Office isn't recommended. -1. Close the manifest window and the assembly window. - -## Restore the PIA dependency - -1. In **Solution Explorer**, select the **Show All Files** button. Expand the **References** folder and select **Microsoft.Office.Interop.Excel**. Press F4 to display the **Properties** window. -1. In the **Properties** window, change the **Embed Interop Types** property from **True** to **False**. -1. Repeat steps 1 and 2 in this procedure for `Microsoft.Office.Interop.Word`. -1. In C#, comment out the two calls to `Autofit` at the end of the `DisplayInExcel` method. -1. Press F5 to verify that the project still runs correctly. -1. Repeat steps 1-3 from the previous procedure to open the assembly window. Notice that `Microsoft.Office.Interop.Word` and `Microsoft.Office.Interop.Excel` are no longer in the list of embedded assemblies. -1. Double-click the **MANIFEST** icon and scroll through the list of referenced assemblies. Both `Microsoft.Office.Interop.Word` and `Microsoft.Office.Interop.Excel` are in the list. Because the application references the Excel and Word PIAs, and the **Embed Interop Types** property is **False**, both assemblies must exist on the end user's computer. -1. In Visual Studio, select **Clean Solution** on the **Build** menu to clean up the completed project. - -## See also - -- [Automatically implemented properties (C#)](../../programming-guide/classes-and-structs/auto-implemented-properties.md) -- [Object and collection initializers](../../programming-guide/classes-and-structs/object-and-collection-initializers.md) -- [Visual Studio Tools for Office (VSTO)](/visualstudio/vsto/visual-studio-tools-for-office-runtime-overview) -- [Named and optional arguments](../../programming-guide/classes-and-structs/named-and-optional-arguments.md) -- [dynamic](../../language-reference/builtin-types/reference-types.md) -- [Using type dynamic](using-type-dynamic.md) -- [Lambda expressions (C#)](../../language-reference/operators/lambda-expressions.md) -- [Walkthrough: Embedding type information from Microsoft Office assemblies in Visual Studio](/previous-versions/visualstudio/visual-studio-2013/ee317478(v=vs.120)) -- [Walkthrough: Embedding types from managed assemblies](../../../standard/assembly/embed-types-visual-studio.md) -- [Walkthrough: Creating your first VSTO add-in for Excel](/visualstudio/vsto/walkthrough-creating-your-first-vsto-add-in-for-excel) diff --git a/docs/csharp/toc.yml b/docs/csharp/toc.yml index e388ba15c7895..f1e12ba688274 100644 --- a/docs/csharp/toc.yml +++ b/docs/csharp/toc.yml @@ -449,8 +449,6 @@ items: href: advanced-topics/interop/index.md - name: Example COM class href: advanced-topics/interop/example-com-class.md - - name: "Walkthrough: Office programming" - href: advanced-topics/interop/walkthrough-office-programming.md - name: "Use platform invoke to play a WAV file" href: advanced-topics/interop/how-to-use-platform-invoke-to-play-a-wave-file.md - name: "Use indexed properties in COM interop programming" From 3a8e3f42fa8e15bdbf816bf851237e1fe6b1f941 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Thu, 24 Sep 2026 19:08:53 -0700 Subject: [PATCH 21/24] delete VB version of office programming walkthrough (#56254) --- .openpublishing.redirection.visual-basic.json | 4 + .../walkthrough-office-programming.md | 150 --------- docs/visual-basic/toc.yml | 2 - .../csofficewalkthrough/vb/account.vb | 7 - .../vb/my project/assemblyinfo.vb | 44 --- .../vb/my project/resources.designer.vb | 61 ---- .../vb/my project/resources.resx | 117 -------- .../vb/my project/settings.designer.vb | 71 ----- .../vb/my project/settings.settings | 7 - .../vb/officewalkthroughsnippets - vb.vbproj | 284 ------------------ .../vb/thisaddin.designer.vb | 234 --------------- .../vb/thisaddin.designer.xml | 5 - .../csofficewalkthrough/vb/thisaddin.vb | 99 ------ 13 files changed, 4 insertions(+), 1081 deletions(-) delete mode 100644 docs/visual-basic/programming-guide/com-interop/walkthrough-office-programming.md delete mode 100644 samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/account.vb delete mode 100644 samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/assemblyinfo.vb delete mode 100644 samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/resources.designer.vb delete mode 100644 samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/resources.resx delete mode 100644 samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/settings.designer.vb delete mode 100644 samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/settings.settings delete mode 100644 samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/officewalkthroughsnippets - vb.vbproj delete mode 100644 samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.designer.vb delete mode 100644 samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.designer.xml delete mode 100644 samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.vb diff --git a/.openpublishing.redirection.visual-basic.json b/.openpublishing.redirection.visual-basic.json index f1eab0b895d91..9dec235bdf890 100644 --- a/.openpublishing.redirection.visual-basic.json +++ b/.openpublishing.redirection.visual-basic.json @@ -346,6 +346,10 @@ "source_path_from_root": "/docs/visual-basic/misc/next-control-variable-does-not-match-for-loop-control-variable.md", "redirect_url": "/dotnet/visual-basic/language-reference/error-messages/index" }, + { + "source_path_from_root": "/docs/visual-basic/programming-guide/com-interop/walkthrough-office-programming.md", + "redirect_url": "/previous-versions/dotnet/csharp/interop/walkthrough-office-programming" + }, { "source_path_from_root": "/docs/visual-basic/programming-guide/concepts/assemblies-gac/friend-assemblies.md", "redirect_url": "/dotnet/standard/assembly/friend" diff --git a/docs/visual-basic/programming-guide/com-interop/walkthrough-office-programming.md b/docs/visual-basic/programming-guide/com-interop/walkthrough-office-programming.md deleted file mode 100644 index eb57f37cd7a79..0000000000000 --- a/docs/visual-basic/programming-guide/com-interop/walkthrough-office-programming.md +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: "Walkthrough: Office Programming - Visual Basic" -description: Learn about the features Visual Studio offers in Visual Basic that improve Microsoft Office programming. -ms.date: 02/15/2023 -ms.topic: tutorial -dev_langs: - - "vb" -helpviewer_keywords: - - "Office programming [Visual Basic]" ---- -# Walkthrough: Office Programming in Visual Basic - -Visual Studio offers features in Visual Basic that improve Microsoft Office programming. Features in Visual Basic include automatically implemented properties, statements in lambda expressions, and collection initializers. You can embed type information, which allows deployment of assemblies that interact with COM components without deploying primary interop assemblies (PIAs) to the user's computer. For more information, see [Walkthrough: Embedding Types from Managed Assemblies](../../../standard/assembly/embed-types-visual-studio.md). - -This walkthrough demonstrates these features in the context of Office programming, but many of these features are also useful in general programming. In the walkthrough, you use an Excel Add-in application to create an Excel workbook. Next, you create a Word document that contains a link to the workbook. Finally, you see how to enable and disable the PIA dependency. - -## Prerequisites - -You must have Microsoft Office Excel and Microsoft Office Word installed on your computer to complete this walkthrough. - -[!INCLUDE[note_settings_general](~/includes/note-settings-general-md.md)] - -## Set up an Excel Add-in application - -1. Start Visual Studio. - -2. On the **File** menu, point to **New**, and then click **Project**. - -3. In the **Installed Templates** pane, expand **Visual Basic**, expand **Office**, and then click the version year of the Office product. - -4. In the **Templates** pane, click **Excel \ Add-in**. - -5. Look at the top of the **Templates** pane to make sure that **.NET Framework 4**, or a later version, appears in the **Target Framework** box. - -6. Type a name for your project in the **Name** box, if you want to. - -7. Click **OK**. - -8. The new project appears in **Solution Explorer**. - -## Add references - -1. In **Solution Explorer**, right-click your project's name and then click **Add Reference**. The **Add Reference** dialog box appears. - -2. On the **Assemblies** tab, select **Microsoft.Office.Interop.Excel**, version `.0.0.0` (for a key to the Office product version numbers, see [Microsoft Versions](https://en.wikipedia.org/wiki/Microsoft_Office#Versions)), in the **Component Name** list, and then hold down the CTRL key and select **Microsoft.Office.Interop.Word**, `version .0.0.0`. If you do not see the assemblies, you may need to ensure they are installed and displayed (see [How to: Install Office Primary Interop Assemblies](/visualstudio/vsto/how-to-install-office-primary-interop-assemblies)). - -3. Click **OK**. - -## Add necessary Imports statements or using directives - -1. In **Solution Explorer**, right-click the **ThisAddIn.vb** or **ThisAddIn.cs** file and then click **View Code**. - -2. Add the following `Imports` statements to the top of the code file if they are not already present. - - [!code-vb[csOfficeWalkthrough#1](~/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.vb#1)] - -## Create a list of bank accounts - -1. In **Solution Explorer**, right-click your project's name, click **Add**, and then click **Class**. Name the class Account.vb. Click **Add**. - -2. Replace the definition of the `Account` class with the following code. The class definitions use *automatically implemented properties*. For more information, see [Automatically implemented properties](../../../visual-basic/programming-guide/language-features/procedures/auto-implemented-properties.md). - - [!code-vb[csOfficeWalkthrough#2](~/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/account.vb#2)] - -3. To create a `bankAccounts` list that contains two accounts, add the following code to the `ThisAddIn_Startup` method in *ThisAddIn.vb*. The list declarations use *collection initializers*. For more information, see [Collection Initializers](../../../visual-basic/programming-guide/language-features/collection-initializers/index.md). - - [!code-vb[csOfficeWalkthrough#3](~/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.vb#3)] - -## Export data to Excel - -1. In the same file, add the following method to the `ThisAddIn` class. The method sets up an Excel workbook and exports data to it. - - [!code-vb[csOfficeWalkthrough#4](~/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.vb#4)] - - - Method [Add]() has an *optional parameter* for specifying a particular template. Optional parameters enable you to omit the argument for that parameter if you want to use the parameter's default value. Because no argument is sent in the previous example, `Add` uses the default template and creates a new workbook. - - - The `Range` and `Offset` properties of the [Range]() object use the *indexed properties* feature. Indexed properties also enable you to use the `Value` property of the `Range` object, eliminating the need to use the `Value2` property. The `Value` property is indexed, but the index is optional. Optional arguments and indexed properties work together in the following example. - -2. Add the following code at the end of `DisplayInExcel` to adjust the column widths to fit the content. - - [!code-vb[csOfficeWalkthrough#7](~/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.vb#7)] - - For more information about embedding interop types, see procedures "To find the PIA reference" and "To restore the PIA dependency" later in this article. - -## Invoke DisplayInExcel - -1. Add the following code at the end of the `ThisAddIn_StartUp` method. The call to `DisplayInExcel` contains two arguments. The first argument is the name of the list of accounts to be processed. The second argument is a multiline lambda expression that defines how the data is to be processed. The `ID` and `balance` values for each account are displayed in adjacent cells, and the row is displayed in red if the balance is less than zero. - - [!code-vb[csOfficeWalkthrough#9](~/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.vb#9)] - -2. To run the program, press F5. An Excel worksheet appears that contains the data from the accounts. - -## Add a Word document - -1. Add the following code at the end of the `ThisAddIn_StartUp` method to create a Word document that contains a link to the Excel workbook. - - [!code-vb[csOfficeWalkthrough#10](~/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.vb#10)] - - The [PasteSpecial]() method has seven parameters, all of which are defined as optional reference parameters. Named and optional arguments enable you to designate the parameters you want to access by name and to send arguments to only those parameters. In this example, arguments are sent to indicate that a link to the workbook on the Clipboard should be created (parameter `Link`) and that the link is to be displayed in the Word document as an icon (parameter `DisplayAsIcon`). - -## Run the application - -1. Press F5 to run the application. Excel starts and displays a table that contains the information from the two accounts in `bankAccounts`. Then a Word document appears that contains a link to the Excel table. - -## Clean up the completed project - -1. In Visual Studio, click **Clean Solution** on the **Build** menu. Otherwise, the add-in will run every time that you open Excel on your computer. - -## Find the PIA reference - -1. Run the application again, but do not click **Clean Solution**. - -2. Select the **Start**. Locate **Microsoft Visual Studio \** and open a developer command prompt. - -3. Type `ildasm` in the Developer Command Prompt for Visual Studio window, and then press Enter. The IL DASM window appears. - -4. On the **File** menu in the IL DASM window, select **File** > **Open**. Double-click **Visual Studio \**, and then double-click **Projects**. Open the folder for your project, and look in the bin/Debug folder for *your project name*.dll. Double-click *your project name*.dll. A new window displays your project's attributes, in addition to references to other modules and assemblies. Note that namespaces `Microsoft.Office.Interop.Excel` and `Microsoft.Office.Interop.Word` are included in the assembly. By default in Visual Studio, the compiler imports the types you need from a referenced PIA into your assembly. - - For more information, see [How to: View Assembly Contents](../../../standard/assembly/view-contents.md). - -5. Double-click the **MANIFEST** icon. A window appears that contains a list of assemblies that contain items referenced by the project. `Microsoft.Office.Interop.Excel` and `Microsoft.Office.Interop.Word` are not included in the list. Because the types your project needs have been imported into your assembly, references to a PIA are not required. This makes deployment easier. The PIAs do not have to be present on the user's computer, and because an application does not require deployment of a specific version of a PIA, applications can be designed to work with multiple versions of Office, provided that the necessary APIs exist in all versions. - - Because deployment of PIAs is no longer necessary, you can create an application in advanced scenarios that works with multiple versions of Office, including earlier versions. However, this works only if your code does not use any APIs that are not available in the version of Office you are working with. It is not always clear whether a particular API was available in an earlier version, and for that reason working with earlier versions of Office is not recommended. - - > [!NOTE] - > Office did not publish PIAs before Office 2003. Therefore, the only way to generate an interop assembly for Office 2002 or earlier versions is by importing the COM reference. - -6. Close the manifest window and the assembly window. - -## Restore the PIA dependency - -1. In **Solution Explorer**, click the **Show All Files** button. Expand the **References** folder and select **Microsoft.Office.Interop.Excel**. Press F4 to display the **Properties** window. -1. In the **Properties** window, change the **Embed Interop Types** property from **True** to **False**. -1. Repeat steps 1 and 2 in this procedure for `Microsoft.Office.Interop.Word`. -1. Press F5 to verify that the project still runs correctly. -1. Repeat steps 1-3 from the previous procedure to open the assembly window. Notice that `Microsoft.Office.Interop.Word` and `Microsoft.Office.Interop.Excel` are no longer in the list of embedded assemblies. -1. Double-click the **MANIFEST** icon and scroll through the list of referenced assemblies. Both `Microsoft.Office.Interop.Word` and `Microsoft.Office.Interop.Excel` are in the list. Because the application references the Excel and Word PIAs, and the **Embed Interop Types** property is set to **False**, both assemblies must exist on the end user's computer. -1. In Visual Studio, click **Clean Solution** on the **Build** menu to clean up the completed project. - -## See also - -- [Automatically implemented properties (Visual Basic)](../language-features/procedures/auto-implemented-properties.md) -- [Collection Initializers](../language-features/collection-initializers/index.md) -- [Optional Parameters](../language-features/procedures/optional-parameters.md) -- [Passing Arguments by Position and by Name](../language-features/procedures/passing-arguments-by-position-and-by-name.md) -- [Early and Late Binding](../language-features/early-late-binding/index.md) -- [Lambda Expressions](..//language-features/procedures/lambda-expressions.md) -- [Walkthrough: Embedding Types from Managed Assemblies](../../../standard/assembly/embed-types-visual-studio.md) -- [Walkthrough: Creating Your First VSTO Add-in for Excel](/visualstudio/vsto/walkthrough-creating-your-first-vsto-add-in-for-excel) -- [COM Interop](index.md) diff --git a/docs/visual-basic/toc.yml b/docs/visual-basic/toc.yml index e01dd8e0f0196..1330bb3d36696 100644 --- a/docs/visual-basic/toc.yml +++ b/docs/visual-basic/toc.yml @@ -250,8 +250,6 @@ items: href: programming-guide/com-interop/com-interoperability-in-net-framework-applications.md - name: "Walkthrough: Implementing Inheritance with COM Objects" href: programming-guide/com-interop/walkthrough-implementing-inheritance-with-com-objects.md - - name: "Walkthrough: Office programming" - href: programming-guide/com-interop/walkthrough-office-programming.md - name: Language Reference href: language-reference/index.md items: diff --git a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/account.vb b/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/account.vb deleted file mode 100644 index a763fab1e7feb..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/account.vb +++ /dev/null @@ -1,7 +0,0 @@ - -' -Public Class Account - Property ID As Integer = -1 - Property Balance As Double -End Class -' diff --git a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/assemblyinfo.vb b/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/assemblyinfo.vb deleted file mode 100644 index ca3a362c715fc..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/assemblyinfo.vb +++ /dev/null @@ -1,44 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.InteropServices -Imports System.Security - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - -' Review the values of the assembly attributes - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -'The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' -' You can specify all the values or you can default the Build and Revision Numbers -' by using the '*' as shown below: -' - - - - -Friend Module DesignTimeConstants - Public Const RibbonTypeSerializer As String = "Microsoft.VisualStudio.Tools.Office.Ribbon.Serialization.RibbonTypeCodeDomSerializer, Microsoft.VisualStudio.Tools.Office.Designer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" - Public Const RibbonBaseTypeSerializer As String = "System.ComponentModel.Design.Serialization.TypeCodeDomSerializer, System.Design" - Public Const RibbonDesigner As String = "Microsoft.VisualStudio.Tools.Office.Ribbon.Design.RibbonDesigner, Microsoft.VisualStudio.Tools.Office.Designer, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" -End Module diff --git a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/resources.designer.vb b/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/resources.designer.vb deleted file mode 100644 index 33d1af496e726..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/resources.designer.vb +++ /dev/null @@ -1,61 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.21125.0 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - -Namespace My.Resources - - 'This class was auto-generated by the StronglyTypedResourceBuilder - 'class via a tool like ResGen or Visual Studio. - 'To add or remove a member, edit your .ResX file then rerun ResGen - 'with the /str option, or rebuild your VS project. - ''' - ''' A strongly-typed resource class, for looking up localized strings, etc. - ''' - _ - Friend Module Resources - - Private resourceMan As Global.System.Resources.ResourceManager - - Private resourceCulture As Global.System.Globalization.CultureInfo - - ''' - ''' Returns the cached ResourceManager instance used by this class. - ''' - _ - Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager - Get - If Object.ReferenceEquals(resourceMan, Nothing) Then - Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("OfficeWalkthroughSnippets___VB.Resources", GetType(Resources).Assembly) - resourceMan = temp - End If - Return resourceMan - End Get - End Property - - ''' - ''' Overrides the current thread's CurrentUICulture property for all - ''' resource lookups using this strongly typed resource class. - ''' - _ - Friend Property Culture() As Global.System.Globalization.CultureInfo - Get - Return resourceCulture - End Get - Set - resourceCulture = value - End Set - End Property - End Module -End Namespace diff --git a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/resources.resx b/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/resources.resx deleted file mode 100644 index af7dbebbacef5..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/settings.designer.vb b/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/settings.designer.vb deleted file mode 100644 index 2681dcf7f197d..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/settings.designer.vb +++ /dev/null @@ -1,71 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.21125.0 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - - - - _ -Partial Friend NotInheritable Class MySettings - Inherits Global.System.Configuration.ApplicationSettingsBase - - Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) - -#Region "My.Settings Auto-Save Functionality" -#If _MyType = "WindowsForms" Then - Private Shared addedHandler As Boolean - - Private Shared addedHandlerLockObject As New Object - - _ - Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) - If My.Application.SaveMySettingsOnExit Then - My.Settings.Save() - End If - End Sub -#End If -#End Region - - Public Shared ReadOnly Property [Default]() As MySettings - Get - -#If _MyType = "WindowsForms" Then - If Not addedHandler Then - SyncLock addedHandlerLockObject - If Not addedHandler Then - AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings - addedHandler = True - End If - End SyncLock - End If -#End If - Return defaultInstance - End Get - End Property -End Class - -Namespace My - - _ - Friend Module MySettingsProperty - - _ - Friend ReadOnly Property Settings() As Global.OfficeWalkthroughSnippets___VB.MySettings - Get - Return Global.OfficeWalkthroughSnippets___VB.MySettings.Default - End Get - End Property - End Module -End Namespace diff --git a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/settings.settings b/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/settings.settings deleted file mode 100644 index 85b890b3c66b9..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/my project/settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/officewalkthroughsnippets - vb.vbproj b/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/officewalkthroughsnippets - vb.vbproj deleted file mode 100644 index 22e03233e8fcc..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/officewalkthroughsnippets - vb.vbproj +++ /dev/null @@ -1,284 +0,0 @@ - - - - - {BAA0C2D2-18E2-41B9-852F-F413020CAA33};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} - Debug - AnyCPU - {C3173541-993A-4D1A-B0D8-A11138E25CD5} - Library - OfficeWalkthroughSnippets___VB - OfficeWalkthroughSnippets - VB - v4.0 - Client - VSTO40 - - - - - - - 4.0 - true - true - publish\ - - en - 1.0.0.0 - true - true - 7 - days - False - OfficeWalkthroughSnippets - VB - - - OfficeWalkthroughSnippets - VB - - 3 - - - - False - Microsoft .NET Framework 4 Client Profile %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Microsoft Office 2007 Primary Interop Assemblies - true - - - False - Visual Studio 2010 Tools for Office Runtime %28x86 and x64%29 - true - - - False - Windows Installer 3.1 - true - - - - - Excel - - - On - - - - $(DefineConstants) - true - true - full - true - false - bin\Debug\ - OfficeWalkthroughSnippets - VB.xml - false - false - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - AllRules.ruleset - - - - - - false - true - pdbonly - true - bin\Release\ - OfficeWalkthroughSnippets - VB.xml - false - false - 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 - AllRules.ruleset - - - - - - - - On - Binary - Off - - - - - - True - - - True - - - True - - - True - - - - True - - - True - - - - - - - - - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - Code - - - ThisAddIn.vb - - - ThisAddIn.Designer.xml - - - - VbMyResourcesResXFileCodeGenerator - Resources.Designer.vb - My.Resources - Designer - - - True - True - Resources.resx - - - SettingsSingleFileGenerator - Settings.Designer.vb - - - True - Settings.settings - True - - - - - - - - - - - - - - - - - - diff --git a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.designer.vb b/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.designer.vb deleted file mode 100644 index 42a2bedef291c..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.designer.vb +++ /dev/null @@ -1,234 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.21125.0 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict Off -Option Explicit On - - - -''' - _ -Partial Public NotInheritable Class ThisAddIn - Inherits Microsoft.Office.Tools.AddInBase - - Friend WithEvents CustomTaskPanes As Microsoft.Office.Tools.CustomTaskPaneCollection - - Friend WithEvents VstoSmartTags As Microsoft.Office.Tools.SmartTagCollection - - _ - Friend WithEvents Application As Microsoft.Office.Interop.Excel.Application - - ''' - _ - Public Sub New(ByVal factory As Global.Microsoft.Office.Tools.Excel.ApplicationFactory, ByVal serviceProvider As Global.System.IServiceProvider) - MyBase.New(factory, serviceProvider, "AddIn", "ThisAddIn") - Globals.Factory = factory - End Sub - - ''' - _ - Protected Overrides Sub Initialize() - MyBase.Initialize() - Me.Application = Me.GetHostItem(Of Microsoft.Office.Interop.Excel.Application)(GetType(Microsoft.Office.Interop.Excel.Application), "Application") - Globals.ThisAddIn = Me - Global.System.Windows.Forms.Application.EnableVisualStyles() - Me.InitializeCachedData() - Me.InitializeControls() - Me.InitializeComponents() - Me.InitializeData() - End Sub - - ''' - _ - Protected Overrides Sub FinishInitialization() - Me.OnStartup() - End Sub - - ''' - _ - Protected Overrides Sub InitializeDataBindings() - Me.BeginInitialization() - Me.BindToData() - Me.EndInitialization() - End Sub - - ''' - _ - Private Sub InitializeCachedData() - If (Me.DataHost Is Nothing) Then - Return - End If - If Me.DataHost.IsCacheInitialized Then - Me.DataHost.FillCachedData(Me) - End If - End Sub - - ''' - _ - Private Sub InitializeData() - End Sub - - ''' - _ - Private Sub BindToData() - End Sub - - ''' - _ - Private Sub StartCaching(ByVal MemberName As String) - Me.DataHost.StartCaching(Me, MemberName) - End Sub - - ''' - _ - Private Sub StopCaching(ByVal MemberName As String) - Me.DataHost.StopCaching(Me, MemberName) - End Sub - - ''' - _ - Private Function IsCached(ByVal MemberName As String) As Boolean - Return Me.DataHost.IsCached(Me, MemberName) - End Function - - ''' - _ - Private Sub BeginInitialization() - Me.BeginInit() - Me.CustomTaskPanes.BeginInit() - Me.VstoSmartTags.BeginInit() - End Sub - - ''' - _ - Private Sub EndInitialization() - Me.VstoSmartTags.EndInit() - Me.CustomTaskPanes.EndInit() - Me.EndInit() - End Sub - - ''' - _ - Private Sub InitializeControls() - Me.CustomTaskPanes = Globals.Factory.CreateCustomTaskPaneCollection(Nothing, Nothing, "CustomTaskPanes", "CustomTaskPanes", Me) - Me.VstoSmartTags = Globals.Factory.CreateSmartTagCollection(Nothing, Nothing, "VstoSmartTags", "VstoSmartTags", Me) - End Sub - - ''' - _ - Private Sub InitializeComponents() - End Sub - - ''' - _ - Private Function NeedsFill(ByVal MemberName As String) As Boolean - Return Me.DataHost.NeedsFill(Me, MemberName) - End Function - - ''' - _ - Protected Overrides Sub OnShutdown() - Me.VstoSmartTags.Dispose() - Me.CustomTaskPanes.Dispose() - MyBase.OnShutdown() - End Sub -End Class - -''' - _ -Partial Friend NotInheritable Class Globals - - ''' - Private Sub New() - MyBase.New() - End Sub - - Private Shared _ThisAddIn As ThisAddIn - - Private Shared _factory As Global.Microsoft.Office.Tools.Excel.ApplicationFactory - - Private Shared _ThisRibbonCollection As ThisRibbonCollection - - Friend Shared Property ThisAddIn() As ThisAddIn - Get - Return _ThisAddIn - End Get - Set(ByVal value As ThisAddIn) - If (_ThisAddIn Is Nothing) Then - _ThisAddIn = value - Else - Throw New System.NotSupportedException() - End If - End Set - End Property - - Friend Shared Property Factory() As Global.Microsoft.Office.Tools.Excel.ApplicationFactory - Get - Return _factory - End Get - Set(ByVal value As Global.Microsoft.Office.Tools.Excel.ApplicationFactory) - If (_factory Is Nothing) Then - _factory = value - Else - Throw New System.NotSupportedException() - End If - End Set - End Property - - Friend Shared ReadOnly Property Ribbons() As ThisRibbonCollection - Get - If (_ThisRibbonCollection Is Nothing) Then - _ThisRibbonCollection = New ThisRibbonCollection(_factory.GetRibbonFactory) - End If - Return _ThisRibbonCollection - End Get - End Property -End Class - -''' - _ -Partial Friend NotInheritable Class ThisRibbonCollection - Inherits Microsoft.Office.Tools.Ribbon.RibbonCollectionBase - - ''' - Friend Sub New(ByVal factory As Global.Microsoft.Office.Tools.Ribbon.RibbonFactory) - MyBase.New(factory) - End Sub -End Class diff --git a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.designer.xml b/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.designer.xml deleted file mode 100644 index 9605bcce03f31..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.designer.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.vb b/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.vb deleted file mode 100644 index e39d4fbffa129..0000000000000 --- a/samples/snippets/visualbasic/VS_Snippets_VBCSharp/csofficewalkthrough/vb/thisaddin.vb +++ /dev/null @@ -1,99 +0,0 @@ - -' -Imports Microsoft.Office.Interop -' - -Public Class ThisAddIn - - Private Sub ThisAddIn_Startup() Handles Me.Startup - ' - Dim bankAccounts As New List(Of Account) From { - New Account With { - .ID = 345, - .Balance = 541.27 - }, - New Account With { - .ID = 123, - .Balance = -127.44 - } - } - ' - - ' - DisplayInExcel(bankAccounts, - Sub(account, cell) - ' This multiline lambda expression sets custom - ' processing rules for the bankAccounts. - cell.Value = account.ID - cell.Offset(0, 1).Value = account.Balance - - If account.Balance < 0 Then - cell.Interior.Color = RGB(255, 0, 0) - cell.Offset(0, 1).Interior.Color = RGB(255, 0, 0) - End If - End Sub) - ' - - ' - Dim wordApp As New Word.Application - wordApp.Visible = True - wordApp.Documents.Add() - wordApp.Selection.PasteSpecial(Link:=True, DisplayAsIcon:=True) - ' - End Sub - - ' - Sub DisplayInExcel(ByVal accounts As IEnumerable(Of Account), - ByVal DisplayAction As Action(Of Account, Excel.Range)) - - With Me.Application - ' Add a new Excel workbook. - .Workbooks.Add() - .Visible = True - .Range("A1").Value = "ID" - .Range("B1").Value = "Balance" - .Range("A2").Select() - - For Each ac In accounts - DisplayAction(ac, .ActiveCell) - .ActiveCell.Offset(1, 0).Select() - Next - - ' Copy the results to the Clipboard. - .Range("A1:B3").Copy() - End With - End Sub - ' - - Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown - - End Sub - - Public Sub Pieces(ByVal accounts As IEnumerable(Of Account), - ByVal DisplayAction As Action(Of Account, Excel.Range)) - - With Me.Application - ' Add a new Excel workbook. - .Workbooks.Add() - .Visible = True - .Range("A1").Value = "ID" - .Range("B1").Value = "Balance" - .Range("A2").Select() - - For Each ac In accounts - DisplayAction(ac, .ActiveCell) - .ActiveCell.Offset(1, 0).Select() - Next - - ' Copy the results to the Clipboard. - .Range("A1:B3").Copy() - - ' - ' Add the following two lines at the end of the With statement. - .Columns(1).AutoFit() - .Columns(2).AutoFit() - ' - End With - End Sub - -End Class From f62fb3a448fb0184d2ce0b5d496e014b22c21cd7 Mon Sep 17 00:00:00 2001 From: Travis Adams <39063700+travis-adams@users.noreply.github.com> Date: Thu, 24 Sep 2026 22:14:19 -0400 Subject: [PATCH 22/24] Fix typo on string interpolation page (#56252) --- docs/csharp/fundamentals/strings/interpolation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/csharp/fundamentals/strings/interpolation.md b/docs/csharp/fundamentals/strings/interpolation.md index 2dee3181e5121..a49e5a84c3816 100644 --- a/docs/csharp/fundamentals/strings/interpolation.md +++ b/docs/csharp/fundamentals/strings/interpolation.md @@ -65,7 +65,7 @@ For paths and other strings that contain backslashes, prefer an [interpolated ra ## Use a conditional expression -The colon has special meaning inside an interpolation expression, so wrap a [conditional exoressuin](../../language-reference/operators/conditional-operator.md) in parentheses: +The colon has special meaning inside an interpolation expression, so wrap a [conditional expression](../../language-reference/operators/conditional-operator.md) in parentheses: :::code language="csharp" source="snippets/interpolation/Program.cs" id="conditional"::: From 53b2928af8f5fa69efecd0a94f969fe4d7d5c3f6 Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Fri, 25 Sep 2026 09:43:45 -0400 Subject: [PATCH 23/24] Document remaining C# 7 diagnostics (#56246) * Remove stale catch-all entries. * Update expression tree restriction diagnostics * Add remaining attribute diagnostics * Update all C# 7 ref safety errors. * Add C# 7 stackalloc related diagnostics. * Ref modifier related errors. * Add exception filter errors. * Add parsing and preprocessor diagnostics. * Add additional command line diagnostics. Add the additional C# 7.x command line diagnostics. * Add module and assembly diagnostics. * Update compiler messages and toc for assembly references Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Final proofread. --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .openpublishing.redirection.csharp.json | 8 + .../array-declaration-errors.md | 222 ++++++++++++------ .../compiler-messages/assembly-references.md | 30 ++- .../attribute-usage-errors.md | 19 +- .../compiler-messages/cs8346.md | 62 ----- .../delegate-function-pointer-diagnostics.md | 9 +- .../expression-tree-restrictions.md | 3 +- .../invalid-build-command-line.md | 85 ++++++- .../parameter-argument-mismatch.md | 52 ++-- .../compiler-messages/parsing-errors.md | 31 ++- .../compiler-messages/preprocessor-errors.md | 47 +++- .../compiler-messages/ref-modifiers-errors.md | 72 +++--- .../compiler-messages/ref-safety-errors.md | 46 ++-- .../throwing-and-catching-exceptions.md | 71 ++++++ docs/csharp/language-reference/toc.yml | 77 +++--- docs/csharp/misc/cs1922.md | 53 ----- ...n-t-have-specifics-on-this-csharp-error.md | 35 --- 17 files changed, 564 insertions(+), 358 deletions(-) delete mode 100644 docs/csharp/language-reference/compiler-messages/cs8346.md create mode 100644 docs/csharp/language-reference/compiler-messages/throwing-and-catching-exceptions.md delete mode 100644 docs/csharp/misc/cs1922.md diff --git a/.openpublishing.redirection.csharp.json b/.openpublishing.redirection.csharp.json index 7cc129ec6e261..036d6f712c3f5 100644 --- a/.openpublishing.redirection.csharp.json +++ b/.openpublishing.redirection.csharp.json @@ -694,6 +694,10 @@ "source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8210.md", "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/tuple-errors" }, + { + "source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8346.md", + "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/array-declaration-errors#stack-allocation-errors" + }, { "source_path_from_root": "/docs/csharp/language-reference/compiler-messages/cs8373.md", "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/ref-modifiers-errors" @@ -3252,6 +3256,10 @@ "source_path_from_root": "/docs/csharp/misc/cs1920.md", "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/array-declaration-errors" }, + { + "source_path_from_root": "/docs/csharp/misc/cs1922.md", + "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/array-declaration-errors#invalid-collection-initializer" + }, { "source_path_from_root": "/docs/csharp/misc/cs1925.md", "redirect_url": "/dotnet/csharp/language-reference/compiler-messages/array-declaration-errors" diff --git a/docs/csharp/language-reference/compiler-messages/array-declaration-errors.md b/docs/csharp/language-reference/compiler-messages/array-declaration-errors.md index 6e820828272f0..2a18f0858d653 100644 --- a/docs/csharp/language-reference/compiler-messages/array-declaration-errors.md +++ b/docs/csharp/language-reference/compiler-messages/array-declaration-errors.md @@ -1,6 +1,6 @@ --- -title: Resolve errors and warnings related to array and collection declarations and initializations -description: These compiler errors and warnings indicate errors in the syntax for declaring and initializing array and collection variables. There are multiple valid expressions to declare an array. Combining them incorrectly leads to errors. Collection initializers and collection expressions provide initial values for an array or collection. +title: Resolve errors and warnings related to array, collection, and stack allocation expressions +description: These compiler errors and warnings indicate errors in array declarations, collection initializers and expressions, and stack allocation expressions. f1_keywords: - "CS0022" - "CS0178" @@ -22,11 +22,15 @@ f1_keywords: - "CS1586" - "CS1920" - "CS1921" + - "CS1922" - "CS1925" - "CS1950" - "CS1954" - "CS3007" - "CS3016" + - "CS8346" + - "CS8353" + - "CS8381" - "CS9174" - "CS9176" - "CS9185" @@ -41,6 +45,7 @@ f1_keywords: - "CS9213" - "CS9214" - "CS9215" + - "CS9221" - "CS9222" - "CS9332" - "CS9354" @@ -63,18 +68,22 @@ helpviewer_keywords: - "CS0820" - "CS0826" - "CS0846" - - "CS1552" - - "CS1586" - "CS1062" - "CS1063" - "CS1064" + - "CS1552" + - "CS1586" - "CS1920" - "CS1921" + - "CS1922" - "CS1925" - "CS1950" - "CS1954" - "CS3007" - "CS3016" + - "CS8346" + - "CS8353" + - "CS8381" - "CS9174" - "CS9176" - "CS9185" @@ -89,6 +98,7 @@ helpviewer_keywords: - "CS9213" - "CS9214" - "CS9215" + - "CS9221" - "CS9222" - "CS9332" - "CS9354" @@ -97,12 +107,12 @@ helpviewer_keywords: - "CS9357" - "CS9358" - "CS9359" -ms.date: 09/18/2026 +ms.date: 09/23/2026 ai-usage: ai-assisted --- -# Resolve errors and warnings in array and collection declarations and initialization expressions +# Resolve errors and warnings in array, collection, and stack allocation expressions -This article covers the following compiler errors: +This article covers the following compiler errors and warnings: - [**CS0012**](#missing-references): *The type 'type' is defined in an assembly that is not referenced. You must add a reference to assembly 'assembly'.* - [**CS0234**](#missing-references): *The type or namespace name does not exist in the namespace (are you missing an assembly reference?)* - [**CS0246**](#missing-references): *The type or namespace name could not be found (are you missing a using directive or an assembly reference?)* - [**CS0400**](#missing-references): *The type or namespace name could not be found in the global namespace (are you missing an assembly reference?)* -- [**CS0735**](#type-forwarding): *Invalid type specified as an argument for attribute.* - [**CS1068**](#type-forwarding): *The type name could not be found in the global namespace. This type has been forwarded to another assembly. Consider adding a reference to that assembly.* - [**CS1069**](#type-forwarding): *The type name could not be found in the namespace. This type has been forwarded to another assembly. Consider adding a reference to that assembly.* - [**CS1070**](#type-forwarding): *The type name could not be found. This type has been forwarded to another assembly. Consider adding a reference to that assembly.* @@ -66,9 +70,11 @@ That's by design. The text closely matches the text of the compiler error / warn - [**CS7079**](#invalid-assembly-reference): *The type is defined in a module that has not been added. You must add the module.* - [**CS8090**](#invalid-assembly-reference): *There is an error in a referenced assembly.* - [**CS8203**](#invalid-assembly-reference): *Invalid assembly name.* +- [**CS8206**](#type-forwarding): *Module 'module name' in assembly 'assembly name' is forwarding the type 'type name' to multiple assemblies: 'first assembly name' and 'second assembly name'.* +- [**CS8356**](#duplicate-references): *Predefined type 'type name' is declared in multiple referenced assemblies: 'first assembly name' and 'second assembly name'* - [**CS9286**](#missing-references): *Type does not contain a definition and no accessible extension member for receiver type could be found (are you missing a using directive or an assembly reference?)* -In addition, the following warnings are covered in this article: +In addition, this article covers the following warnings: - [**CS1683**](#invalid-assembly-reference): *Reference to type 'Type Name' claims it is defined in this assembly, but it is not defined in source or any added modules.* @@ -79,6 +85,7 @@ The following errors and warnings indicate that you're missing an assembly refer - **CS0012**: *The type 'type' is defined in an assembly that is not referenced. You must add a reference to assembly 'assembly'.* - **CS0234**: *The type or namespace name does not exist in the namespace (are you missing an assembly reference?)* - **CS0246**: *The type or namespace name could not be found (are you missing a using directive or an assembly reference?)* +- [**CS1714**](#missing-references): *The base class or interface of this type could not be resolved or is invalid.* - **CS9286**: *Type does not contain a definition and no accessible extension member for receiver type could be found (are you missing a using directive or an assembly reference?)* These compiler errors indicate one of these problems in your code: @@ -123,8 +130,11 @@ If the assembly appears to be referenced in your project but you still receive C - **CS1068**: *The type name could not be found in the global namespace. This type has been forwarded to another assembly. Consider adding a reference to that assembly.* - **CS1069**: *The type name could not be found in the namespace. This type has been forwarded to another assembly. Consider adding a reference to that assembly.* - **CS1070**: *The type name could not be found. This type has been forwarded to another assembly. Consider adding a reference to that assembly.* +- **CS8206**: *Module 'module name' in assembly 'assembly name' is forwarding the type 'type name' to multiple assemblies: 'first assembly name' and 'second assembly name'.* + +CS1068, CS1069, and CS1070 indicate an error referencing a type forwarded to a different assembly. Add a reference to the assembly indicated in the error message. -These errors indicate an error referencing a type forwarded to a different assembly. To address any of these errors, add a reference to the assembly indicated in the error message. +CS8206 indicates conflicting type-forwarder metadata in a referenced assembly or module. The same type is forwarded to more than one destination assembly. Use corrected or rebuilt dependencies that forward the type to one destination. Ensure package and assembly versions are consistent, or remove the reference that introduces the conflicting metadata. Source aliases or unrelated changes to local type declarations don't correct the referenced metadata. ## Duplicate references @@ -132,17 +142,21 @@ The following errors indicate a duplicate assembly reference: - **CS1704**: *An assembly with the same simple name has already been imported. Try removing one of the references or sign them to enable side-by-side.* - **CS1760**: *Multiple assemblies refer to the same metadata but only one is a linked reference (specified using /link option); consider removing one of the references.* +- **CS8356**: *Predefined type 'type name' is declared in multiple referenced assemblies: 'first assembly name' and 'second assembly name'* -To fix these errors, you must either remove one of the references, or resolve the duplication. Causes for duplication include: +To fix these errors, remove one of the references or resolve the duplication. Causes for duplication include: -- Multiple unsigned assemblies have the same name. +- Multiple unsigned assemblies with the same name. - Your project references multiple versions of the same assembly. +For CS8356, remove or replace the duplicate or incompatible reference that defines the same predefined runtime type. Ensure the project targets one coherent framework and reference-assembly set. Don't add another source definition of the predefined type. + ## Invalid assembly reference The following errors indicate that an assembly reference is invalid: - **CS7008**: *The assembly name is reserved and cannot be used as a reference in an interactive session.* +- **CS7068**: *Reference to type claims it is defined in this assembly, but it is not defined in source or any added modules.* - **CS7069**: *Reference to type claims it is defined in another assembly, but it could not be found.* - **CS7071**: *Assembly reference is invalid and cannot be resolved.* - **CS7079**: *The type is defined in a module that has not been added. You must add the module.* @@ -153,4 +167,4 @@ The following warning also indicates an invalid reference assembly: - **CS1683**: *Reference to type 'Type Name' claims it is defined in this assembly, but it is not defined in source or any added modules* -Check that the assembly name is spelled correctly. The referenced assembly file might be invalid. +Check that you spelled the assembly name correctly. The referenced assembly file might be invalid. diff --git a/docs/csharp/language-reference/compiler-messages/attribute-usage-errors.md b/docs/csharp/language-reference/compiler-messages/attribute-usage-errors.md index 8556db4d6fb32..e35d260d90797 100644 --- a/docs/csharp/language-reference/compiler-messages/attribute-usage-errors.md +++ b/docs/csharp/language-reference/compiler-messages/attribute-usage-errors.md @@ -38,6 +38,8 @@ f1_keywords: - "CS7046" - "CS7047" - "CS7067" + - "CS8335" + - "CS8336" - "CS8423" - "CS8783" - "CS8959" @@ -86,6 +88,8 @@ helpviewer_keywords: - "CS7046" - "CS7047" - "CS7067" + - "CS8335" + - "CS8336" - "CS8423" - "CS8783" - "CS8959" @@ -97,7 +101,7 @@ helpviewer_keywords: - "CS8970" - "CS9331" - "CS9351" -ms.date: 09/11/2026 +ms.date: 09/23/2026 ai-usage: ai-assisted --- # Resolve errors and warnings related to attribute declarations or attribute use in your code @@ -105,7 +109,7 @@ ai-usage: ai-assisted This article covers the following compiler errors: - [**CS0181**](#attribute-arguments-and-parameters): *Attribute constructor parameter has a type, which is not a valid attribute parameter type* - [**CS0243**](#conditional-attribute-usage): *The Conditional attribute is not valid on 'method' because it is an override method.* @@ -143,6 +147,8 @@ That's by design. The text closely matches the text of the compiler error / warn - [**CS7046**](#attribute-arguments-and-parameters): *Attribute parameter must be specified.* - [**CS7047**](#attribute-arguments-and-parameters): *Attribute parameter 'parameter1' or 'parameter2' must be specified.* - [**CS7067**](#attribute-arguments-and-parameters): *Attribute constructor parameter is optional, but no default parameter value was specified.* +- [**CS8335**](#compiler-reserved-attributes-and-types): *Do not use 'attribute name'. This is reserved for compiler usage.* +- [**CS8336**](#compiler-reserved-attributes-and-types): *The type name 'type' is reserved to be used by the compiler.* - [**CS8423**](#attribute-location-context): *Attribute 'attribute' is not valid on event accessors. It is only valid on 'declaration' declarations.* - [**CS8783**](#conditional-attribute-usage): *Local function 'method' must be 'static' in order to use the Conditional attribute* - [**CS8959**](#callerargumentexpression-attribute-usage): *CallerArgumentExpressionAttribute cannot be applied because there are no standard conversions from type1 to type2* @@ -259,6 +265,15 @@ To correct these errors, follow these rules. For more information, see [Indexers - Some attributes are reserved for the compiler and can't be applied manually in source code (**CS9331**). Replace the attribute with the equivalent C# language syntax that causes the compiler to generate it. - Don't apply both and `ExtendedLayoutAttribute` to the same type (**CS9351**). These two layout attributes represent mutually exclusive layout strategies under the [updated memory safety model](../unsafe-code.md#the-updated-memory-safety-model-preview): explicit layout requires a `FieldOffset` on every instance field, while extended layout lets the runtime choose field offsets while still requiring each field to be marked `safe` or `unsafe`. Remove one of the two attributes from the type declaration. +## Compiler-reserved attributes and types + +The following errors occur when source code explicitly declares or applies names or attributes reserved for compiler-generated metadata: + +- **CS8335**: *Do not use 'attribute name'. This is reserved for compiler usage.* +- **CS8336**: *The type name 'type' is reserved to be used by the compiler.* + +Remove the explicit declaration or attribute application. Use the corresponding C# language feature instead, and let the compiler generate the required metadata. + ## Conditional attribute usage You see the following errors when you apply the in ways that violate its usage restrictions: diff --git a/docs/csharp/language-reference/compiler-messages/cs8346.md b/docs/csharp/language-reference/compiler-messages/cs8346.md deleted file mode 100644 index dd522b1ca2186..0000000000000 --- a/docs/csharp/language-reference/compiler-messages/cs8346.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -description: "Compiler Error CS8346" -title: "Compiler Error CS8346" -ms.date: 9/14/2026 -f1_keywords: - - "CS8346" -helpviewer_keywords: - - "CS8346" ---- -# Compiler Error CS8346 - -Conversion of a stackalloc expression of type 'TypeA' to type 'TypeB' is not possible. - -The result of [`stackalloc`](../operators/stackalloc.md) is a block of memory allocated on the stack. The type of it can be a pointer of 'TypeA', if the local is either a pointer type or inferred (`var`). Or the type of stackalloc expression can be an instance of type `Span`, where `T` is the unmanaged type. -In both cases, regardless of the type of local variable, result of stackalloc expression can't be explicitly cast to any type. Doing so breaks the compilers availability to correctly infer the allocation type. - -## Example - -The following samples generate CS8346: - -```csharp -unsafe class Example -{ - public static void Main() - { - // CS8346: Conversion of a stackalloc expression of type 'int' to type 'int*' is not possible - Span stackSpan = (int*)stackalloc int[100]; - - // CS8346: Conversion of a stackalloc expression of type 'int' to type 'int*' is not possible - int* stackInt = (int*)stackalloc int[100]; - - // CS8346: Conversion of a stackalloc expression of type 'int' to type 'int*' is not possible - var stackVar = (int*)stackalloc int[100]; - } -} -``` - -## To correct this error - -Avoid using explicit cast. Let the compiler infer the correct type. - -```csharp -unsafe class Example -{ - public static void Main() - { - // No CS8346. Type of stackalloc expression is Span, where T is int - Span stackSpan = stackalloc int[100]; - - // No CS8346. Type of stackalloc expression is int* - int* stackInt = stackalloc int[100]; - - // No CS8346. Type of stackalloc expression is int* - var stackVar = stackalloc int[100]; - } -} -``` - -## See also - -- [C# Standard: Expressions](/dotnet/csharp/language-reference/language-specification/expressions#12822-stack-allocation) -- [stackalloc expression](../operators/stackalloc.md) diff --git a/docs/csharp/language-reference/compiler-messages/delegate-function-pointer-diagnostics.md b/docs/csharp/language-reference/compiler-messages/delegate-function-pointer-diagnostics.md index 1b6dc717d2a9a..708261ab37cff 100644 --- a/docs/csharp/language-reference/compiler-messages/delegate-function-pointer-diagnostics.md +++ b/docs/csharp/language-reference/compiler-messages/delegate-function-pointer-diagnostics.md @@ -9,6 +9,7 @@ f1_keywords: - "CS0644" - "CS1599" - "CS1958" + - "CS8189" - "CS8755" - "CS8756" - "CS8757" @@ -33,6 +34,7 @@ helpviewer_keywords: - "CS0644" - "CS1599" - "CS1958" + - "CS8189" - "CS8755" - "CS8756" - "CS8757" @@ -49,7 +51,7 @@ helpviewer_keywords: - "CS8811" - "CS8909" - "CS8911" -ms.date: 04/27/2026 +ms.date: 09/23/2026 ai-usage: ai-assisted --- @@ -58,7 +60,7 @@ ai-usage: ai-assisted This article covers the following compiler errors and warnings: - [**CS0059**](#delegate-signature-mismatches): *Inconsistent accessibility: parameter type 'type' is less accessible than delegate 'delegate'.* @@ -68,6 +70,7 @@ That's by design. The text closely matches the text of the compiler error / warn - [**CS0644**](#delegate-type-restrictions): *'class' cannot derive from special class 'class'.* - [**CS1599**](#delegate-type-restrictions): *The return type of a method, delegate, or function pointer cannot be 'type'.* - [**CS1958**](#delegate-type-restrictions): *Object and collection initializer expressions may not be applied to a delegate creation expression.* +- [**CS8189**](#delegate-signature-mismatches): *Ref mismatch between 'method' and delegate 'delegate'* - [**CS8755**](#function-pointer-signature-mismatches): *'modifier' cannot be used as a modifier on a function pointer parameter.* - [**CS8756**](#function-pointer-signature-mismatches): *Function pointer 'type' does not take 'count' arguments.* - [**CS8757**](#function-pointer-signature-mismatches): *No overload for 'method' matches function pointer 'type'.* @@ -91,11 +94,13 @@ That's by design. The text closely matches the text of the compiler error / warn - **CS0123**: *No overload for 'method' matches delegate 'delegate'.* - **CS0148**: *The delegate 'delegate' does not have a valid constructor.* - **CS0410**: *No overload for 'method' has the correct parameter and return types.* +- **CS8189**: *Ref mismatch between 'method' and delegate 'delegate'* When you create or assign a delegate, the compiler verifies that the target method's signature matches the delegate type's declaration. The signature includes the parameter types, return type, and accessibility. For the full rules, see [Delegates](../../programming-guide/delegates/index.md) and [Accessibility constraints](~/_csharpstandard/standard/basic-concepts.md#745-accessibility-constraints) in the C# specification. - Change all parameter types in the delegate declaration to types that are at least as accessible as the delegate itself (**CS0059**). A `public` delegate can't reference a less-accessible type in its parameter list because callers outside the assembly wouldn't be able to provide the argument. For more information, see [Access Modifiers](../../programming-guide/classes-and-structs/access-modifiers.md). - Adjust either the method signature or the delegate signature so the parameter types and return type match exactly (**CS0123**). The compiler requires an exact signature match when you assign a method to a delegate. +- Align the return reference kind between the method and the target delegate when converting a method group (**CS8189**). Change the return declaration so both return by value, both return by `ref`, or both return by `ref readonly`. - Verify that the delegate was compiled by a conformant compiler (**CS0148**). This error occurs when you import a managed assembly built by a compiler that produced an ill-formed delegate constructor. Recompile the assembly with a standards-compliant compiler to resolve the error. > [!NOTE] diff --git a/docs/csharp/language-reference/compiler-messages/expression-tree-restrictions.md b/docs/csharp/language-reference/compiler-messages/expression-tree-restrictions.md index 8eee3d2e767c4..d3de0ea46d62b 100644 --- a/docs/csharp/language-reference/compiler-messages/expression-tree-restrictions.md +++ b/docs/csharp/language-reference/compiler-messages/expression-tree-restrictions.md @@ -44,6 +44,7 @@ f1_keywords: - "CS8849" - "CS8927" - "CS8952" + - "CS8972" - "CS9170" - "CS9175" - "CS9226" @@ -88,12 +89,12 @@ helpviewer_keywords: - "CS8642" - "CS8790" - "CS8791" - - "CS8781" - "CS8792" - "CS8810" - "CS8849" - "CS8927" - "CS8952" + - "CS8972" - "CS9170" - "CS9175" - "CS9226" diff --git a/docs/csharp/language-reference/compiler-messages/invalid-build-command-line.md b/docs/csharp/language-reference/compiler-messages/invalid-build-command-line.md index 26ab031287e2a..ccbdc7e784222 100644 --- a/docs/csharp/language-reference/compiler-messages/invalid-build-command-line.md +++ b/docs/csharp/language-reference/compiler-messages/invalid-build-command-line.md @@ -1,6 +1,6 @@ --- -title: "Resolve errors and warnings related to invalid command-line options and build configuration" -description: "This article helps you diagnose and correct compiler errors and warnings related to invalid command-line switches, build configuration, and compiler invocation problems" +title: "Resolve errors and warnings related to compiler options and build configuration" +description: "This article helps you diagnose and correct compiler errors and warnings related to compiler options, Roslyn API options, build configuration, and compiler invocation problems" f1_keywords: - "CS0006" - "CS0007" @@ -27,10 +27,18 @@ f1_keywords: - "CS3012" - "CS3013" - "CS7038" + - "CS8111" + - "CS8113" + - "CS8190" + - "CS8191" + - "CS8202" + - "CS8308" + - "CS8309" + - "CS8357" - "CS8751" - "CS8771" - "CS8772" - - "CS9400" # ERR_BadCompilationOptionValueAccepted Invalid '{0}' value: '{1}'. Accepted values are: {2} + - "CS9400" # ERR_BadCompilationOptionValueAccepted: Invalid 'option' value: 'value'. Accepted values are listed. helpviewer_keywords: - "CS0006" - "CS0007" @@ -57,19 +65,27 @@ helpviewer_keywords: - "CS3012" - "CS3013" - "CS7038" + - "CS8111" + - "CS8113" + - "CS8190" + - "CS8191" + - "CS8202" + - "CS8308" + - "CS8309" + - "CS8357" - "CS8751" - "CS8771" - "CS8772" - "CS9400" -ms.date: 09/11/2026 +ms.date: 09/23/2026 ai-usage: ai-assisted --- -# Resolve errors and warnings for invalid command-line options and build configuration +# Resolve errors and warnings for compiler options and build configuration This article covers the following compiler errors and warnings: - [**CS0006**](#input-and-output-file-errors): *Metadata file 'file' could not be found* - [**CS0007**](#compiler-infrastructure-errors): *Unexpected common language runtime initialization error — 'description'* @@ -96,6 +112,14 @@ That's by design. The text closely matches the text of the compiler error / warn - [**CS3012**](#module-and-assembly-configuration): *You must specify the CLSCompliant attribute on the assembly, not the module, to enable CLS compliance checking* - [**CS3013**](#module-and-assembly-configuration): *Added modules must be marked with the CLSCompliant attribute to match the assembly* - [**CS7038**](#compiler-infrastructure-errors): *Failed to emit module 'module': error* +- [**CS8111**](#instrumentation-and-pdb-options): *Invalid instrumentation kind: instrumentation kind* +- [**CS8113**](#instrumentation-and-pdb-options): *Invalid hash algorithm name: 'hash algorithm name'* +- [**CS8190**](#parse-and-documentation-api-options): *Provided source code kind is unsupported or invalid: 'source code kind'* +- [**CS8191**](#parse-and-documentation-api-options): *Provided documentation mode is unsupported or invalid: 'documentation mode'.* +- [**CS8202**](#public-signing-and-reference-assembly-output): *Public signing is not supported for netmodules.* +- [**CS8308**](#public-signing-and-reference-assembly-output): *Do not use refout when using refonly.* +- [**CS8309**](#public-signing-and-reference-assembly-output): *Cannot compile net modules when using /refout or /refonly.* +- [**CS8357**](#deterministic-assembly-versions): *The specified version string 'version string' contains wildcards, which are not compatible with determinism. Either remove wildcards from the version string, or disable determinism for this compilation* - [**CS8751**](#compiler-infrastructure-errors): *Internal error in the C# compiler.* - [**CS8771**](#conflicting-or-missing-options): *Output directory could not be determined* - [**CS8772**](#invalid-option-values): *stdin argument '-' is specified, but input has not been redirected from the standard input stream.* @@ -111,7 +135,7 @@ That's by design. The text closely matches the text of the compiler error / warn These errors indicate that the compiler can't find, read, or write files needed for compilation. For the full list of file-related compiler options, see [C# compiler options - Inputs](../compiler-options/inputs.md) and [C# compiler options - Resources](../compiler-options/resources.md). -- Verify the path passed to [**References**](../compiler-options/inputs.md#references) or related options points to an existing assembly (**CS0006**). This error typically occurs when an assembly reference in the project file or command line specifies a path that doesn't exist. Check for typos, ensure the referenced project is built, and confirm the file isn't moved or deleted. +- Verify the path you pass to [**References**](../compiler-options/inputs.md#references) or related options points to an existing assembly (**CS0006**). This error typically occurs when an assembly reference in the project file or command line specifies a path that doesn't exist. Check for typos, ensure the referenced project is built, and confirm the file isn't moved or deleted. - Check the output path to make sure it exists and is writable, and ensure no process currently has a lock on the file (**CS0016**). For example, make sure your executable isn't running when you attempt to build. If a previously built file is already at the location, verify that it isn't read-only. - Verify that the path you supply to [**AdditionalLibPaths**](../compiler-options/advanced.md#additionallibpaths) or the LIB environment variable exists and is accessible (**CS1668**). The error message in single quotation marks contains the operating system error that explains why the path is invalid. - Correct the problem described in the error reason for the Win32 resource file (**CS1719**). The most common causes are "file not found" (verify the path) or "access denied" (check file permissions). @@ -133,20 +157,39 @@ These errors indicate that the compiler can't find, read, or write files needed - **CS8772**: *stdin argument '-' is specified, but input has not been redirected from the standard input stream.* - **CS9400**: *Invalid 'option' value: 'value'. Accepted values are: 'value1, value2, ...'* -These errors indicate that a value passed to a compiler option is malformed or outside the allowed set of values. For the full list of compiler options, see [C# Compiler Options](../compiler-options/index.md). +These errors indicate that a value you passed to a compiler option is malformed or outside the allowed set of values. For the full list of compiler options, see [C# Compiler Options](../compiler-options/index.md). - Supply a valid version number for the [**SubsystemVersion**](../compiler-options/advanced.md#subsystemversion) option (**CS1773**). ARM and AppContainerExe targets require version 6.02 or greater; other targets require 4.00 or greater. -- Use one of the valid [**OutputType**](../compiler-options/output.md#outputtype) values: `exe`, `winexe`, `library`, or `module` (**CS2019**). Any other value for the **/target** option is rejected. -- Ensure preprocessing symbols passed to [**DefineConstants**](../compiler-options/language.md#defineconstants) are valid C# identifiers (**CS2029**). Identifiers must start with a letter or underscore and contain only letters, digits, or underscores. This warning can't be suppressed by the [**NoWarn**](../compiler-options/errors-warnings.md#nowarn) option. -- Remove ASCII control characters (range 0–31) and the pipe (`|`) character from command-line arguments and [response files](../compiler-options/miscellaneous.md#responsefiles) (**CS2032**). The command-line processor and IDE typically filter these characters, so this error most commonly appears when using response files that contain invalid characters. This error is no longer generated by newer versions of the compiler. +- Use one of the valid [**OutputType**](../compiler-options/output.md#outputtype) values: `exe`, `winexe`, `library`, or `module` (**CS2019**). The compiler rejects any other value for the **/target** option. +- Ensure preprocessing symbols you pass to [**DefineConstants**](../compiler-options/language.md#defineconstants) are valid C# identifiers (**CS2029**). Identifiers must start with a letter or underscore and contain only letters, digits, or underscores. You can't suppress this warning by using the [**NoWarn**](../compiler-options/errors-warnings.md#nowarn) option. +- Remove ASCII control characters (range 0–31) and the pipe (`|`) character from command-line arguments and [response files](../compiler-options/miscellaneous.md#responsefiles) (**CS2032**). The command-line processor and IDE typically filter these characters, so this error most commonly appears when you use response files that contain invalid characters. Newer versions of the compiler don't generate this error. - Supply a valid culture name recognized by the compiler (**CS2038**). Check the spelling against the list of supported culture names. - Provide a properly formatted GUID for options that require one, such as **/checksumalgorithm** (**CS2039**, **CS2040**). The GUID must follow the standard format (for example, `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`). - Remove invalid characters from the output file name (**CS2041**). Output names can't contain characters that are invalid in file paths on the target operating system. - Provide a valid debug information format value (**CS2042**). Accepted values depend on the compiler version and typically include `full`, `pdbonly`, `portable`, and `embedded`. -- Replace the legacy `id#` syntax with `$id` (**CS2043**). The older syntax is no longer supported by the compiler. +- Replace the legacy `id#` syntax with `$id` (**CS2043**). The compiler no longer supports the older syntax. - Supply a value that matches the expected format for the specified option (**CS2046**). The error message indicates the expected form. - Redirect standard input when using the `-` (stdin) argument (**CS8772**). The compiler expects piped input when you pass `-` as the source file argument. Use a pipeline (for example, `cat file.cs | csc -`) or remove the `-` argument and pass the source file directly. -- Use one of the accepted values listed in the error message for the named compiler option (**CS9400**). This is a general-purpose diagnostic that the compiler reports whenever a compiler feature or property accepts only a fixed set of values and you supply one that isn't in that set — for example, an unrecognized value for the `updated-memory-safety-rules` compiler feature. Check the documentation for the specific option named in the error to find its accepted values. +- Use one of the accepted values listed in the error message for the named compiler option (**CS9400**). This error is a general-purpose diagnostic that the compiler reports whenever a compiler feature or property accepts only a fixed set of values and you supply one that isn't in that set. For example, you might see this error when you provide an unrecognized value for the `updated-memory-safety-rules` compiler feature. Check the documentation for the specific option named in the error to find its accepted values. + +## Instrumentation and PDB options + +- **CS8111**: *Invalid instrumentation kind: instrumentation kind* +- **CS8113**: *Invalid hash algorithm name: 'hash algorithm name'* + +Use a supported instrumentation kind when you pass the `/instrument` option. The command-line option accepts `TestCoverage`; Roslyn API consumers must provide a valid value in (**CS8111**). + +Provide a cryptographic hash algorithm supported by the current platform in (**CS8113**). Deterministic emission also requires a nonempty PDB checksum algorithm. This API setting calculates the PDB checksum stored in the compiled file. It's distinct from the [**ChecksumAlgorithm** compiler option](../compiler-options/advanced.md#checksumalgorithm), which selects `SHA1` or `SHA256` for source-file checksums stored in the PDB. Invalid command-line values are rejected while parsing the command line rather than reported as CS8113. + +## Parse and documentation API options + +- **CS8190**: *Provided source code kind is unsupported or invalid: 'source code kind'* +- **CS8191**: *Provided documentation mode is unsupported or invalid: 'documentation mode'.* + +Ordinary `csc` command-line option parsing doesn't produce these public Roslyn API diagnostics. When a instance contains an invalid enum value, `CSharpParseOptions.Errors` exposes them. `CSharpCompilation.GetDiagnostics()` also reports them after a syntax tree that uses those options is included in a compilation, but `CSharpSyntaxTree.GetDiagnostics()` doesn't report them. + +- Use for C# source files or for scripts (**CS8190**). The obsolete `Interactive` value is rejected; use `Script` instead. +- Use , , or (**CS8191**). Don't cast an arbitrary integer to `DocumentationMode`. ## Conflicting or missing options @@ -175,6 +218,22 @@ These warnings involve mismatches between the CLSCompliant attribute on modules - Build with the **module** element of the [**OutputType**](../compiler-options/output.md#outputtype) compiler option when specifying `[module:System.CLSCompliant(true)]` (**CS3012**). The CLSCompliant attribute on a module is only meaningful when the output target is a module rather than an assembly. - Add a matching `[module:CLSCompliant(true)]` or `[module:CLSCompliant(false)]` attribute to modules added via [**AddModule**](../compiler-options/inputs.md#addmodules) so they agree with the assembly's CLS state (**CS3013**). The default is `[module:CLSCompliant(false)]`, so modules that should be CLS compliant must explicitly opt in. +## Public signing and reference assembly output + +- **CS8202**: *Public signing is not supported for netmodules.* +- **CS8308**: *Do not use refout when using refonly.* +- **CS8309**: *Cannot compile net modules when using /refout or /refonly.* + +A netmodule contains metadata and compiled code but no assembly manifest. Because public signing applies a public key and signed flag to an assembly manifest, don't combine [**PublicSign**](../compiler-options/security.md#publicsign) with the `module` [**OutputType**](../compiler-options/output.md#outputtype) (**CS8202**). Produce an assembly, or disable public signing for the netmodule. + +The `/refout` option produces a reference assembly in addition to the implementation assembly. The `/refonly` option produces only a reference assembly as the primary output. Remove `/refout` when using `/refonly` (**CS8308**). Reference assemblies require an assembly manifest, so don't combine either option with `/target:module` (**CS8309**). For MSBuild projects, use [**ProduceReferenceAssembly**](../compiler-options/output.md#producereferenceassembly) or [**ProduceOnlyReferenceAssembly**](../compiler-options/code-generation.md#produceonlyreferenceassembly), but not both. + +## Deterministic assembly versions + +- **CS8357**: *The specified version string 'version string' contains wildcards, which aren't compatible with determinism. Either remove wildcards from the version string, or disable determinism for this compilation.* + +Deterministic compilation requires the same inputs to produce the same output. A wildcard in derives part of the version from changing values, so it isn't compatible with [**Deterministic** compilation](../compiler-options/code-generation.md#deterministic). Replace the wildcard with fixed numeric components. Disable deterministic compilation only when a generated wildcard version is required. + ## Compiler infrastructure errors - **CS0007**: *Unexpected common language runtime initialization error — 'description'* diff --git a/docs/csharp/language-reference/compiler-messages/parameter-argument-mismatch.md b/docs/csharp/language-reference/compiler-messages/parameter-argument-mismatch.md index b5bbf0d6544cf..6177975f2cfd8 100644 --- a/docs/csharp/language-reference/compiler-messages/parameter-argument-mismatch.md +++ b/docs/csharp/language-reference/compiler-messages/parameter-argument-mismatch.md @@ -18,7 +18,10 @@ f1_keywords: - "CS1746" - "CS7036" - "CS7067" + - "CS8323" - "CS8324" + - "CS8362" + - "CS8378" - "CS8905" - "CS8943" - "CS8944" @@ -47,7 +50,10 @@ helpviewer_keywords: - "CS1746" - "CS7036" - "CS7067" + - "CS8323" - "CS8324" + - "CS8362" + - "CS8378" - "CS8905" - "CS8943" - "CS8944" @@ -59,14 +65,15 @@ helpviewer_keywords: - "CS8964" - "CS8965" - "CS8966" -ms.date: 12/19/2023 +ms.date: 09/23/2026 +ai-usage: ai-assisted --- # Parameter and argument mismatch -The compiler generates the following errors when there's no argument supplied for a formal parameter, or the argument isn't valid for that parameter: +The compiler generates the following errors when you don't supply an argument for a formal parameter, or when the argument isn't valid for that parameter: - [**CS0182**](#arguments-for-attributes): *An attribute argument must be a constant expression, `typeof` expression or array creation expression of an attribute parameter type* - [**CS0591**](#arguments-for-attributes): *Invalid value for argument to attribute* @@ -84,7 +91,10 @@ That's by design. The text closely matches the text of the compiler error / warn - [**CS1746**](#named-and-optional-parameters-and-arguments): *The delegate does not have a parameter named 'name'* - [**CS7036**](#missing-argument): *There is no argument given that corresponds to the required parameter* - [**CS7067**](#named-and-optional-parameters-and-arguments): *Attribute constructor parameter is optional, but no default parameter value was specified.* +- [**CS8323**](#named-and-optional-parameters-and-arguments): *Named argument 'argument name' is used out-of-position but is followed by an unnamed argument* - [**CS8324**](#named-and-optional-parameters-and-arguments): *Named argument specifications must appear after all fixed arguments have been specified in a dynamic invocation.* +- [**CS8362**](#variable-argument-lists): *`__arglist` cannot have an argument of void type* +- [**CS8378**](#variable-argument-lists): *`__arglist` cannot have an argument passed by 'in' or 'out'* - [**CS8905**](#named-and-optional-parameters-and-arguments): *A function pointer cannot be called with named arguments.* - [**CS8943**](#interpolated-string-handler): *null is not a valid parameter name. To get access to the receiver of an instance method, use the empty string as the parameter name.* - [**CS8944**](#interpolated-string-handler): *Method is not an instance method, the receiver cannot be an interpolated string handler argument.* @@ -99,17 +109,17 @@ That's by design. The text closely matches the text of the compiler error / warn ## Missing argument -The following general errors are issued when the compiler can't match arguments to all member parameters: +The compiler returns the following general errors when it can't match arguments to all member parameters: - **CS0839**: *Argument missing.* - **CS7036**: *There is no argument given that corresponds to the required parameter* -These errors are general: The compiler can't match the arguments given in a method call to the required parameters of the method. Check the following causes: +These errors indicate that the compiler can't match the arguments in a method call to the required parameters of the method. Check the following causes: -- Make sure you included all necessary arguments. -- Make sure the arguments are in the correct order. -- Make sure all arguments are the correct type. -- Make sure overload resolution rules chose the method you expected. +- You included all necessary arguments. +- The arguments are in the correct order. +- All arguments are the correct type. +- Overload resolution rules chose the method you expected. You might also see *CS7036* if you wrote overloaded local functions. Local functions can't be overloaded. The compiler only recognizes the first local function with that name. Check if you meant to call a different local function. @@ -117,7 +127,7 @@ These errors often appear with other diagnostics that can help diagnose the corr ## Arguments for attributes -The compiler issues these errors when an argument to an attribute constructor is incorrect: +The compiler returns these errors when an argument to an attribute constructor is incorrect: - **CS0182**: *An attribute argument must be a constant expression, `typeof` expression or array creation expression of an attribute parameter type* - **CS0591**: *Invalid value for argument to attribute* @@ -127,7 +137,7 @@ The compiler issues these errors when an argument to an attribute constructor is - **CS0643**: *Duplicate named attribute argument* - **CS0655**: *not a valid named attribute argument because it is not a valid attribute parameter type* -If you use the on your attribute definition, make sure the allowed values aren't mutually exclusive. Check that the type and order of arguments to the attribute are correct. Make sure the text of string arguments is valid. For many attributes, the argument must be a valid C# identifier. Arguments to attribute constructors must be compile-time constants. Therefore, they're limited to types that support literal constants. In addition, the following types that allow literal constants are disallowed as attribute parameters: +If you use the on your attribute definition, ensure the allowed values aren't mutually exclusive. Check that the type and order of arguments to the attribute are correct. Ensure the text of string arguments is valid. For many attributes, the argument must be a valid C# identifier. Arguments to attribute constructors must be compile-time constants. Therefore, you can only use types that support literal constants. In addition, the following types that support literal constants are disallowed as attribute parameters: - [sbyte](../../language-reference/builtin-types/integral-numeric-types.md) - [ushort](../../language-reference/builtin-types/integral-numeric-types.md) @@ -148,6 +158,7 @@ The compiler issues the following errors for incorrect use of named and optional - **CS1744**: *Named argument specifies a parameter for which a positional argument has already been given* - **CS1746**: *The delegate does not have a parameter named 'name'* - **CS7067**: *Attribute constructor parameter is optional, but no default parameter value was specified.* +- **CS8323**: *Named argument 'argument name' is used out-of-position but is followed by an unnamed argument* - **CS8324**: *Named argument specifications must appear after all fixed arguments have been specified in a dynamic invocation.* - **CS8905**: *A function pointer cannot be called with named arguments.* @@ -156,12 +167,21 @@ Check for the following causes of these errors: - The parameter name of the named argument is incorrect. - The chosen overload doesn't have a parameter matching the named argument. - A parameter name is repeated on more than one argument. -- A positional (unnamed) argument appears after named arguments. +- An out-of-position named argument is followed by a positional argument. In C# 7.2 and later, a named argument can precede positional arguments only when it's in the parameter's correct position. Otherwise, move all positional arguments before it or reorder the named argument to its matching parameter position (**CS8323**). - Named arguments aren't allowed for array index parameters. +## Variable argument lists + +The compiler returns these errors for invalid arguments in an `__arglist` expression: + +- **CS8362**: *`__arglist` cannot have an argument of void type* +- **CS8378**: *`__arglist` cannot have an argument passed by 'in' or 'out'* + +Pass only expressions that produce a value, either by value or with `ref`. Replace a `void`-returning invocation with an expression that has a value (**CS8362**). Remove `in` or `out`, or change the called API so the argument can be passed by value or by `ref` (**CS8378**). + ## Interpolated string handler -The compiler issues the following errors when you specified an [interpolated string handler](../tokens/interpolated.md#compilation-of-interpolated-strings) incorrectly. +The compiler returns the following errors when you specify an [interpolated string handler](../tokens/interpolated.md#compilation-of-interpolated-strings) incorrectly. - **CS8943**: *null is not a valid parameter name. To get access to the receiver of an instance method, use the empty string as the parameter name.* - **CS8944**: *Not an instance method, the receiver cannot be an interpolated string handler argument.* @@ -175,13 +195,13 @@ An interpolated string handler is a pattern-based construct. It's important to g ## Caller debugging information -The compiler issues the following error on an incorrect use of the : +The compiler issues the following error when you use the incorrectly: - **CS8964**: *The `CallerArgumentExpressionAttribute` may only be applied to parameters with default values* -In addition, the compiler issues the following warnings on an incorrect use of the `CallerArgumentExpressionAttribute`: +The compiler also issues the following warnings when you use the `CallerArgumentExpressionAttribute` incorrectly: - **CS8965**: *The `CallerArgumentExpressionAttribute` applied to parameter will have no effect because it's self-referential.* - **CS8966**: *The `CallerArgumentExpressionAttribute` will have no effect because it applies to a member that is used in contexts that do not allow optional arguments* -Any parameter annotated with the `CallerArgumentExpression` attribute must have a default value. +Any parameter you annotate with the `CallerArgumentExpression` attribute must have a default value. diff --git a/docs/csharp/language-reference/compiler-messages/parsing-errors.md b/docs/csharp/language-reference/compiler-messages/parsing-errors.md index c02c814c85af0..e4b3a8a516ce8 100644 --- a/docs/csharp/language-reference/compiler-messages/parsing-errors.md +++ b/docs/csharp/language-reference/compiler-messages/parsing-errors.md @@ -2,26 +2,51 @@ title: "Resolve errors related to parsing C# code" description: "This article helps you diagnose and correct compiler errors related to parsing C# code" f1_keywords: + - "CS8180" + - "CS8300" - "CS8635" - "CS8641" helpviewer_keywords: + - "CS8180" + - "CS8300" - "CS8635" - "CS8641" -ms.date: 07/16/2026 +ms.date: 09/23/2026 ai-usage: ai-assisted --- # Resolve errors related to parsing C# code -This article covers lexer and parser-stage diagnostics for unexpected character sequences, unexpected tokens, and malformed statement structure. It isn't a general syntax-error catalog. +This article covers lexer and parser-stage diagnostics for incomplete declarations, unexpected character sequences, unexpected tokens, merge conflict markers, and malformed statement structure. It isn't a general syntax-error catalog. This article covers the following compiler errors: +- [**CS8180**](#incomplete-accessor-declarations): *{ or ; or => expected* +- [**CS8300**](#merge-conflict-markers): *Merge conflict marker encountered* - [**CS8635**](#unexpected-parser-stage-tokens-and-statements): *Unexpected character sequence '...'* - [**CS8641**](#unexpected-parser-stage-tokens-and-statements): *'else' cannot start a statement.* +## Incomplete accessor declarations + +- **CS8180**: *{ or ; or => expected* + +The parser found an incomplete property, indexer, or event accessor declaration. After an accessor such as `get`, `set`, `init`, `add`, or `remove`, provide the form allowed in that declaration: a block body (`{ ... }`), a semicolon (`;`), or an expression body (`=> expression;`). Don't assume that every form is valid in every context. For example, a semicolon-only accessor is used for an automatically implemented or abstract member. Fix this error first because parser recovery can produce more errors after the incomplete accessor. + +```csharp +class Example +{ + int Value { get } // CS8180: add a body, semicolon, or expression body. +} +``` + +## Merge conflict markers + +- **CS8300**: *Merge conflict marker encountered* + +The source file contains an unresolved version-control merge conflict marker, such as `<<<<<<<`, `=======`, or `>>>>>>>`. The compiler recognizes the marker, reports **CS8300**, and continues recovery. Content within the unresolved region can still produce more diagnostics for invalid tokens or syntax. Review both sides of every conflict, choose or combine the intended code, and remove all conflict markers before compiling. Don't merely comment out the markers or blindly keep one side, because either action can leave incorrect or duplicate code. + ## Unexpected parser-stage tokens and statements - **CS8635**: *Unexpected character sequence '...'* diff --git a/docs/csharp/language-reference/compiler-messages/preprocessor-errors.md b/docs/csharp/language-reference/compiler-messages/preprocessor-errors.md index 6293d2105c4f4..5f0b67763ba70 100644 --- a/docs/csharp/language-reference/compiler-messages/preprocessor-errors.md +++ b/docs/csharp/language-reference/compiler-messages/preprocessor-errors.md @@ -29,6 +29,7 @@ f1_keywords: - "CS7011" - "CS8097" - "CS8098" + - "CS8301" - "CS8938" - "CS8939" - "CS8996" @@ -66,6 +67,7 @@ helpviewer_keywords: - "CS7011" - "CS8097" - "CS8098" + - "CS8301" - "CS8938" - "CS8939" - "CS8996" @@ -75,7 +77,7 @@ helpviewer_keywords: - "CS9299" - "CS9314" - "CS9378" -ms.date: 09/17/2026 +ms.date: 09/23/2026 ai-usage: ai-assisted --- # Preprocessor errors and warnings @@ -109,6 +111,7 @@ The compiler generates the following errors for incorrect use of preprocessor di - [**CS7011**](#file-contains-scriptcs-directives): *#r is only allowed in scripts* - [**CS8097**](#file-contains-scriptcs-directives): *#load is only allowed in scripts* - [**CS8098**](#file-contains-scriptcs-directives): *Cannot use #load after first token in file* +- [**CS8301**](#invalid-preprocessor-symbol-names): *Invalid name for a preprocessing symbol; 'symbol name' is not a valid identifier* - [**CS8938**](#line-and-file-directive-errors): *The #line directive value is missing or out of range* - [**CS8939**](#line-and-file-directive-errors): *The #line directive end position must be greater than or equal to the start position* - [**CS8996**](#invalid-preprocessor-directive-syntax): *Raw string literals are not allowed in preprocessor directives* @@ -125,6 +128,7 @@ The compiler generates the following errors for incorrect use of preprocessor di - **CS1025**: *Single-line comment or end-of-line expected* - **CS1027**: *#endif directive expected* - **CS1028**: *Unexpected preprocessor directive* +- **CS1032**: *Cannot define/undefine preprocessor symbols after first token in file* - **CS1038**: *#endregion directive expected* - **CS1040**: *Preprocessor directives must appear as the first non-white-space character on a line* - **CS1517**: *Invalid preprocessor expression* @@ -138,7 +142,7 @@ These errors indicate that you used invalid syntax for [preprocessor directives] - Including multiline comments on directive lines (CS1025, CS1696). - Using directives in unexpected locations (CS1028). - Missing required matching directives (CS1027, CS1038). -- Not defining or undefining symbols as the first token in the file (CS1032). +- Placing a `#define` or `#undef` directive after the first token in the file (CS1032). - Not placing the directive as the first token on a line (CS1040). - Using invalid expressions in conditional compilation (CS1517). - Using raw string literals in preprocessor directives (CS8996). @@ -173,8 +177,16 @@ class Test { } **CS1032 example - `#define` and `#undef` preprocessor directives must appear before other tokens:** ```csharp -/* Comment */ -#define X // CS1032 - directive not first token in file +class Test { } +#define X // CS1032 - directive appears after the first token +``` + +To fix this error, place all `#define` and `#undef` directives before the first token in the file: + +```csharp +#define X +#undef Y +class Test { } ``` **CS1038 example - #endregion directive expected:** @@ -223,6 +235,14 @@ class Test { } To fix these errors, ensure your preprocessor directives follow the correct syntax rules described in the [preprocessor directives documentation](../preprocessor-directives.md). +## Invalid preprocessor symbol names + +- **CS8301**: *Invalid name for a preprocessing symbol; 'symbol name' is not a valid identifier* + +When you create programmatically, provide each conditional compilation symbol as one identifier-shaped name. The first character must be valid at the start of a C# identifier, and the remaining characters must be valid identifier characters. Roslyn also accepts keyword text as a symbol name, but don't add an `@` prefix. Don't include whitespace, punctuation such as `.` or `-`, an assignment such as `FEATURE=1`, or a complete conditional expression. + +A preprocessing symbol records only whether its name is defined. It doesn't store a value. Invalid names supplied through the **DefineConstants** project property or the `-define` compiler option produce **CS2029** instead; see [DefineConstants](../compiler-options/language.md#defineconstants). + ## #error and #warning directive errors - **CS1029**: *#error: 'text'* @@ -438,11 +458,26 @@ A shebang (`#!`) selects the executable for a script or file-based app. Place it ## File contains script.cs directives -The following errors indicate [script.cs](https://scriptcs.net) syntax in a compiled C# file: +The following errors indicate incorrect use or placement of C# script directives: - **CS7009**: *Cannot use #r after first token in file* - **CS7010**: *Quoted file name expected* - **CS7011**: *#r is only allowed in scripts* - **CS8097**: *#load is only allowed in scripts* +- **CS8098**: *Cannot use #load after first token in file* + +In a C# script (`.csx`), a `#load` directive after a token produces **CS8098**: + +```csharp +System.Console.WriteLine("This is the first token."); +#load "helpers.csx" // CS8098 +``` + +To fix **CS8098**, move every `#load` directive before every token in the script: + +```csharp +#load "helpers.csx" +System.Console.WriteLine("The directive precedes the first token."); +``` -These directives aren't supported in compiled C#. You must remove them or use [script.cs](http://scriptcs.net/). +In a regular C# source file (`.cs`), `#load` isn't permitted. That related condition produces **CS8097**, not **CS8098**. Remove `#load` from regular source files. diff --git a/docs/csharp/language-reference/compiler-messages/ref-modifiers-errors.md b/docs/csharp/language-reference/compiler-messages/ref-modifiers-errors.md index d67085730824f..9a38d547a209c 100644 --- a/docs/csharp/language-reference/compiler-messages/ref-modifiers-errors.md +++ b/docs/csharp/language-reference/compiler-messages/ref-modifiers-errors.md @@ -22,6 +22,7 @@ f1_keywords: - "CS8325" - "CS8326" - "CS8327" + - "CS8328" - "CS8329" - "CS8330" - "CS8331" @@ -79,6 +80,7 @@ helpviewer_keywords: - "CS8325" - "CS8326" - "CS8327" + - "CS8328" - "CS8329" - "CS8330" - "CS8331" @@ -116,14 +118,14 @@ helpviewer_keywords: - "CS9349" - "CS9350" ai-usage: ai-assisted -ms.date: 09/14/2026 +ms.date: 09/23/2026 --- # Errors and warnings associated with reference parameters, variables, and returns -The following errors can be generated when you're working with reference variables: +You might see the following errors and warnings when you work with reference variables: - [**CS0192**](#writable-reference-variables-require-a-writable-referent): *A `readonly` field cannot be used as a `ref` or `out` value (except in a constructor)* - [**CS0199**](#writable-reference-variables-require-a-writable-referent): *A `static readonly` field cannot be used as a `ref` or `out` value (except in a static constructor)* @@ -145,6 +147,7 @@ That's by design. The text closely matches the text of the compiler error / warn - [**CS8325**](#reference-variable-restrictions): *'`await`' cannot be used in an expression containing a `ref` conditional operator* - [**CS8326**](#reference-variable-restrictions): *Both conditional operator values must be ref values or neither may be a ref value* - [**CS8327**](#reference-variable-restrictions): *The expression must be of correct type to match the alternative ref value* +- [**CS8328**](#incorrect-syntax): *The parameter modifier 'modifier' cannot be used with 'modifier'* - [**CS8329**](#writable-reference-variables-require-a-writable-referent): *Cannot use variable as a `ref` or `out` value because it is a readonly variable* - [**CS8330**](#writable-reference-variables-require-a-writable-referent): *Members of variable cannot be used as a `ref` or `out` value because it is a readonly variable* - [**CS8331**](#writable-reference-variables-require-a-writable-referent): *Cannot assign to variable or use it as the right hand side of a `ref` assignment because it is a readonly variable* @@ -154,26 +157,20 @@ That's by design. The text closely matches the text of the compiler error / warn - [**CS8373**](#incorrect-syntax): *The left-hand side of a `ref` assignment must be a ref variable.* - [**CS8388**](#incorrect-syntax): *An `out` variable cannot be declared as a ref local* - [**CS8977**](#reference-variable-restrictions): *Cannot use '`ref`', '`in`', or '`out`' in the signature of a method attributed with 'UnmanagedCallersOnly'.* -- [**CS8986**](#reference-variable-restrictions): *The 'scoped' modifier of parameter doesn't match target.* -- [**CS8987**](#reference-variable-restrictions): *The 'scoped' modifier of parameter doesn't match overridden or implemented member.* +- [**CS8986**](#reference-variable-restrictions): *The 'scoped' modifier of parameter 'parameter' doesn't match target 'target'.* +- [**CS8987**](#reference-variable-restrictions): *The 'scoped' modifier of parameter 'parameter' doesn't match overridden or implemented member.* - [**CS9061**](#incorrect-syntax): *The 'scoped' modifier cannot be used with discard.* - [**CS9062**](#incorrect-syntax): *Types and aliases cannot be named 'scoped'.* - [**CS9063**](#unscoped-ref-restrictions): *UnscopedRefAttribute cannot be applied to this parameter because it is unscoped by default.* - [**CS9065**](#incorrect-syntax): *Do not use 'System.Runtime.CompilerServices.ScopedRefAttribute'. Use the 'scoped' keyword instead.* - [**CS9066**](#unscoped-ref-restrictions): *UnscopedRefAttribute cannot be applied to parameters that have a 'scoped' modifier.* - [**CS9072**](#reference-variable-restrictions): *A deconstruction variable cannot be declared as a ref local* +- [**CS9073**](#reference-variable-restrictions): *The 'scoped' modifier of parameter 'parameter' doesn't match target 'target'.* +- [**CS9074**](#reference-variable-restrictions): *The 'scoped' modifier of parameter 'parameter' doesn't match overridden or implemented member.* - [**CS9101**](#unscoped-ref-restrictions): *UnscopedRefAttribute can only be applied to struct or virtual interface instance methods and properties, and cannot be applied to constructors or init-only members.* - [**CS9102**](#unscoped-ref-restrictions): *UnscopedRefAttribute cannot be applied to an interface implementation because implemented member doesn't have this attribute.* - [**CS9104**](#reference-variable-restrictions): *A `using` statement resource of type cannot be used in async methods or async lambda expressions.* - [**CS9190**](#incorrect-syntax): *`readonly` modifier must be specified after `ref`.* -- [**CS9199**](#reference-variable-restrictions): *A `ref readonly` parameter cannot have the Out attribute.* -- [**CS9349**](#incorrect-syntax): *The 'scoped' modifier cannot come after an 'in', 'out', 'ref' or 'readonly' modifier.* -- [**CS9350**](#incorrect-syntax): *The 'modifier' modifier cannot immediately follow the 'scoped' modifier.* - -The following warnings are generated when reference variables are used incorrectly: - -- [**CS9073**](#reference-variable-restrictions): *The 'scoped' modifier of parameter doesn't match target.* -- [**CS9074**](#reference-variable-restrictions): *The 'scoped' modifier of parameter doesn't match overridden or implemented member.* - [**CS9191**](#reference-variables-require-a-referent): *The `ref` modifier for argument corresponding to `in` parameter is equivalent to `in`. Consider using `in` instead.* - [**CS9192**](#reference-variables-require-a-referent): *Argument should be passed with `ref` or `in` keyword.* - [**CS9193**](#reference-variables-require-a-referent): *Argument should be a variable because it is passed to a `ref readonly` parameter* @@ -181,14 +178,17 @@ The following warnings are generated when reference variables are used incorrect - [**CS9196**](#reference-variable-restrictions): *Reference kind modifier of parameter doesn't match the corresponding parameter in overridden or implemented member.* - [**CS9197**](#reference-variable-restrictions): *Reference kind modifier of parameter doesn't match the corresponding parameter in hidden member.* - [**CS9198**](#reference-variable-restrictions): *Reference kind modifier of parameter doesn't match the corresponding parameter in target.* +- [**CS9199**](#reference-variable-restrictions): *A `ref readonly` parameter cannot have the Out attribute.* - [**CS9200**](#reference-variable-restrictions): *A default value is specified for `ref readonly` parameter, but `ref readonly` should be used only for references. Consider declaring the parameter as `in`.* - [**CS9201**](#reference-variable-restrictions): *Ref field should be ref-assigned before use.* - [**CS9265**](#reference-variable-restrictions): *Field is never ref-assigned to, and will always have its default value (null reference)* +- [**CS9349**](#incorrect-syntax): *The 'scoped' modifier cannot come after an 'in', 'out', 'ref' or 'readonly' modifier.* +- [**CS9350**](#incorrect-syntax): *The 'modifier' modifier cannot immediately follow the 'scoped' modifier.* These errors and warnings follow these themes: - ***[Incorrect syntax](#incorrect-syntax)***: The syntax of your declaration or usage is invalid. -- ***[Language constructs where `ref` variables aren't valid](#reference-variable-restrictions)***: Some C# idioms don't allow variables. Usually this is because ref safety analysis can't be performed reliably. +- ***[Language constructs where `ref` variables aren't valid](#reference-variable-restrictions)***: Some C# idioms don't allow variables. Usually this restriction exists because ref safety analysis can't be performed reliably. - ***[Value expression used where a reference variable is needed](#reference-variables-require-a-referent)***: The expression used as a reference variable must be a variable, not a value expression. - ***[Writable reference variables referring to readonly variables](#writable-reference-variables-require-a-writable-referent)***: A reference to a readonly variable can't be passed by writable reference. @@ -196,26 +196,34 @@ This article uses the term *reference variable* as a general term for a paramete ## Incorrect syntax -These errors indicate that you're using incorrect syntax regarding reference variables: +These errors indicate that you're using incorrect syntax for reference variables: +- **CS8328**: *The parameter modifier 'modifier' cannot be used with 'modifier'* - **CS8373**: *The left-hand side of a `ref` assignment must be a ref variable.* - **CS8388**: *An `out` variable cannot be declared as a ref local.* +- **CS9061**: *The 'scoped' modifier cannot be used with discard.* +- **CS9062**: *Types and aliases cannot be named 'scoped'.* +- **CS9065**: *Do not use 'System.Runtime.CompilerServices.ScopedRefAttribute'. Use the 'scoped' keyword instead.* - **CS9190**: *`readonly` modifier must be specified after `ref`.* - **CS9349**: *The 'scoped' modifier cannot come after an 'in', 'out', 'ref' or 'readonly' modifier.* - **CS9350**: *The 'modifier' modifier cannot immediately follow the 'scoped' modifier.* To correct these errors: +- Remove or replace one of the incompatible parameter modifiers named in the diagnostic (**CS8328**). Use only one of `ref`, `in`, or `out`; don't combine `params` with a reference-passing modifier; and don't use `out` for an extension receiver. Valid compound forms include `ref readonly` and `scoped` followed by `ref`, `ref readonly`, `in`, or `out`. - Ensure the left operand of a `= ref` operator is a reference variable rather than a value expression or non-reference local. Ref assignment requires both sides to be reference variables that can create an alias to the same storage location (**CS8373**). -- When declaring reference parameters, write the modifier as `ref readonly` rather than `readonly ref`. The C# language specification requires the `ref` keyword to precede the `readonly` modifier in parameter declarations to maintain consistent syntax across all reference parameter types (**CS9190**). - Use the `ref` keyword instead of `out` when declaring local reference variables. `out` is exclusively a parameter modifier that indicates a method must assign a value before returning, whereas `ref` is the appropriate keyword for creating local variables that alias other storage locations (**CS8388**). +- Remove `scoped` from a discard declaration. A discard doesn't introduce a variable whose lifetime can be restricted (**CS9061**). +- Rename any type or alias named `scoped`, or escape the identifier as `@scoped` when that name must be preserved (**CS9062**). +- Replace an explicit `System.Runtime.CompilerServices.ScopedRefAttribute` on a parameter with the `scoped` modifier (**CS9065**). +- When declaring reference parameters, write the modifier as `ref readonly` rather than `readonly ref`. The C# language specification requires the `ref` keyword to precede the `readonly` modifier in parameter declarations to maintain consistent syntax across all reference parameter types (**CS9190**). - When you combine `scoped` with a reference modifier, place it immediately before `ref`, `in`, or `out` (**CS9349**, **CS9350**). For a `ref readonly` parameter, use `scoped ref readonly`. - Remove any other modifier immediately after `scoped`, or move it to a valid position in the parameter declaration (**CS9350**). For more information about reference variables and their syntax requirements, see [reference variables](../statements/declarations.md#reference-variables) and the [C# Language Specification](~/_csharpstandard/standard/variables.md#97-reference-variables-and-returns). ## Reference variable restrictions -The following errors indicate that a reference variable can't be used where you have one: +The following errors and warnings indicate that you can't use a reference variable in a particular context: - **CS0631**: *`ref` and `out` are not valid in this context* - **CS0767**: *Cannot inherit interface with the specified type parameters because it causes method to contain overloads which differ only on `ref` and `out`* @@ -231,25 +239,26 @@ The following errors indicate that a reference variable can't be used where you - **CS8337**: *The first parameter of a '`ref`' extension method must be a value type or a generic type constrained to struct.* - **CS8338**: *The first '`in`' or '`ref readonly`' parameter of the extension method must be a concrete (non-generic) value type.* - **CS8977**: *Cannot use '`ref`', '`in`', or '`out`' in the signature of a method attributed with 'UnmanagedCallersOnly'.* +- **CS8986**: *The 'scoped' modifier of parameter 'parameter' doesn't match target 'target'.* +- **CS8987**: *The 'scoped' modifier of parameter 'parameter' doesn't match overridden or implemented member.* - **CS9072**: *A deconstruction variable cannot be declared as a ref local* +- **CS9073**: *The 'scoped' modifier of parameter 'parameter' doesn't match target 'target'.* +- **CS9074**: *The 'scoped' modifier of parameter 'parameter' doesn't match overridden or implemented member.* - **CS9104**: *A `using` statement resource of type cannot be used in async methods or async lambda expressions.* -- **CS9199**: *A `ref readonly` parameter cannot have the Out attribute.* - -The following warnings indicate that a reference variable shouldn't be used, and might be unsafe: - - **CS9196**: *Reference kind modifier of parameter doesn't match the corresponding parameter in overridden or implemented member.* - **CS9197**: *Reference kind modifier of parameter doesn't match the corresponding parameter in hidden member.* - **CS9198**: *Reference kind modifier of parameter doesn't match the corresponding parameter in target.* +- **CS9199**: *A `ref readonly` parameter cannot have the Out attribute.* - **CS9200**: *A default value is specified for `ref readonly` parameter, but `ref readonly` should be used only for references. Consider declaring the parameter as `in`.* - **CS9201**: *Ref field should be ref-assigned before use.* - **CS9265**: *Field is never ref-assigned to, and will always have its default value (null reference)* -To correct these errors: +To correct these errors and warnings: -- Remove reference parameters from [indexers](../../programming-guide/indexers/index.md). Indexers are designed to provide array-like access syntax and the compiler can't guarantee safe lifetime tracking for references passed through indexer accessors (**CS0631**, **CS1623**). -- Remove reference parameters from [iterator methods](../../iterators.md). Iterators execute code lazily across multiple calls using state machines, and the compiler can't ensure referenced variables remain valid across yield return boundaries where execution is suspended and resumed (**CS1623**). -- Remove reference parameters from [async methods](../../asynchronous-programming/index.md). Async methods might suspend execution at await points and resume on different threads, making it impossible to guarantee that referenced variables remain valid and accessible throughout the method's execution (**CS1988**). -- Avoid using [await expressions](../operators/await.md) inside [ref conditional expressions](../operators/conditional-operator.md#conditional-ref-expression). The await operation might suspend execution and invalidate the references being selected by the conditional operator, leading to potential use of invalidated references when execution resumes (**CS8325**). +- Remove reference parameters from [indexers](../../programming-guide/indexers/index.md). Indexers provide array-like access syntax, and the compiler can't guarantee safe lifetime tracking for references passed through indexer accessors (**CS0631**, **CS1623**). +- Remove reference parameters from [iterator methods](../../iterators.md). Iterators execute code lazily across multiple calls using state machines, and the compiler can't ensure referenced variables remain valid across `yield return` boundaries where execution is suspended and resumed (**CS1623**). +- Remove reference parameters from [async methods](../../asynchronous-programming/index.md). Async methods might suspend execution at `await` points and resume on different threads, making it impossible to guarantee that referenced variables remain valid and accessible throughout the method's execution (**CS1988**). +- Avoid using [await expressions](../operators/await.md) inside [ref conditional expressions](../operators/conditional-operator.md#conditional-ref-expression). The `await` operation might suspend execution and invalidate the references being selected by the conditional operator, leading to potential use of invalidated references when execution resumes (**CS8325**). - Ensure both branches of a ref conditional operator return references or neither returns a reference, and when both are references they must be the same type. The conditional operator must produce a consistent result type that can be safely used by the calling code regardless of which branch is selected (**CS8326**, **CS8327**). - Remove default values from `ref` and `out` parameters. Reference parameters must always be provided at the call site to establish the required aliasing relationship between the parameter and an existing variable, making default values semantically meaningless (**CS1741**). - Avoid declaring an implicitly typed `out` variable in an argument list that also references that same variable. The compiler must infer the variable's type from the method signature while simultaneously validating uses of that variable within the same expression, creating a circular dependency (**CS8196**). @@ -261,6 +270,7 @@ To correct these errors: - Don't pass Windows Runtime events as reference parameters. These events follow the Windows Runtime type system, which has different lifetime and threading semantics than .NET references and doesn't support the aliasing behavior required by C# reference parameters (**CS7084**). - Remove the from `ref readonly` parameters. This attribute is designed for marshaling semantics in platform invoke scenarios where the parameter direction is outbound only, which conflicts with `ref readonly`'s guarantee that the parameter references existing data that won't be reassigned (**CS9199**). - Ensure all `ref` fields in a type are assigned either in field initializers or in all constructor code paths before the constructor completes. Uninitialized ref fields would contain invalid references that could lead to memory corruption if accessed (**CS9201**, **CS9265**). +- Match the `scoped` characteristic of every parameter between a lambda or method and its target delegate (**CS8986**, **CS9073**), and between an override or implementation and the corresponding member (**CS8987**, **CS9074**). The mismatch is an error when both signatures use the current C# 11 ref-safety rules; otherwise, it's a compatibility warning. - Match the reference kind modifiers (`ref`, `in`, `out`, `ref readonly`) between a method and its overridden base method or implemented interface method. The reference modifier is part of the method signature contract that derived types must honor to maintain substitutability and caller expectations (**CS9196**, **CS9197**, **CS9198**). - Declare parameters as `in` rather than `ref readonly` when providing default values. `ref readonly` is designed for scenarios where the caller passes a reference to an existing variable, whereas `in` parameters can accept both references and temporary copies of values, making default values meaningful (**CS9200**). @@ -268,13 +278,17 @@ For more information about where reference variables are allowed, see [Method pa ## `unscoped ref` restrictions -The `unscoped` qualifier on `ref` parameters isn't allowed in some locations: +You can't use the `unscoped` qualifier on `ref` parameters in some locations: +- **CS9063**: *UnscopedRefAttribute cannot be applied to this parameter because it is unscoped by default.* +- **CS9066**: *UnscopedRefAttribute cannot be applied to parameters that have a 'scoped' modifier.* - **CS9101**: *UnscopedRefAttribute can only be applied to struct instance or virtual interface methods and properties, and cannot be applied to constructors or init-only members.* - **CS9102**: *UnscopedRefAttribute cannot be applied to an interface implementation because implemented member doesn't have this attribute.* To correct these errors: +- Remove from a parameter that's already unscoped by default (**CS9063**). +- Remove either the `scoped` modifier or so the parameter has one consistent lifetime contract (**CS9066**). - Remove the `unscoped` modifier or the attribute from struct constructors and init-only members. These members have special initialization semantics where the compiler must ensure that any references don't outlive the initialization phase, and allowing unscoped references would violate the guarantee that initialization completes before the struct becomes fully accessible (**CS9101**). - Remove the `unscoped` modifier from interface implementation methods when the corresponding interface method doesn't have it. The unscoped characteristic affects the method's contract regarding reference lifetime guarantees, and implementations must maintain the same contract as the interface they're implementing to ensure callers can rely on consistent lifetime behavior regardless of which implementation is invoked (**CS9102**). @@ -297,14 +311,14 @@ Warnings: To correct these errors: - Store the result of a property or indexer access in a local variable before passing it as a reference parameter. [Properties](../../programming-guide/classes-and-structs/properties.md) and [indexers](../../programming-guide/indexers/index.md) are methods that return values rather than providing direct access to storage locations, and reference parameters require an actual variable with a stable memory location that can be aliased (**CS0206**, **CS1510**). -- Use the `in` modifier instead of `ref` when passing arguments to `in` parameters. While `ref` technically works due to backward compatibility, the `in` modifier more clearly expresses the intent that the argument is read-only and may be passed more efficiently as a reference without copying (**CS9191**, **CS9195**). +- Use the `in` modifier instead of `ref` when passing arguments to `in` parameters. While `ref` technically works due to backward compatibility, the `in` modifier more clearly expresses the intent that the argument is read-only and can be passed more efficiently as a reference without copying (**CS9191**, **CS9195**). - Add the appropriate reference modifier (`ref`, `in`, or `ref readonly`) when passing arguments to parameters that expect references. Omitting the modifier might cause the compiler to create a temporary copy of the value, which is inefficient and can lead to unexpected behavior if the calling code expects modifications to be reflected in the original variable (**CS9192**, **CS9193**). For more information about reference parameters and passing variables by reference, see [Method parameters](../keywords/method-parameters.md), [ref keyword](../keywords/ref.md), and the [C# Language Specification](~/_csharpstandard/standard/variables.md#97-reference-variables-and-returns). ## Writable reference variables require a writable referent -A writable reference variable requires that the referent also is writable. The following errors indicate that the variable isn't writable: +A writable reference variable requires that the referent is also writable. The following errors indicate that the variable isn't writable: - **CS0192**: *A `readonly` field cannot be used as a `ref` or `out` value (except in a constructor)* - **CS0199**: *A `static readonly` field cannot be used as a `ref` or `out` value (except in a static constructor)* diff --git a/docs/csharp/language-reference/compiler-messages/ref-safety-errors.md b/docs/csharp/language-reference/compiler-messages/ref-safety-errors.md index 93d5741e6492d..41782575cc814 100644 --- a/docs/csharp/language-reference/compiler-messages/ref-safety-errors.md +++ b/docs/csharp/language-reference/compiler-messages/ref-safety-errors.md @@ -7,6 +7,9 @@ f1_keywords: - "CS8168" - "CS8169" - "CS8345" + - "CS8348" + - "CS8349" + - "CS8350" - "CS8351" - "CS8374" - "CS9075" @@ -38,6 +41,9 @@ helpviewer_keywords: - "CS8168" - "CS8169" - "CS8345" + - "CS8348" + - "CS8349" + - "CS8350" - "CS8351" - "CS8374" - "CS9075" @@ -64,20 +70,23 @@ helpviewer_keywords: - "CS9096" - "CS9097" ai-usage: ai-assisted -ms.date: 11/21/2025 +ms.date: 09/23/2026 --- # Errors and warnings related to ref safety -The following errors can be generated when reference variable safety rules are violated: +The following errors can occur when you violate reference variable safety rules: - [**CS8166**](#returning-references-with-incompatible-scopes): *Cannot return a parameter by reference because it is not a `ref` parameter* - [**CS8167**](#returning-references-with-incompatible-scopes): *Cannot return by reference a member of parameter because it is not a `ref` or `out` parameter* - [**CS8168**](#returning-references-with-incompatible-scopes): *Cannot return local by reference because it is not a ref local* - [**CS8169**](#returning-references-with-incompatible-scopes): *Cannot return a member of local variable by reference because it is not a ref local* - [**CS8345**](#struct-member-and-field-restrictions): *Field or auto-implemented property cannot be of type unless it is an instance member of a `ref struct`.* +- [**CS8348**](#escape-scope-violations-and-conditional-operators): *Cannot use a member of result of 'member' in this context because it may expose variables referenced by parameter 'parameter name' outside of their declaration scope* +- [**CS8349**](#escape-scope-violations-and-conditional-operators): *Expression cannot be used in this context because it may indirectly expose variables outside of their declaration scope* +- [**CS8350**](#escape-scope-violations-and-conditional-operators): *This combination of arguments to 'member' is disallowed because it may expose variables referenced by parameter 'parameter name' outside of their declaration scope* - [**CS8351**](#escape-scope-violations-and-conditional-operators): *Branches of a `ref` conditional operator cannot refer to variables with incompatible declaration scopes* - [**CS8374**](#ref-assignments-with-incompatible-scopes): *Cannot ref-assign source has a narrower escape scope than destination.* - [**CS9075**](#returning-references-with-incompatible-scopes): *Cannot return a parameter by reference because it is scoped to the current method* @@ -87,7 +96,7 @@ That's by design. The text closely matches the text of the compiler error / warn - [**CS9079**](#ref-assignments-with-incompatible-scopes): *Cannot ref-assign source to destination because source can only escape the current method through a return statement.* - [**CS9096**](#ref-assignments-with-incompatible-scopes): *Cannot ref-assign source to destination because source has a wider value escape scope than destination allowing assignment through destination of values with narrower escapes scopes than source.* -The following warnings are generated when reference variable safety rules are violated: +The following warnings can occur when you violate reference variable safety rules: - [**CS9080**](#escape-scope-violations-and-conditional-operators): *Use of variable in this context may expose referenced variables outside of their declaration scope* - [**CS9081**](#escape-scope-violations-and-conditional-operators): *A result of a stackalloc expression of type in this context may be exposed outside of the containing method* @@ -109,7 +118,7 @@ The following warnings are generated when reference variable safety rules are vi ## Returning references with incompatible scopes -The compiler prevents you from returning a reference to a variable when the variable's lifetime doesn't extend beyond the method's scope. These errors occur when attempting to return by reference a parameter, local variable, or member that isn't declared with `ref` or has a scope limited to the current method. +The compiler prevents you from returning a reference to a variable when the variable's lifetime doesn't extend beyond the method's scope. These errors occur when you try to return by reference a parameter, local variable, or member that you didn't declare with `ref` or that has a scope limited to the current method. Errors: @@ -135,16 +144,16 @@ Warnings: To resolve these errors: -- Change the method signature to declare parameters with the `ref` keyword instead of passing them by value, which allows the parameter's storage location to be returned safely because the caller controls the variable's lifetime (**CS8166**, **CS8167**, **CS9087**, **CS9089**). -- For local variables, declare them as `ref` locals by assigning them from a ref-returning expression or a ref parameter, which ensures the local refers to storage with a sufficient lifetime rather than creating a new variable with method-scoped lifetime (**CS8168**, **CS8169**, **CS9091**, **CS9092**). -- When a parameter is declared with the `scoped` modifier, avoid returning it by reference because the `scoped` modifier explicitly restricts the parameter's reference from escaping the method, preventing potential dangling references (**CS9075**, **CS9076**, **CS9088**, **CS9090**). -- If you need to return a reference that comes from a `ref` parameter, use a direct `return ref` statement rather than assigning the reference to another `ref` parameter and returning that, because the compiler can only track the escape scope through direct return statements (**CS9077**, **CS9078**, **CS9094**, **CS9095**). +- Change the method signature to declare parameters with the `ref` keyword instead of passing them by value. This change allows you to return the parameter's storage location safely because the caller controls the variable's lifetime (**CS8166**, **CS8167**, **CS9087**, **CS9089**). +- For local variables, declare them as `ref` locals by assigning them from a ref-returning expression or a ref parameter. This change ensures the local refers to storage with a sufficient lifetime rather than creating a new variable with method-scoped lifetime (**CS8168**, **CS8169**, **CS9091**, **CS9092**). +- When you declare a parameter with the `scoped` modifier, avoid returning it by reference. The `scoped` modifier explicitly restricts the parameter's reference from escaping the method, preventing potential dangling references (**CS9075**, **CS9076**, **CS9088**, **CS9090**). +- If you need to return a reference that comes from a `ref` parameter, use a direct `return ref` statement rather than assigning the reference to another `ref` parameter and returning that reference. The compiler can only track the escape scope through direct return statements (**CS9077**, **CS9078**, **CS9094**, **CS9095**). For more information about ref safety rules, see the article on [ref returns](../statements/jump-statements.md#ref-returns) and the C# standard section on [ref safe contexts](~/_csharpstandard/standard/variables.md#972-ref-safe-contexts). ## Ref assignments with incompatible scopes -The compiler prevents ref assignment operations where the source variable has a narrower escape scope than the destination. A ref assignment creates a reference from the destination to the source's storage location. If the source could go out of scope before the destination, the destination would refer to invalid memory. +The compiler prevents ref assignment operations where the source variable has a narrower escape scope than the destination. A ref assignment creates a reference from the destination to the source's storage location. If the source goes out of scope before the destination, the destination refers to invalid memory. Errors: @@ -160,18 +169,21 @@ Warnings: To resolve these errors: -- Restructure your code so that the source variable in a ref assignment has an escape scope at least as wide as the destination variable, which ensures the destination reference remains valid for its entire lifetime and prevents dangling references (**CS8374**, **CS9085**). +- Restructure your code so that the source variable in a ref assignment has an escape scope at least as wide as the destination variable. This change ensures the destination reference remains valid for its entire lifetime and prevents dangling references (**CS8374**, **CS9085**). - When a variable can only escape the method through a return statement, don't assign it to `ref` variables accessed through other means. Examples include storing in fields or returning through ref parameters. Those actions violate the restriction that the source can only be used in return statements (**CS9079**, **CS9093**). -- For ref assignments involving value escape scopes, ensure the source's value escape scope isn't wider than the destination's, because a mismatch would allow you to assign narrower-scoped values through the destination reference, potentially creating references to short-lived values (**CS9096**, **CS9097**). +- For ref assignments involving value escape scopes, ensure the source's value escape scope isn't wider than the destination's. A mismatch would allow you to assign narrower-scoped values through the destination reference, potentially creating references to short-lived values (**CS9096**, **CS9097**). For more information about ref safety rules, see the article on [ref returns](../statements/jump-statements.md#ref-returns) and the C# standard section on [ref safe contexts](~/_csharpstandard/standard/variables.md#972-ref-safe-contexts). ## Escape scope violations and conditional operators -The compiler tracks how variables can escape their declaration scope through various operations. These errors occur when using variables in contexts that could expose referenced variables outside their valid lifetime, including ref conditional operators and stackalloc expressions. +The compiler tracks how variables can escape their declaration scope through various operations. These errors occur when you use variables in contexts that could expose referenced variables outside their valid lifetime, including `ref` conditional operators and `stackalloc` expressions. Errors: +- **CS8348**: *Cannot use a member of result of 'member' in this context because it may expose variables referenced by parameter 'parameter name' outside of their declaration scope* +- **CS8349**: *Expression cannot be used in this context because it may indirectly expose variables outside of their declaration scope* +- **CS8350**: *This combination of arguments to 'member' is disallowed because it may expose variables referenced by parameter 'parameter name' outside of their declaration scope* - **CS8351**: *Branches of a `ref` conditional operator cannot refer to variables with incompatible declaration scopes* Warnings: @@ -182,9 +194,11 @@ Warnings: To resolve these errors: -- Modify the ref conditional operator (the `?:` operator with `ref` returns) so that both the true and false branches refer to variables that have compatible declaration scopes, which means both variables must have lifetimes that extend to at least the same scope level, preventing the conditional expression from potentially returning a reference that becomes invalid (**CS8351**, **CS9086**). -- When using variables in expressions or method calls, ensure the context doesn't allow referenced variables to escape beyond their declaration scope, which typically means avoiding passing scoped variables to methods or expressions where they might be captured or stored beyond their intended lifetime (**CS9080**). -- For stackalloc expressions, avoid assigning the result to variables or using it in contexts where the stack-allocated memory could be accessed outside the containing method, because stack-allocated memory is automatically freed when the method returns and accessing it afterward results in undefined behavior (**CS9081**). +- For a member access on a call result or another expression that can carry references, don't use the value in a context where those references could outlive the parameter or local from which they were derived. Depending on the API contract, keep the use within its safe scope, pass storage with a sufficiently wide lifetime, or change the API signature, such as adding `scoped` to a parameter when the method doesn't allow its references to escape (**CS8348**, **CS8349**). +- For a disallowed combination of call arguments, ensure that an argument with a narrower safe scope can't be stored in another argument or the receiver with a wider scope. Depending on the API contract, use arguments with compatible lifetimes, separate the operations, or add an appropriate `scoped` modifier to a parameter that doesn't allow references to escape (**CS8350**). +- Modify the `ref` conditional operator (the `?:` operator with `ref` returns) so that both the true and false branches refer to variables that have compatible declaration scopes. Both variables must have lifetimes that extend to at least the same scope level, preventing the conditional expression from potentially returning a reference that becomes invalid (**CS8351**, **CS9086**). +- When using variables in expressions or method calls, ensure the context doesn't allow referenced variables to escape beyond their declaration scope. Typically, avoid passing scoped variables to methods or expressions where they might be captured or stored beyond their intended lifetime (**CS9080**). +- For `stackalloc` expressions, avoid assigning the result to variables or using it in contexts where the stack-allocated memory could be accessed outside the containing method. The method automatically frees stack-allocated memory when it returns, and accessing it afterward results in undefined behavior (**CS9081**). For more information, see the article on [ref returns](../statements/jump-statements.md#ref-returns), the article on [memory usage](../../../standard/memory-and-spans/memory-t-usage-guidelines.md), and the C# standard section on [ref safe contexts](~/_csharpstandard/standard/variables.md#972-ref-safe-contexts). diff --git a/docs/csharp/language-reference/compiler-messages/throwing-and-catching-exceptions.md b/docs/csharp/language-reference/compiler-messages/throwing-and-catching-exceptions.md new file mode 100644 index 0000000000000..2465f146608d1 --- /dev/null +++ b/docs/csharp/language-reference/compiler-messages/throwing-and-catching-exceptions.md @@ -0,0 +1,71 @@ +--- +title: "Resolve errors and warnings when throwing and catching exceptions" +description: "Learn about C# compiler errors and warnings related to throwing and catching exceptions." +f1_keywords: + - "CS8359" + - "CS8360" +helpviewer_keywords: + - "CS8359" + - "CS8360" +ms.date: 09/23/2026 +ai-usage: ai-assisted +--- +# Resolve errors and warnings when throwing and catching exceptions + +This article covers compiler diagnostics related to throwing and catching exceptions. The following warnings are generated when an exception filter is a constant `false`: + + + +- [**CS8359**](#remove-a-constant-false-exception-filter): *Filter expression is a constant 'false', consider removing the catch clause* +- [**CS8360**](#remove-a-constant-false-exception-filter): *Filter expression is a constant 'false', consider removing the try-catch block* + +## Remove a constant false exception filter + +- **CS8359**: *Filter expression is a constant 'false', consider removing the catch clause* +- **CS8360**: *Filter expression is a constant 'false', consider removing the try-catch block* + +A `catch` clause with a filter that is always `false` never handles an exception. The compiler reports **CS8360** when the `try` statement has exactly one `catch` clause and no `finally` clause. In that case, the entire `try`-`catch` statement is ineffective. The compiler reports **CS8359** when the `try` statement has another `catch` clause or a `finally` clause. + +The following example produces **CS8359** on the filter because another `catch` clause can handle an exception. The compiler also reports unreachable code in the constant-false handler: + +```csharp +using System; +using System.IO; + +try +{ + Console.WriteLine(File.ReadAllText("data.txt")); +} +catch (InvalidOperationException ex) when (false) // CS8359 +{ + Console.Error.WriteLine(ex.Message); +} +catch (IOException ex) +{ + Console.Error.WriteLine(ex.Message); +} +``` + +Remove the constant-false `catch` clause. If the clause should handle some exceptions, replace the constant expression with a meaningful runtime condition. + +The following example produces **CS8360** on the filter because the constant-false filter is on the only `catch` clause and the statement has no `finally` clause. The compiler also reports unreachable code in the handler: + +```csharp +using System; +using System.IO; + +try +{ + Console.WriteLine(File.ReadAllText("data.txt")); +} +catch (InvalidOperationException ex) when (false) // CS8360 +{ + Console.Error.WriteLine(ex.Message); +} +``` + +Remove the `try`-`catch` statement while preserving the statements from the `try` block. If the handler is required conditionally, replace the constant filter with a meaningful runtime condition. + +For more information, see [Advantages of exception filters](../statements/exception-handling-statements.md#advantages-of-exception-filters). diff --git a/docs/csharp/language-reference/toc.yml b/docs/csharp/language-reference/toc.yml index 823f3a3459c9d..89cac1a4ba100 100644 --- a/docs/csharp/language-reference/toc.yml +++ b/docs/csharp/language-reference/toc.yml @@ -471,33 +471,34 @@ items: - name: C# compiler messages href: ./compiler-messages/index.md items: - - name: Invalid command-line options + - name: Compiler options and build configuration href: ./compiler-messages/invalid-build-command-line.md displayName: > - command line, msbuild, dotnet build, csc, + command line, msbuild, dotnet build, csc, Roslyn API, parse options, emit options, CS0006, CS0007, CS0016, CS1564, CS1616, CS1668, CS1719, CS1773, CS2008, CS2019, CS2029, CS2032, CS2036, CS2038, CS2039, CS2040, CS2041, CS2042, CS2043, CS2044, - CS2045, CS2046, CS3012, CS3013, CS7038, CS8751, CS8771, CS8772, CS9400 + CS2045, CS2046, CS3012, CS3013, CS7038, CS8111, CS8113, CS8190, CS8191, CS8202, + CS8308, CS8309, CS8357, CS8751, CS8771, CS8772, CS9400 - name: Preprocessor errors href: ./compiler-messages/preprocessor-errors.md displayName: > CS1024, CS1025, CS1027, CS1028, CS1029, CS1030, CS1032, CS1038, CS1040, CS1517, CS1560, CS1576, CS1578, CS1633, CS1634, CS1635, CS1691, CS1692, CS1694, CS1695, - CS1696, CS1709, CS7009, CS7010, CS7011, CS8097, CS8098, CS8938, CS8939, CS8996, - CS9028, CS9297, CS9298, CS9299, CS9314, CS9378 + CS1696, CS1709, CS7009, CS7010, CS7011, CS8097, CS8098, CS8301, CS8938, CS8939, + CS8996, CS9028, CS9297, CS9298, CS9299, CS9314, CS9378 - name: Parsing C# code href: ./compiler-messages/parsing-errors.md displayName: > parser, lexer, unexpected character, else statement, - CS8635, CS8641 + CS8180, CS8300, CS8635, CS8641 - name: Attribute declaration and usage href: ./compiler-messages/attribute-usage-errors.md displayName: > CS0181, CS0243, CS0404, CS0415, CS0416, CS0447, CS0577, CS0578, CS0579, CS0582, CS0592, CS0609, CS0616, CS0625, CS0629, CS0636, CS0637, CS0641, CS0646, CS0647, CS0653, CS0657, CS0658, CS0668, CS0685, CS0735, CS0739, CS1608, CS1614, CS1618, - CS1667, CS1689, CS7014, CS7046, CS7047, CS7067, CS8423, CS8783, CS8959, CS8960, - CS8961, CS8962, CS8963, CS8968, CS8970, CS9331, CS9351 + CS1667, CS1689, CS7014, CS7046, CS7047, CS7067, CS8335, CS8336, CS8423, CS8783, + CS8959, CS8960, CS8961, CS8962, CS8963, CS8968, CS8970, CS9331, CS9351 - name: Feature or version missing href: ./compiler-messages/feature-version-errors.md displayName: > @@ -507,13 +508,14 @@ items: CS8652, CS8701, CS8702, CS8703, CS8704, CS8706, CS8707, CS8773, CS8830, CS8831, CS8888, CS8889, CS8890, CS8891, CS8904, CS8912, CS8919, CS8929, CS8936, CS8957, CS8967, CS9014, CS9015, CS9016, CS9017, CS9041, CS9058, CS9064, CS9103, CS9171, - CS9194, CS9202, CS9204, CS9240, CS9260, CS9268, CS9269, CS9271, CS9327, CS9328, - CS9346, CS9352, CS9399 + CS9194, CS9202, CS9204, CS9211, CS9240, CS9260, CS9268, CS9269, CS9271, CS9327, + CS9328, CS9346, CS9352, CS9399 - name: Assembly references href: ./compiler-messages/assembly-references.md displayName: > - CS0012, CS0234, CS0246, CS0400, CS1068, CS1069, CS1070, CS1704, CS1683, CS1714, - CS1760, CS7008, CS7068, CS7069, CS7071, CS7079, CS8090, CS8203, CS9286 + CS0012, CS0234, CS0246, CS0400, CS1068, CS1069, CS1070, CS1683, CS1704, CS1714, + CS1760, CS7008, CS7068, CS7069, CS7071, CS7079, CS8090, CS8203, CS8206, CS8356, + CS9286 - name: Program entry point href: ./compiler-messages/entry-point-errors.md displayName: > @@ -583,8 +585,9 @@ items: href: ./compiler-messages/parameter-argument-mismatch.md displayName: > CS0182, CS0591, CS0599, CS0617, CS0633, CS0643, CS0655, CS0839, CS1016, CS1739, - CS1740, CS1742, CS1744, CS1746, CS7036, CS7067, CS8196, CS8324, CS8861, CS8905, - CS8943, CS8944, CS8945, CS8948, CS8949, CS8950, CS8951, CS8964, CS8965, CS8966 + CS1740, CS1742, CS1744, CS1746, CS7036, CS7067, CS8323, CS8324, CS8362, CS8378, + CS8905, CS8943, CS8944, CS8945, CS8948, CS8949, CS8950, CS8951, CS8964, CS8965, + CS8966 - name: Deconstruction, discards, and out variables href: ./compiler-messages/deconstruction-errors.md displayName: > @@ -628,18 +631,18 @@ items: ref parameters, CS0192, CS0199, CS0206, CS0631, CS0767, CS1510, CS1605, CS1623, CS1649, CS1651, CS1655, CS1657, CS1741, CS1939, CS1988, CS7084, CS8196, CS8325, CS8326, CS8327, - CS8329, CS8330, CS8331, CS8332, CS8337, CS8338, CS8373, CS8388, CS8977, CS8986, - CS8987, CS9061, CS9062, CS9063, CS9065, CS9066, CS9072, CS9073, CS9074, CS9101, - CS9102, CS9104, CS9190, CS9191, CS9192, CS9193, CS9195, CS9196, CS9197, CS9198, - CS9199, CS9200, CS9201, CS9265, - CS9349, CS9350 + CS8328, CS8329, CS8330, CS8331, CS8332, CS8337, CS8338, CS8373, CS8388, CS8977, + CS8986, CS8987, CS9061, CS9062, CS9063, CS9065, CS9066, CS9072, CS9073, CS9074, + CS9101, CS9102, CS9104, CS9190, CS9191, CS9192, CS9193, CS9195, CS9196, CS9197, + CS9198, CS9199, CS9200, CS9201, CS9265, CS9349, CS9350 - name: Ref safety href: ./compiler-messages/ref-safety-errors.md displayName: > ref safety, - CS8166, CS8167, CS8168, CS8169, CS8345, CS8351, CS8374, CS9075, CS9076, CS9077, - CS9078, CS9079, CS9080, CS9081, CS9082, CS9083, CS9084, CS9085, CS9086, CS9087, - CS9088, CS9089, CS9090, CS9091, CS9092, CS9093, CS9094, CS9095, CS9096, CS9097 + CS8166, CS8167, CS8168, CS8169, CS8345, CS8348, CS8349, CS8350, CS8351, CS8374, + CS9075, CS9076, CS9077, CS9078, CS9079, CS9080, CS9081, CS9082, CS9083, CS9084, + CS9085, CS9086, CS9087, CS9088, CS9089, CS9090, CS9091, CS9092, CS9093, CS9094, + CS9095, CS9096, CS9097 - name: ref struct types href: ./compiler-messages/ref-struct-errors.md displayName: > @@ -663,6 +666,11 @@ items: displayName: > break, continue, goto, return, labeled break, labeled continue, CS0126, CS0127, CS0139, CS0153, CS0159, CS0161, CS0163, CS0469, CS9393, CS9394 + - name: Throwing and catching exceptions + href: ./compiler-messages/throwing-and-catching-exceptions.md + displayName: > + throw, catch, exception filter, catch filter, + CS8359, CS8360 - name: Extension declarations href: ./compiler-messages/extension-declarations.md displayName: > @@ -718,9 +726,10 @@ items: displayName: > CS0022, CS0178, CS0248, CS0251, CS0270, CS0611, CS0623, CS0650, CS0719, CS0747, CS0820, CS0826, CS0846, CS1062, CS1063, CS1064, CS1552, CS1586, CS1920, CS1921, - CS1925, CS1950, CS1954, CS3007, CS3016, CS9174, CS9176, CS9185, CS9186, CS9187, - CS9188, CS9203, CS9208, CS9209, CS9210, CS9212, CS9213, CS9214, CS9215, CS9222, - CS9332, CS9354, CS9355, CS9356, CS9357, CS9358, CS9359 + CS1922, CS1925, CS1950, CS1954, CS3007, CS3016, CS8346, CS8353, CS8381, + CS9174, CS9176, CS9185, CS9186, CS9187, CS9188, CS9203, CS9208, CS9209, CS9210, + CS9212, CS9213, CS9214, CS9215, CS9221, CS9222, CS9332, CS9354, CS9355, CS9356, + CS9357, CS9358, CS9359 - name: Inline arrays href: ./compiler-messages/inline-array-errors.md displayName: > @@ -748,9 +757,9 @@ items: - name: Delegate and function pointer declarations href: ./compiler-messages/delegate-function-pointer-diagnostics.md displayName: > - CS0059, CS0123, CS0148, CS0410, CS0644, CS1599, CS1958, CS8755, CS8756, CS8757, - CS8758, CS8759, CS8786, CS8787, CS8788, CS8789, CS8806, CS8807, CS8808, CS8809, - CS8811, CS8909, CS8911 + CS0059, CS0123, CS0148, CS0410, CS0644, CS1599, CS1958, CS8189, CS8755, CS8756, + CS8757, CS8758, CS8759, CS8786, CS8787, CS8788, CS8789, CS8806, CS8807, CS8808, + CS8809, CS8811, CS8909, CS8911 - name: Overload resolution href: ./compiler-messages/overload-resolution.md displayName: > @@ -761,10 +770,10 @@ items: href: ./compiler-messages/expression-tree-restrictions.md displayName: > CS0765, CS0831, CS0832, CS0834, CS0835, CS0838, CS0845, CS0853, CS0854, CS0855, - CS1944, CS1945, CS1946, CS1951, CS1952, CS1963, CS2037, CS7053, CS8072, CS8074, - CS8075, CS8110, CS8122, CS8143, CS8144, CS8153, CS8155, CS8198, CS8207, CS8382, - CS8514, CS8640, CS8642, CS8790, CS8791, CS8792, CS8810, CS8849, CS8927, CS8952, - CS9170, CS9175, CS9307, CS9369 + CS1944, CS1945, CS1946, CS1951, CS1952, CS1963, CS1989, CS2037, CS7053, CS8072, + CS8074, CS8075, CS8110, CS8122, CS8143, CS8144, CS8153, CS8155, CS8188, CS8198, + CS8207, CS8382, CS8514, CS8640, CS8642, CS8790, CS8791, CS8792, CS8810, CS8849, + CS8927, CS8952, CS9170, CS9175, CS9226, CS9296, CS9307, CS9369 - name: Using directives and namespace declarations href: ./compiler-messages/using-directive-errors.md displayName: > @@ -1490,8 +1499,6 @@ items: href: ../misc/cs1917.md - name: CS1918 href: ../misc/cs1918.md - - name: CS1922 - href: ../misc/cs1922.md - name: CS1926 href: ./compiler-messages/cs1926.md - name: CS1930 @@ -1614,8 +1621,6 @@ items: href: ./compiler-messages/cs8333.md - name: CS8334 href: ./compiler-messages/cs8334.md - - name: CS8346 - href: ./compiler-messages/cs8346.md - name: CS8347 href: ./compiler-messages/cs8347.md - name: CS8352 diff --git a/docs/csharp/misc/cs1922.md b/docs/csharp/misc/cs1922.md deleted file mode 100644 index ca34f380e2052..0000000000000 --- a/docs/csharp/misc/cs1922.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -description: "Learn more about: Compiler Error CS1922" -title: "Compiler Error CS1922" -ms.date: 07/20/2015 -f1_keywords: - - "CS1922" -helpviewer_keywords: - - "CS1922" -ms.assetid: a4098a25-6581-4966-b61d-318cd12f76d3 ---- - -# Compiler Error CS1922 - -Collection initializer requires its type 'type' to implement System.Collections.IEnumerable. - -In order to use a collection initializer with a type, the type must implement `IEnumerable`. This error can occur if you accidentally use collection initializer syntax when you meant to use an object initializer. - -## To correct this error - -- If the type does not represent a collection, use object initializer syntax instead of collection initializer syntax. - -- If the type does represent a collection, modify it to implement `IEnumerable` before you can use collection initializers to initialize objects of that type. - -- If the type represents a collection and you do not have access to the source code, just initialize its elements by using their class constructors or other initialization methods. - -## Example - -The following code produces CS1922: - -```csharp -// cs1922.cs -public class Test -{ - public static void Main() - { - // Collection initializer. - var tc = new TestClass {1,"hello"} ; // CS1922 - - // Object initializer. - var tc2 = new TestClass { memberA = 1, memberB = "hello" }; // OK - } -} - -public class TestClass -{ - public int memberA { get; set; } - public string memberB { get; set; } -} -``` - -## See also - -- [Object and Collection Initializers](../programming-guide/classes-and-structs/object-and-collection-initializers.md) diff --git a/docs/csharp/misc/sorry-we-don-t-have-specifics-on-this-csharp-error.md b/docs/csharp/misc/sorry-we-don-t-have-specifics-on-this-csharp-error.md index ea1dd27338184..f18e621e92501 100644 --- a/docs/csharp/misc/sorry-we-don-t-have-specifics-on-this-csharp-error.md +++ b/docs/csharp/misc/sorry-we-don-t-have-specifics-on-this-csharp-error.md @@ -154,41 +154,6 @@ f1_keywords: - "CS8104" - "CS8105" - "CS8106" - - "CS8111" - - "CS8113" - # C# 7.0 diagnostics - - "CS8180" - - "CS8188" - - "CS8189" - - "CS8190" - - "CS8191" - # C# 7.0 diagnostics - - "CS8202" - - "CS8205" - - "CS8206" - # C# 7.1 diagnostics - - "CS8300" - - "CS8301" - - "CS8305" - - "CS8308" - - "CS8309" - # C# 7.2 diagnostics - - "CS8323" - - "CS8328" - - "CS8335" - - "CS8336" - - "CS8348" - - "CS8349" - - "CS8350" - - "CS8353" - - "CS8356" - - "CS8357" - - "CS8359" - - "CS8360" - - "CS8362" - # C# 7.3 diagnostics - - "CS8378" - - "CS8381" helpviewer_keywords: - "errors [C#], additional information" --- From 26d2cfe2023de3fcdaccaea259ccdbb92bc8a673 Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Fri, 25 Sep 2026 09:49:08 -0400 Subject: [PATCH 24/24] More pattern fundamentals (#56113) * First run. Scenarios need work * A better second draft. * interim checkin * 3rd draft * third draft * 3rd draft. * Final review * Fix the snippet build * Update docs/csharp/fundamentals/patterns/list-patterns.md Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --------- Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --- .../fundamentals/expressions/operators.md | 2 + .../fundamentals/patterns/list-patterns.md | 68 ++++++++++++++ .../fundamentals/patterns/pattern-matching.md | 17 ++-- .../patterns/property-positional-patterns.md | 78 ++++++++++++++++ .../patterns/relational-logical-patterns.md | 93 +++++++++++++++++++ .../snippets/patterns/ListPatterns.cs | 42 +++++++++ .../patterns/snippets/patterns/Program.cs | 3 + .../patterns/PropertyPositionalPatterns.cs | 91 ++++++++++++++++++ .../patterns/RelationalLogicalPatterns.cs | 67 +++++++++++++ docs/csharp/toc.yml | 6 ++ 10 files changed, 461 insertions(+), 6 deletions(-) create mode 100644 docs/csharp/fundamentals/patterns/list-patterns.md create mode 100644 docs/csharp/fundamentals/patterns/property-positional-patterns.md create mode 100644 docs/csharp/fundamentals/patterns/relational-logical-patterns.md create mode 100644 docs/csharp/fundamentals/patterns/snippets/patterns/ListPatterns.cs create mode 100644 docs/csharp/fundamentals/patterns/snippets/patterns/PropertyPositionalPatterns.cs create mode 100644 docs/csharp/fundamentals/patterns/snippets/patterns/RelationalLogicalPatterns.cs diff --git a/docs/csharp/fundamentals/expressions/operators.md b/docs/csharp/fundamentals/expressions/operators.md index 70deeda36e76d..9b20b385deefa 100644 --- a/docs/csharp/fundamentals/expressions/operators.md +++ b/docs/csharp/fundamentals/expressions/operators.md @@ -69,6 +69,8 @@ Relational operators compare two values and return a `bool`. Relational operators work on all numeric types and `char`. For `char`, comparison uses the character's numeric Unicode code point value, not any alphabetical or domain-specific ordering. In the grade example above, `'B'` is greater than or equal to `'A'` because `'B'` has Unicode value 66 and `'A'` has Unicode value 65 — the *numbers* determine the comparison, not the meaning of the letter grades. +The same symbols can form [relational patterns](../patterns/relational-logical-patterns.md) in an `is` expression or `switch`. For example, `temperature < 0` is a relational expression that returns a `bool`, while `temperature is < 0` applies the relational pattern `< 0` to the value of `temperature`. + ## Equality operators `==` and `!=` check whether two values are equal or not. `!=` is `true` when the operands are **not** equal, and `false` when they are. diff --git a/docs/csharp/fundamentals/patterns/list-patterns.md b/docs/csharp/fundamentals/patterns/list-patterns.md new file mode 100644 index 0000000000000..6309af77deb8f --- /dev/null +++ b/docs/csharp/fundamentals/patterns/list-patterns.md @@ -0,0 +1,68 @@ +--- +title: "List and slice patterns" +description: Learn how C# list patterns describe a sequence's shape through its element count, ordered positions, matched values, and slices. +ms.date: 09/24/2026 +ms.topic: concept-article +ai-usage: ai-assisted +--- + +# List and slice patterns + +> [!TIP] +> This article is part of the **Fundamentals** section for developers who already know at least one programming language and are learning C#. Start with the [pattern matching overview](pattern-matching.md) if patterns are new to you. For complete supported-type and language rules, see [list patterns](../../language-reference/operators/patterns.md#list-patterns) in the language reference. + +A sequence's *shape* is the set of observable properties that a pattern requires. These properties can include the number of elements, requirements written for every element or for a sequence of elements as a whole, and marker values at specific indexes. For example, a shape might require exactly two elements with `"Name"` at index 0, or it might require a first marker, a last marker, and a nonempty sequence between them. + +A *list pattern* describes a shape by combining an element-count requirement with nested patterns at ordered positions. It tests only the requirements written in the pattern: An element subpattern tests its corresponding element, while a *slice pattern* can allow or test a sequence of otherwise unmatched elements. You can use these parts to match an exact count and marker values, capture values at fixed positions, allow an unmatched middle, or apply a nested pattern to that middle. + +Choose a list pattern when the input's compile-time type provides a `Length` or `Count` property and indexed element access, which retrieves an element by its position, as in `input[index]`. Arrays, `List`, strings, and spans are common examples. The compiler determines eligibility from the variable's declared, compile-time type because it must resolve these required members before the program runs. The interface by itself provides enumeration instead of those members, even when the runtime object is an indexable collection. + +List patterns use a length or count and indexed element access instead of enumeration. For common built-in types, matching can check only the positions named by the pattern rather than iterate through every element. The cost of those operations depends on the input type. Iterating a long collection can take time, so use a loop or LINQ when the decision requires examining an arbitrary number of elements rather than specific positions. + +## Match an exact shape + +The following method recognizes a two-column header: + +:::code language="csharp" source="snippets/patterns/ListPatterns.cs" ID="ExactListPattern"::: + +The `columns` expression is the pattern input. `["Name", "Score"]` contains two constant patterns. An exact list pattern omits a slice pattern, requires exactly two elements, and applies each nested pattern to the element at the same index. This pattern describes a shape with an exact count and two marker values: `"Name"` at index 0 and `"Score"` at index 1. Nested element patterns are optional: The empty list pattern `[]` describes, and matches, a sequence with no elements. + +Choose a list pattern when the shape combines an element count with requirements at ordered positions. If only the number of elements matters, a `Length` or `Count` property pattern, such as `items is { Count: 0 }`, states that intent more directly. + +## Use a discard to match any element value + +The following method reads the winner and third-place finisher from a three-name finishing order: + +:::code language="csharp" source="snippets/patterns/ListPatterns.cs" ID="CaptureElements"::: + +The `var winner` and `var thirdPlace` patterns each declare a variable. When the list pattern matches, C# assigns the matched element value at that position to the corresponding variable, so the result can use `winner` and `thirdPlace`. The discard pattern `_` accepts the second element and discards its value. This shape requires exactly three elements and gives the first and third positions specific meaning, but it doesn't require particular values at any position. + +Choose this form when fixed positions have stable meaning. Use a loop or LINQ when you need to inspect an arbitrary number of elements, transform a sequence, search throughout it, or perform aggregation. + +## Allow remaining elements with a slice pattern + +In this simplified example, a command line can start with `--verbose` and contain other arguments, and is assumed to end with the input file name. The following method recognizes shapes with a file name in the last position and captures that value: + +:::code language="csharp" source="snippets/patterns/ListPatterns.cs" ID="SlicePattern"::: + +The *slice pattern* `..` allows zero or more remaining elements between the first and last element patterns. A list pattern can contain at most one slice pattern. The first switch arm describes a shape with at least two elements: the marker `"--verbose"` at index 0, a file name in the last position, and any number of unmatched arguments between them. The standalone slice doesn't test those middle arguments. The second arm accepts any nonempty shape and captures its last element, while the empty pattern handles a sequence with no elements. + +A slice can appear at the beginning, middle, or end of a list pattern. Use it when a variable-length sequence is part of the shape but only the surrounding positions need element tests. Use ordinary iteration when every element needs processing. + +## Apply a pattern to a slice + +You can apply another pattern to the part matched by `..`. The following method tests whether an array starts with `"BEGIN"`, ends with `"END"`, and has at least one element between them: + +:::code language="csharp" source="snippets/patterns/ListPatterns.cs" ID="SliceSubpattern"::: + +The outer pattern first requires the marker `"BEGIN"` at index 0 and `"END"` at the last index. The property pattern `{ Length: > 0 }` then adds a requirement for the sequence matched by the slice: It must contain at least one element. Together, these requirements describe the complete shape. The pattern doesn't test the values of the elements inside the slice. + +Use a slice subpattern only when the middle portion itself needs a test or capture. If only boundary elements matter, plain `..` is simpler. + +## See also + +- [Pattern matching overview](pattern-matching.md) +- [Property and positional patterns](property-positional-patterns.md) +- [List pattern reference](../../language-reference/operators/patterns.md#list-patterns) +- [Arrays](../../language-reference/builtin-types/arrays.md) +- [Use a `foreach` statement to iterate through a collection](../statements/collections.md) diff --git a/docs/csharp/fundamentals/patterns/pattern-matching.md b/docs/csharp/fundamentals/patterns/pattern-matching.md index e7d4d8e09ffd6..3cf488976f1ab 100644 --- a/docs/csharp/fundamentals/patterns/pattern-matching.md +++ b/docs/csharp/fundamentals/patterns/pattern-matching.md @@ -21,11 +21,13 @@ You can use a pattern in three contexts: - In a `case` label of a `switch` statement. - In an arm of a `switch` expression. -Patterns are often clearer than a sequence of comparison statements because each branch describes the data it handles. For example, the following method uses a `switch` expression to choose a delivery message: +Patterns test one evaluated input against types, constants, or a shape that can contain nested patterns. A Boolean condition can also compare two independently evaluated expressions whose values aren't constants. When either form can express the same test, choose the form that's easier to read. + +For example, the following method uses a `switch` expression to choose a delivery message: :::code language="csharp" source="snippets/patterns/Overview.cs" ID="SwitchExpressionOverview"::: -Recursive patterns have their own input expressions. In `StandardDelivery { Days: <= 2 }`, the outer pattern receives the `delivery` expression. The recursive `<= 2` pattern receives the `Days` property expression from the matched `StandardDelivery` object. +Property patterns can include an outer type test and nested patterns, but neither is required in every property pattern. In `StandardDelivery { Days: <= 2 }`, the outer pattern receives the `delivery` expression and tests its type. The `Days` property expression then becomes the input to the nested relational pattern `<= 2`. The expression before `switch` is the input expression. Each line inside the braces is a *switch arm*. The pattern appears before `=>`, and the result appears after it. C# evaluates the input expression, then selects the first arm, in text order, whose pattern matches and whose optional `when` guard is `true`. The optional `when` guard is an additional Boolean condition written after the pattern. The preceding example showed the following patterns: @@ -79,17 +81,20 @@ C# includes patterns for common kinds of data tests: | --- | --- | | [Declaration, constant, and `var` patterns](declaration-constant-var-patterns.md) | A run-time type, a specific constant value, or any value that you want to capture | | [Type patterns](type-patterns.md) | A run-time type without declaring a variable | -| Property and positional patterns | Properties, fields, or deconstructed values | -| Relational and logical patterns | Comparisons and combinations such as `and`, `or`, and `not` | -| List patterns | The values and shape of a list or array | +| [Property and positional patterns](property-positional-patterns.md) | Properties, fields, or deconstructed values | +| [Relational, logical, and parenthesized patterns](relational-logical-patterns.md) | Comparisons and combinations such as `and`, `or`, and `not` | +| [List and slice patterns](list-patterns.md) | The values and shape of a supported sequence | | [Discard patterns and discards](discards.md) | Any remaining value, or a value your code intentionally ignores | -The Fundamentals articles linked in the table provide focused coverage of the categories currently documented in this section. For complete syntax and examples for all pattern categories, see the [patterns reference](../../language-reference/operators/patterns.md). +The linked Fundamentals articles explain when to choose each category. For complete syntax and examples, see the [patterns reference](../../language-reference/operators/patterns.md). ## See also - [Declaration, constant, and `var` patterns](declaration-constant-var-patterns.md) - [Type patterns](type-patterns.md) +- [Property and positional patterns](property-positional-patterns.md) +- [Relational, logical, and parenthesized patterns](relational-logical-patterns.md) +- [List and slice patterns](list-patterns.md) - [Discards](discards.md) - [Patterns reference](../../language-reference/operators/patterns.md) - [`switch` expression reference](../../language-reference/operators/switch-expression.md) diff --git a/docs/csharp/fundamentals/patterns/property-positional-patterns.md b/docs/csharp/fundamentals/patterns/property-positional-patterns.md new file mode 100644 index 0000000000000..2ae70a69236af --- /dev/null +++ b/docs/csharp/fundamentals/patterns/property-positional-patterns.md @@ -0,0 +1,78 @@ +--- +title: "Property and positional patterns" +description: Learn when to use C# property patterns to test named members and positional patterns to test ordered values. +ms.date: 09/24/2026 +ms.topic: concept-article +ai-usage: ai-assisted +--- + +# Property and positional patterns + +> [!TIP] +> This article is part of the **Fundamentals** section for developers who already know at least one programming language and are learning C#. Start with the [pattern matching overview](pattern-matching.md) if patterns are new to you. For complete language rules, see [property patterns](../../language-reference/operators/patterns.md#property-pattern) and [positional patterns](../../language-reference/operators/patterns.md#positional-pattern) in the language reference. + +Property and positional patterns both test parts of a value. The difference is how they identify those parts: + +- A *property pattern* names the properties or fields to test. +- A *positional pattern* identifies values by their order. + +A *deconstruction* exposes an ordered set of component values. A tuple already has an element order; see [deconstruct tuples](../types/tuples.md#deconstruct-tuples). For another type, a [`Deconstruct` method](../functional/deconstruct.md#user-defined-types) defines which component values are exposed and their order. + +## Compare names and positions + +The following property pattern tests two named properties of a weather reading, with temperature values in degrees Celsius: + +:::code language="csharp" source="snippets/patterns/PropertyPositionalPatterns.cs" ID="PropertyPattern"::: + +The following positional pattern tests a signal value followed by a Boolean value: + +:::code language="csharp" source="snippets/patterns/PropertyPositionalPatterns.cs" ID="TuplePattern"::: + +The property pattern identifies its inputs by the names `TemperatureC` and `HumidityPercent`. The crossing code creates a tuple from the separate `signal` and `crossingIsClear` values. The tuple pattern then identifies those values by order: `signal` first and `crossingIsClear` second. A positional pattern is a strong fit because this newly created tuple has only two values, and their order has a clear meaning in the crossing decision. + +Choose a property pattern when member names help explain the test. Property patterns are usually clearer for classes, structs, and records. Choose a positional pattern when order already gives the values an obvious meaning. Positional patterns are most useful with tuples, which combine multiple related values into one value with a fixed order. + +## Follow nested inputs in recursive patterns + +Property and positional patterns are *recursive patterns*: They apply another pattern to each property, field, or position they select. The selected value becomes the input to that nested pattern. + +In `IsHotAndHumid`, the `reading` expression is the input to the property pattern. C# evaluates that expression before matching. The pattern gets two values from the resulting object: + +- The relational pattern `> 30` tests the value of `TemperatureC`. +- The relational pattern `> 70` tests the value of `HumidityPercent`. + +An outer type test is optional, and recursive pattern clauses can be empty. For example, the empty property pattern `{ }` matches any non-null evaluated value. + +Property and positional patterns match only non-null evaluated values. When `null` is part of the input domain, choose a recursive pattern that checks for a non-null value first: + +:::code language="csharp" source="snippets/patterns/PropertyPositionalPatterns.cs" ID="NullRecursivePattern"::: + +The input expression is `value`. C# evaluates it, and the `{ }` property pattern tests the resulting value for non-null before assigning it to `nonNullValue`. The following switch expression can then test multiple possible runtime types. Its `DateTime` and `string` type patterns have no designation because the method only needs to identify each type, not capture its value. + +When recursive pattern clauses contain nested patterns, each selected property, field, or position becomes the input to its nested pattern. + +You can add a type test before the braces when the input expression can produce different types. You can also use a member path to test a nested property: + +:::code language="csharp" source="snippets/patterns/PropertyPositionalPatterns.cs" ID="NestedPropertyPattern"::: + +`value` is the input expression. C# first evaluates it and tests whether the resulting value is a . The `Date` property value then becomes the input for the `DayOfWeek` member access. Finally, the `DayOfWeek` value becomes the input to the logical pattern that tests two constants. Matching succeeds when the outer value has the specified type and every object needed along the member path is non-null. + +## Compare patterns with branching statements + +The earlier `DescribeDate` method expresses four results as patterns: + +:::code language="csharp" source="snippets/patterns/PropertyPositionalPatterns.cs" ID="NestedPropertyPattern"::: + +The following method produces the same results with a series of imperative branching statements: + +:::code language="csharp" source="snippets/patterns/PropertyPositionalPatterns.cs" ID="ImperativeDateBranches"::: + +The pattern-based version keeps the possible results together when several branches test a value's type and shape. The imperative version makes each test and return step explicit. For one condition, either form might look similar. As the number of related branches grows, patterns can make the alternatives easier to compare. + +## See also + +- [Pattern matching overview](pattern-matching.md) +- [Relational, logical, and parenthesized patterns](relational-logical-patterns.md). +- [Deconstructing tuples and other types](../functional/deconstruct.md) +- [Property pattern reference](../../language-reference/operators/patterns.md#property-pattern). +- [Positional pattern reference](../../language-reference/operators/patterns.md#positional-pattern). diff --git a/docs/csharp/fundamentals/patterns/relational-logical-patterns.md b/docs/csharp/fundamentals/patterns/relational-logical-patterns.md new file mode 100644 index 0000000000000..171de32784ebb --- /dev/null +++ b/docs/csharp/fundamentals/patterns/relational-logical-patterns.md @@ -0,0 +1,93 @@ +--- +title: "Relational, logical, and parenthesized patterns" +description: Learn how C# relational patterns compare values and how logical and parenthesized patterns combine pattern tests. +ms.date: 09/24/2026 +ms.topic: concept-article +ai-usage: ai-assisted +--- + +# Relational, logical, and parenthesized patterns + +> [!TIP] +> This article is part of the **Fundamentals** section for developers who already know at least one programming language and are learning C#. Start with the [pattern matching overview](pattern-matching.md) if patterns are new to you. For complete language rules, see [relational patterns](../../language-reference/operators/patterns.md#relational-patterns) and [logical patterns](../../language-reference/operators/patterns.md#logical-patterns) in the language reference. + +Relational and logical patterns describe ranges, alternatives, and exclusions. The following method combines them to classify a temperature: + +:::code language="csharp" source="snippets/patterns/RelationalLogicalPatterns.cs" ID="CombinedPatterns"::: + +The expression `temperature` is the pattern input. C# evaluates it once, and each switch arm tests the resulting value. The arms demonstrate these tests: + +- `< 0` tests one boundary. +- `>= 18 and <= 24` tests a range. +- `(>= 0 and < 10) or > 30` tests two alternative ranges. + +This article shows both patterns and imperative conditions so you can learn each form and compare how they express the same decisions. A single condition can look similar in either form. Patterns can make a series of related branches easier to read by keeping the choices next to their results. Choose the form that makes the code easiest to understand. + +## Compare values with relational patterns + +A *relational pattern* compares its pattern input with a compile-time constant by using `<`, `>`, `<=`, or `>=`. A *compile-time constant* is a value the compiler can evaluate while compiling the program. Numeric and character literals, and `const` variables of compatible numeric or character types, are representative examples. Ordinary variables, properties, method calls, and `static readonly` fields aren't compile-time constants. In the opening example, both `>= 18` and `<= 24` test the same evaluated `temperature` value. + +The same relational symbol can appear in an ordinary expression or in a pattern. The following example uses both forms with a temperature: + +:::code language="csharp" source="snippets/patterns/RelationalLogicalPatterns.cs" ID="ExpressionAndPattern"::: + +`temperature < threshold` is a *relational expression*. It evaluates both operands and produces a `bool`. Either operand can be a nonconstant expression. + +In `temperature is < 0`, `temperature` is the pattern input expression. C# evaluates it, and the relational pattern `< 0` tests the resulting value. In the switch arm `< 0 => "Freezing"`, the expression before `switch` supplies the input, so the pattern contains only `< 0`. + +The expression can compare `temperature` with the variable `threshold`. A relational-pattern operand must be a compile-time constant, so use the relational expression when the comparison value is a variable. When the comparison value is constant, either form can work. + +When the right operand is constant, choose mainly for readability. A relational expression often fits one direct comparison. A relational pattern composes with other patterns and fits naturally when several ranges map to switch results. + +## Combine conditions with logical patterns + +*Logical patterns* combine or negate patterns with the pattern operators `and`, `or`, and `not`: + +- An `and` pattern matches when both nested patterns match. +- An `or` pattern matches when either nested pattern matches. +- A `not` pattern succeeds when its nested pattern fails. + +The opening example uses `and` to describe a range and `or` to describe alternatives. A `not` pattern can exclude a value, as in `status is not Status.Complete`. The following methods show both forms so you can learn their syntax and compare how they express the same test: + +:::code language="csharp" source="snippets/patterns/RelationalLogicalPatterns.cs" ID="PatternAndImperative"::: + +The pattern form uses two constant patterns joined by `or`. The imperative form uses two equality expressions joined by the conditional-OR operator `||`. Both forms are concise and clear for this single condition. Choose the form that best fits the surrounding code. Patterns often clarify several related choices in a `switch`, as in the opening example. + +Pattern operators form patterns rather than Boolean expressions: `and` corresponds to pattern conjunction, `or` to pattern alternatives, and `not` to pattern negation. Boolean expressions use `&&`, `||`, and `!`. Choose `or` when several pattern alternatives have the same result. Choose `not` when expressing the excluded pattern is clearer than listing every accepted value. + +## Group patterns with parentheses + +A *parenthesized pattern* uses parentheses to show or change how nested patterns are grouped. *Binding* determines which pattern operands an operator groups together, similar to implicit grouping when you don't write parentheses. C# specifies the following binding order: + +1. `not` +1. `and` +1. `or` + +The following test accepts priorities 1 through 3 or the special priority 9: + +:::code language="csharp" source="snippets/patterns/RelationalLogicalPatterns.cs" ID="ParenthesizedPattern"::: + +The compiler groups `and` before `or`. The parentheses make the intended grouping explicit and the two alternatives easy to see: the range from 1 through 3, or 9. For readability, use parentheses whenever a pattern mixes `and` and `or`, or when `not` applies to a compound pattern. Parentheses can also change the default grouping, as in `not (>= 1 and <= 3)`. + +The runtime check order for nested patterns is unspecified, and pattern operators follow pattern-matching rules rather than short-circuit Boolean rules. Write nested patterns so their result is independent of check order. + +## Use a `when` guard for a separate condition + +Logical patterns work best when nested patterns describe the input value itself. A `when` guard is an additional Boolean condition on a `case` label or switch arm. Use a guard when the decision also depends on information separate from the pattern input. + +The following warning depends on the temperature and a separate `isOutdoors` value: + +:::code language="csharp" source="snippets/patterns/RelationalLogicalPatterns.cs" ID="WhenGuard"::: + +The relational pattern `> 35` describes the `temperature` input. The guard `when isOutdoors` checks a separate value. A guard is also preferable when the condition needs a method call or a Boolean expression that pattern syntax doesn't express clearly. + +Use relational and logical patterns when they make the input's allowed shapes or values easier to see, especially across several switch arms. Use an ordinary Boolean expression when it states a direct condition more simply. Use a `when` guard when a switch choice depends on a separate value or on a condition better expressed as a Boolean expression. + +## See also + +- [Pattern matching overview](pattern-matching.md) +- [Property and positional patterns](property-positional-patterns.md) +- [C# operators](../expressions/operators.md) +- [Relational pattern reference](../../language-reference/operators/patterns.md#relational-patterns) +- [Logical pattern reference](../../language-reference/operators/patterns.md#logical-patterns) +- [Parenthesized pattern reference](../../language-reference/operators/patterns.md#parenthesized-pattern) diff --git a/docs/csharp/fundamentals/patterns/snippets/patterns/ListPatterns.cs b/docs/csharp/fundamentals/patterns/snippets/patterns/ListPatterns.cs new file mode 100644 index 0000000000000..9c3279df8e872 --- /dev/null +++ b/docs/csharp/fundamentals/patterns/snippets/patterns/ListPatterns.cs @@ -0,0 +1,42 @@ +static class ListPatterns +{ + public static void Run() + { + Console.WriteLine($"Header: {IsHeader(["Name", "Score"])}"); + Console.WriteLine(GetAnnouncements(["Mina", "Luis", "Ada"])); + Console.WriteLine( + GetInputFile(["--verbose", "--safe", "report.csv"])); + Console.WriteLine( + $"Has content: {HasContent(["BEGIN", "value", "END"])}"); + } + + // + static bool IsHeader(string[] columns) => + columns is ["Name", "Score"]; + // + + // + static string GetAnnouncements(List finishingOrder) => + finishingOrder switch + { + [var winner, _, var thirdPlace] => + $"Winner: {winner}; third place: {thirdPlace}", + _ => "A complete three-runner result isn't available" + }; + // + + // + static string GetInputFile(string[] arguments) => + arguments switch + { + ["--verbose", .., var fileName] => $"Verbose processing: {fileName}", + [.., var fileName] => $"Processing: {fileName}", + [] => "No input file was provided" + }; + // + + // + static bool HasContent(string[] entries) => + entries is ["BEGIN", .. { Length: > 0 }, "END"]; + // +} diff --git a/docs/csharp/fundamentals/patterns/snippets/patterns/Program.cs b/docs/csharp/fundamentals/patterns/snippets/patterns/Program.cs index c55bbc0a6b086..8aea8ed7ab1e2 100644 --- a/docs/csharp/fundamentals/patterns/snippets/patterns/Program.cs +++ b/docs/csharp/fundamentals/patterns/snippets/patterns/Program.cs @@ -1,3 +1,6 @@ Overview.Run(); BasicPatterns.Run(); TypePatterns.Run(); +PropertyPositionalPatterns.Run(); +RelationalLogicalPatterns.Run(); +ListPatterns.Run(); diff --git a/docs/csharp/fundamentals/patterns/snippets/patterns/PropertyPositionalPatterns.cs b/docs/csharp/fundamentals/patterns/snippets/patterns/PropertyPositionalPatterns.cs new file mode 100644 index 0000000000000..39511bd9ca9c6 --- /dev/null +++ b/docs/csharp/fundamentals/patterns/snippets/patterns/PropertyPositionalPatterns.cs @@ -0,0 +1,91 @@ +static class PropertyPositionalPatterns +{ + public static void Run() + { + Console.WriteLine($"Hot and humid: {IsHotAndHumid( + new WeatherReading(32, 75))}"); + Console.WriteLine($"Date: {DescribeDate( + new DateTime(2026, 9, 19))}"); + Console.WriteLine($"Nullable input: {DescribeNullableInput(null)}"); + Console.WriteLine($"Date (branches): {DescribeDateWithBranches( + new DateTime(2026, 9, 19))}"); + Console.WriteLine($"Crossing: {GetCrossingInstruction( + PedestrianSignal.Walk, crossingIsClear: true)}"); + } + + // + static bool IsHotAndHumid(WeatherReading reading) => + reading is { TemperatureC: > 30, HumidityPercent: > 70 }; + + sealed record WeatherReading(int TemperatureC, int HumidityPercent); + // + + // + static string DescribeDate(object? value) => + value switch + { + DateTime { Date.DayOfWeek: + DayOfWeek.Saturday or DayOfWeek.Sunday } => "Weekend date", + DateTime => "Weekday date", + null => "No date", + _ => "Not a date" + }; + // + + // + static string DescribeNullableInput(object? value) + { + if (value is not { } nonNullValue) + { + return "No value"; + } + + return nonNullValue switch + { + DateTime => "Date", + string => "Text", + _ => "Another type" + }; + } + // + + // + static string DescribeDateWithBranches(object? value) + { + if (value is DateTime date) + { + if (date.DayOfWeek == DayOfWeek.Saturday || + date.DayOfWeek == DayOfWeek.Sunday) + { + return "Weekend date"; + } + + return "Weekday date"; + } + + if (value is null) + { + return "No date"; + } + + return "Not a date"; + } + // + + // + static string GetCrossingInstruction( + PedestrianSignal signal, bool crossingIsClear) => + (signal, crossingIsClear) switch + { + (PedestrianSignal.Walk, true) => "Cross now", + (PedestrianSignal.Walk, false) => "Wait for the crossing to clear", + _ => "Wait for the walk signal" + }; + + enum PedestrianSignal + { + Stop, + Walk + } + // +} diff --git a/docs/csharp/fundamentals/patterns/snippets/patterns/RelationalLogicalPatterns.cs b/docs/csharp/fundamentals/patterns/snippets/patterns/RelationalLogicalPatterns.cs new file mode 100644 index 0000000000000..1b0bdb015dbd7 --- /dev/null +++ b/docs/csharp/fundamentals/patterns/snippets/patterns/RelationalLogicalPatterns.cs @@ -0,0 +1,67 @@ +static class RelationalLogicalPatterns +{ + public static void Run() + { + Console.WriteLine($"Temperature: {ClassifyTemperature(21)}"); + ShowExpressionAndPattern(-4, threshold: 0); + Console.WriteLine( + $"Weekend pattern: {IsWeekendPattern(DayOfWeek.Saturday)}; " + + $"imperative: {IsWeekendImperative(DayOfWeek.Saturday)}"); + Console.WriteLine($"Accepted priority: {IsAcceptedPriority(9)}"); + Console.WriteLine( + $"Heat warning: {GetHeatWarning(36, isOutdoors: true)}"); + } + + // + static string ClassifyTemperature(int temperature) => + temperature switch + { + < 0 => "Below freezing", + >= 18 and <= 24 => "Comfortable", + (>= 0 and < 10) or > 30 => "Far outside the comfortable range", + _ => "Cool or warm" + }; + // + + // + static void ShowExpressionAndPattern(int temperature, int threshold) + { + bool belowThreshold = temperature < threshold; + bool belowFreezing = temperature is < 0; + + string description = temperature switch + { + < 0 => "Freezing", + 0 => "Freezing point", + > 0 => "Above freezing" + }; + + Console.WriteLine( + $"Below threshold: {belowThreshold}; " + + $"below freezing: {belowFreezing}; {description}"); + } + // + + // + static bool IsWeekendPattern(DayOfWeek day) => + day is DayOfWeek.Saturday or DayOfWeek.Sunday; + + static bool IsWeekendImperative(DayOfWeek day) => + day == DayOfWeek.Saturday || day == DayOfWeek.Sunday; + // + + // + static bool IsAcceptedPriority(int priority) => + priority is (>= 1 and <= 3) or 9; + // + + // + static string GetHeatWarning(int temperature, bool isOutdoors) => + temperature switch + { + > 35 when isOutdoors => "High heat outdoors", + > 35 => "High heat", + _ => "No heat warning" + }; + // +} diff --git a/docs/csharp/toc.yml b/docs/csharp/toc.yml index f1e12ba688274..90ff633bc2c40 100644 --- a/docs/csharp/toc.yml +++ b/docs/csharp/toc.yml @@ -121,6 +121,12 @@ items: href: fundamentals/patterns/declaration-constant-var-patterns.md - name: Type patterns href: fundamentals/patterns/type-patterns.md + - name: Property and positional patterns + href: fundamentals/patterns/property-positional-patterns.md + - name: Relational, logical, and parenthesized patterns + href: fundamentals/patterns/relational-logical-patterns.md + - name: List and slice patterns + href: fundamentals/patterns/list-patterns.md - name: Discards and the discard pattern href: fundamentals/patterns/discards.md - name: Expressions and statements