From 371b4cd151bd857d1742ad55a98af4741b498f24 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 25 Sep 2025 11:40:33 -0700 Subject: [PATCH 1/7] Add example section to CA2017 documentation with C# and VB code snippets (#48743) --- .../code-analysis/quality-rules/ca2017.md | 14 ++++++++- .../csharp/all-rules/all-rules.csproj | 2 ++ .../snippets/csharp/all-rules/ca2017.cs | 31 +++++++++++++++++++ .../snippets/vb/all-rules/all-rules.vbproj | 2 ++ .../ca2017-parameter-count-mismatch_1.vb | 25 +++++++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 docs/fundamentals/code-analysis/quality-rules/snippets/csharp/all-rules/ca2017.cs create mode 100644 docs/fundamentals/code-analysis/quality-rules/snippets/vb/all-rules/ca2017-parameter-count-mismatch_1.vb diff --git a/docs/fundamentals/code-analysis/quality-rules/ca2017.md b/docs/fundamentals/code-analysis/quality-rules/ca2017.md index 9b765669de2f1..9ee3d60a013cb 100644 --- a/docs/fundamentals/code-analysis/quality-rules/ca2017.md +++ b/docs/fundamentals/code-analysis/quality-rules/ca2017.md @@ -1,7 +1,8 @@ --- title: "CA2017: Parameter count mismatch (code analysis)" description: "Learn about code analysis rule CA2017: Parameter count mismatch" -ms.date: 01/19/2022 +ms.date: 09/24/2025 +ai-usage: ai-assisted f1_keywords: - "LoggerMessageDefineAnalyzer" - "CA2017" @@ -9,6 +10,9 @@ helpviewer_keywords: - "LoggerMessageDefineAnalyzer" - "CA2017" author: Youssef1313 +dev_langs: + - CSharp + - VB --- # CA2017: Parameter count mismatch @@ -36,6 +40,14 @@ Match the number of placeholders in the template format with the number of passe Do not suppress a warning from this rule. +## Example + +The following example shows methods that violate CA2017 and methods that satisfy the rule. + +:::code language="csharp" source="snippets/csharp/all-rules/ca2017.cs" id="snippet1"::: + +:::code language="vb" source="snippets/vb/all-rules/ca2017-parameter-count-mismatch_1.vb"::: + ## See also - [Reliability rules](reliability-warnings.md) diff --git a/docs/fundamentals/code-analysis/quality-rules/snippets/csharp/all-rules/all-rules.csproj b/docs/fundamentals/code-analysis/quality-rules/snippets/csharp/all-rules/all-rules.csproj index 48700336aa492..b286c3c5c450a 100644 --- a/docs/fundamentals/code-analysis/quality-rules/snippets/csharp/all-rules/all-rules.csproj +++ b/docs/fundamentals/code-analysis/quality-rules/snippets/csharp/all-rules/all-rules.csproj @@ -9,6 +9,8 @@ + + diff --git a/docs/fundamentals/code-analysis/quality-rules/snippets/csharp/all-rules/ca2017.cs b/docs/fundamentals/code-analysis/quality-rules/snippets/csharp/all-rules/ca2017.cs new file mode 100644 index 0000000000000..da627345b1652 --- /dev/null +++ b/docs/fundamentals/code-analysis/quality-rules/snippets/csharp/all-rules/ca2017.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.Logging; + +namespace ca2017 +{ + // + public class LoggingExample + { + private readonly ILogger _logger; + + public LoggingExample(ILogger logger) + { + _logger = logger; + } + + public void ExampleMethod() + { + string name = "Alice"; + int age = 30; + + // Violates CA2017: Too few arguments for placeholders. + _logger.LogInformation("User {Name} is {Age} years old and lives in {City}", name, age); + + // Violates CA2017: Too many arguments for placeholders. + _logger.LogError("Error occurred: {Message}", "Something went wrong", "Extra argument"); + + // Correct usage: Matching number of placeholders and arguments. + _logger.LogInformation("User {Name} is {Age} years old", name, age); + } + } + // +} diff --git a/docs/fundamentals/code-analysis/quality-rules/snippets/vb/all-rules/all-rules.vbproj b/docs/fundamentals/code-analysis/quality-rules/snippets/vb/all-rules/all-rules.vbproj index a5dec9dd3b254..a651c1e18355e 100644 --- a/docs/fundamentals/code-analysis/quality-rules/snippets/vb/all-rules/all-rules.vbproj +++ b/docs/fundamentals/code-analysis/quality-rules/snippets/vb/all-rules/all-rules.vbproj @@ -8,6 +8,8 @@ + + diff --git a/docs/fundamentals/code-analysis/quality-rules/snippets/vb/all-rules/ca2017-parameter-count-mismatch_1.vb b/docs/fundamentals/code-analysis/quality-rules/snippets/vb/all-rules/ca2017-parameter-count-mismatch_1.vb new file mode 100644 index 0000000000000..f61ff6295d485 --- /dev/null +++ b/docs/fundamentals/code-analysis/quality-rules/snippets/vb/all-rules/ca2017-parameter-count-mismatch_1.vb @@ -0,0 +1,25 @@ +Imports Microsoft.Extensions.Logging + +Public Class LoggingExample + + Private ReadOnly _logger As ILogger(Of LoggingExample) + + Public Sub New(logger As ILogger(Of LoggingExample)) + _logger = logger + End Sub + + Public Sub ExampleMethod() + Dim name As String = "Alice" + Dim age As Integer = 30 + + ' Violates CA2017: Too few arguments for placeholders. + _logger.LogInformation("User {Name} is {Age} years old and lives in {City}", name, age) + + ' Violates CA2017: Too many arguments for placeholders. + _logger.LogError("Error occurred: {Message}", "Something went wrong", "Extra argument") + + ' Correct usage: Matching number of placeholders and arguments. + _logger.LogInformation("User {Name} is {Age} years old", name, age) + End Sub + +End Class From 6f580f2926f190c6f8eb45b1db3c3a75693310b8 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Thu, 25 Sep 2025 11:58:15 -0700 Subject: [PATCH 2/7] Update package index with latest published versions (#48752) --- docs/azure/includes/dotnet-all.md | 6 +++--- docs/azure/includes/dotnet-new.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index 29d7b8fc38b2b..2de8de2a1bf45 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -368,7 +368,7 @@ | Resource Management - SQL | NuGet [1.3.0](https://www.nuget.org/packages/Azure.ResourceManager.Sql/1.3.0)
NuGet [1.4.0-beta.3](https://www.nuget.org/packages/Azure.ResourceManager.Sql/1.4.0-beta.3) | [docs](/dotnet/api/overview/azure/ResourceManager.Sql-readme) | GitHub [1.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Sql_1.3.0/sdk/sqlmanagement/Azure.ResourceManager.Sql/)
GitHub [1.4.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Sql_1.4.0-beta.3/sdk/sqlmanagement/Azure.ResourceManager.Sql/) | | Resource Management - SQL Virtual Machine | NuGet [1.1.1](https://www.nuget.org/packages/Azure.ResourceManager.SqlVirtualMachine/1.1.1) | [docs](/dotnet/api/overview/azure/ResourceManager.SqlVirtualMachine-readme) | GitHub [1.1.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.SqlVirtualMachine_1.1.1/sdk/sqlvirtualmachine/Azure.ResourceManager.SqlVirtualMachine/) | | Resource Management - Standby Pool | NuGet [1.1.0](https://www.nuget.org/packages/Azure.ResourceManager.StandbyPool/1.1.0) | [docs](/dotnet/api/overview/azure/ResourceManager.StandbyPool-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.StandbyPool_1.1.0/sdk/standbypool/Azure.ResourceManager.StandbyPool/) | -| Resource Management - Storage | NuGet [1.4.4](https://www.nuget.org/packages/Azure.ResourceManager.Storage/1.4.4) | [docs](/dotnet/api/overview/azure/ResourceManager.Storage-readme) | GitHub [1.4.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Storage_1.4.4/sdk/storage/Azure.ResourceManager.Storage/) | +| Resource Management - Storage | NuGet [1.5.0](https://www.nuget.org/packages/Azure.ResourceManager.Storage/1.5.0) | [docs](/dotnet/api/overview/azure/ResourceManager.Storage-readme) | GitHub [1.5.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Storage_1.5.0/sdk/storage/Azure.ResourceManager.Storage/) | | Resource Management - Storage Actions | NuGet [1.0.0](https://www.nuget.org/packages/Azure.ResourceManager.StorageActions/1.0.0) | [docs](/dotnet/api/overview/azure/ResourceManager.StorageActions-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.StorageActions_1.0.0/sdk/storageactions/Azure.ResourceManager.StorageActions/) | | Resource Management - Storage Cache | NuGet [1.3.2](https://www.nuget.org/packages/Azure.ResourceManager.StorageCache/1.3.2) | [docs](/dotnet/api/overview/azure/ResourceManager.StorageCache-readme) | GitHub [1.3.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.StorageCache_1.3.2/sdk/storagecache/Azure.ResourceManager.StorageCache/) | | Resource Management - Storage Mover | NuGet [1.2.1](https://www.nuget.org/packages/Azure.ResourceManager.StorageMover/1.2.1) | [docs](/dotnet/api/overview/azure/ResourceManager.StorageMover-readme) | GitHub [1.2.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.StorageMover_1.2.1/sdk/storagemover/Azure.ResourceManager.StorageMover/) | @@ -523,7 +523,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.40.3](https://www.nuget.org/packages/Microsoft.Azure.Cosmos.Direct/3.40.3) | | GitHub [3.40.3](https://github.com/Azure/azure-cosmos-dotnet-v3) | +| Cosmos DB - Direct | NuGet [3.41.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos.Direct/3.41.0) | | GitHub [3.41.0](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) | @@ -591,7 +591,7 @@ | Microsoft.Azure.Functions.Worker.Extensions.Warmup | NuGet [4.0.2](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Warmup/4.0.2) | | | | Microsoft.Azure.Functions.Worker.Grpc | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Grpc/2.0.0)
NuGet [2.50.0-preview1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Grpc/2.50.0-preview1) | | | | Microsoft.Azure.Functions.Worker.ItemTemplates | NuGet [4.0.5212](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ItemTemplates/4.0.5212) | | | -| Microsoft.Azure.Functions.Worker.ProjectTemplates | NuGet [4.0.5212](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ProjectTemplates/4.0.5212) | | | +| Microsoft.Azure.Functions.Worker.ProjectTemplates | NuGet [4.0.5267](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ProjectTemplates/4.0.5267) | | | | Microsoft.Azure.Functions.Worker.Sdk | NuGet [2.0.5](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Sdk/2.0.5) | | | | Microsoft.Azure.Functions.Worker.Sdk.Analyzers | NuGet [1.2.2](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Sdk.Analyzers/1.2.2) | | | | Microsoft.Azure.Functions.Worker.Sdk.Generators | NuGet [1.3.5](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Sdk.Generators/1.3.5) | | | diff --git a/docs/azure/includes/dotnet-new.md b/docs/azure/includes/dotnet-new.md index 8729b2a6f8b12..18f7b6ad78942 100644 --- a/docs/azure/includes/dotnet-new.md +++ b/docs/azure/includes/dotnet-new.md @@ -382,7 +382,7 @@ | Resource Management - SQL | NuGet [1.3.0](https://www.nuget.org/packages/Azure.ResourceManager.Sql/1.3.0)
NuGet [1.4.0-beta.3](https://www.nuget.org/packages/Azure.ResourceManager.Sql/1.4.0-beta.3) | [docs](/dotnet/api/overview/azure/ResourceManager.Sql-readme) | GitHub [1.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Sql_1.3.0/sdk/sqlmanagement/Azure.ResourceManager.Sql/)
GitHub [1.4.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Sql_1.4.0-beta.3/sdk/sqlmanagement/Azure.ResourceManager.Sql/) | | Resource Management - SQL Virtual Machine | NuGet [1.1.1](https://www.nuget.org/packages/Azure.ResourceManager.SqlVirtualMachine/1.1.1) | [docs](/dotnet/api/overview/azure/ResourceManager.SqlVirtualMachine-readme) | GitHub [1.1.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.SqlVirtualMachine_1.1.1/sdk/sqlvirtualmachine/Azure.ResourceManager.SqlVirtualMachine/) | | Resource Management - Standby Pool | NuGet [1.1.0](https://www.nuget.org/packages/Azure.ResourceManager.StandbyPool/1.1.0) | [docs](/dotnet/api/overview/azure/ResourceManager.StandbyPool-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.StandbyPool_1.1.0/sdk/standbypool/Azure.ResourceManager.StandbyPool/) | -| Resource Management - Storage | NuGet [1.4.4](https://www.nuget.org/packages/Azure.ResourceManager.Storage/1.4.4) | [docs](/dotnet/api/overview/azure/ResourceManager.Storage-readme) | GitHub [1.4.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Storage_1.4.4/sdk/storage/Azure.ResourceManager.Storage/) | +| Resource Management - Storage | NuGet [1.5.0](https://www.nuget.org/packages/Azure.ResourceManager.Storage/1.5.0) | [docs](/dotnet/api/overview/azure/ResourceManager.Storage-readme) | GitHub [1.5.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Storage_1.5.0/sdk/storage/Azure.ResourceManager.Storage/) | | Resource Management - Storage Actions | NuGet [1.0.0](https://www.nuget.org/packages/Azure.ResourceManager.StorageActions/1.0.0) | [docs](/dotnet/api/overview/azure/ResourceManager.StorageActions-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.StorageActions_1.0.0/sdk/storageactions/Azure.ResourceManager.StorageActions/) | | Resource Management - Storage Cache | NuGet [1.3.2](https://www.nuget.org/packages/Azure.ResourceManager.StorageCache/1.3.2) | [docs](/dotnet/api/overview/azure/ResourceManager.StorageCache-readme) | GitHub [1.3.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.StorageCache_1.3.2/sdk/storagecache/Azure.ResourceManager.StorageCache/) | | Resource Management - Storage Mover | NuGet [1.2.1](https://www.nuget.org/packages/Azure.ResourceManager.StorageMover/1.2.1) | [docs](/dotnet/api/overview/azure/ResourceManager.StorageMover-readme) | GitHub [1.2.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.StorageMover_1.2.1/sdk/storagemover/Azure.ResourceManager.StorageMover/) | From 5da89a5972017487864932b1cbe8c918decf9236 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Thu, 25 Sep 2025 13:31:14 -0700 Subject: [PATCH 3/7] Update package index with latest published versions (#48753) --- docs/azure/includes/dotnet-all.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index 2de8de2a1bf45..635acb5d9e2a4 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -405,8 +405,8 @@ | IoT Operations MQTT | NuGet [0.11.0](https://www.nuget.org/packages/Azure.Iot.Operations.Mqtt/0.11.0) | | | | IoT Operations Protocol | NuGet [0.12.1](https://www.nuget.org/packages/Azure.Iot.Operations.Protocol/0.12.1) | | | | IoT Operations Services | NuGet [0.14.0](https://www.nuget.org/packages/Azure.Iot.Operations.Services/0.14.0) | | | -| Item Templates NetCore | NuGet [4.0.5212](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ItemTemplates.NetCore/4.0.5212) | | | -| Item Templates NetFx | NuGet [4.0.5212](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ItemTemplates.NetFx/4.0.5212) | | | +| Item Templates NetCore | NuGet [4.0.5267](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ItemTemplates.NetCore/4.0.5267) | | | +| Item Templates NetFx | NuGet [4.0.5267](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ItemTemplates.NetFx/4.0.5267) | | | | Microsoft.Azure.DataFactoryTestingFramework.Expressions | NuGet [0.2.7](https://www.nuget.org/packages/Microsoft.Azure.DataFactoryTestingFramework.Expressions/0.2.7) | | | | Microsoft.Azure.Functions.Worker.OpenTelemetry | NuGet [1.1.0-preview6](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.OpenTelemetry/1.1.0-preview6) | | | | OpenTelemetry Profiler | NuGet [1.0.0-beta5](https://www.nuget.org/packages/Azure.Monitor.OpenTelemetry.Profiler/1.0.0-beta5) | | | @@ -553,10 +553,10 @@ | Functions Extensions - Redis | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Redis/1.0.0) | | | | Functions Extensions - Redis | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Redis/1.0.0) | | | | Functions Extensions - Worker Extentions | NuGet [1.0.1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Dapr/1.0.1) | | | -| Functions item template pack for Microsoft Template Engine | NuGet [4.0.5212](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.ItemTemplates/4.0.5212) | | GitHub [4.0.5212](https://github.com/Azure/azure-functions-templates/tree/3.1.1582) | +| Functions item template pack for Microsoft Template Engine | NuGet [4.0.5267](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.ItemTemplates/4.0.5267) | | GitHub [4.0.5267](https://github.com/Azure/azure-functions-templates/tree/3.1.1582) | | Functions OpenAPI app settings deserialization library | NuGet [1.4.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.OpenApi.Configuration.AppSettings/1.4.0)
NuGet [2.0.0-preview2](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.OpenApi.Configuration.AppSettings/2.0.0-preview2) | | | | Functions OpenAPI document and Swagger UI renderer library | NuGet [1.4.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.OpenApi/1.4.0)
NuGet [2.0.0-preview2](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.OpenApi/2.0.0-preview2) | | | -| Functions project template pack for Microsoft Template Engine | NuGet [4.0.5212](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.ProjectTemplates/4.0.5212) | | GitHub [4.0.5212](https://github.com/Azure/azure-functions-templates/tree/3.1.1582) | +| Functions project template pack for Microsoft Template Engine | NuGet [4.0.5267](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.ProjectTemplates/4.0.5267) | | GitHub [4.0.5267](https://github.com/Azure/azure-functions-templates/tree/3.1.1582) | | Functions runtime assemblies for App Insights logging | NuGet [3.0.41](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Logging.ApplicationInsights/3.0.41) | | GitHub [3.0.41](https://github.com/Azure/azure-webjobs-sdk/tree/v3.0.18/src/Microsoft.Azure.WebJobs.Logging.ApplicationInsights) | | Functions runtime assemblies for logging | NuGet [4.0.3](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Logging/4.0.3) | | | | Functions runtime assemblies for Microsoft.Azure.WebJobs.Host | NuGet [3.0.42](https://www.nuget.org/packages/Microsoft.Azure.WebJobs/3.0.42) | | GitHub [3.0.42](https://github.com/Azure/azure-webjobs-sdk/tree/v3.0.18/src/Microsoft.Azure.WebJobs) | @@ -590,7 +590,7 @@ | Microsoft.Azure.Functions.Worker.Extensions.Timer | NuGet [4.3.1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Timer/4.3.1) | | | | Microsoft.Azure.Functions.Worker.Extensions.Warmup | NuGet [4.0.2](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Warmup/4.0.2) | | | | Microsoft.Azure.Functions.Worker.Grpc | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Grpc/2.0.0)
NuGet [2.50.0-preview1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Grpc/2.50.0-preview1) | | | -| Microsoft.Azure.Functions.Worker.ItemTemplates | NuGet [4.0.5212](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ItemTemplates/4.0.5212) | | | +| Microsoft.Azure.Functions.Worker.ItemTemplates | NuGet [4.0.5267](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ItemTemplates/4.0.5267) | | | | Microsoft.Azure.Functions.Worker.ProjectTemplates | NuGet [4.0.5267](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ProjectTemplates/4.0.5267) | | | | Microsoft.Azure.Functions.Worker.Sdk | NuGet [2.0.5](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Sdk/2.0.5) | | | | Microsoft.Azure.Functions.Worker.Sdk.Analyzers | NuGet [1.2.2](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Sdk.Analyzers/1.2.2) | | | From 781142b9607eeb88dab78148b3ba63d93fc490e3 Mon Sep 17 00:00:00 2001 From: Luis Quintanilla <46974588+luisquintanilla@users.noreply.github.com> Date: Thu, 25 Sep 2025 16:31:35 -0400 Subject: [PATCH 4/7] Enhance documentation on MCP tools (#48553) * Enhance documentation on MCP tools * Update docs/ai/microsoft-extensions-ai.md Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --------- Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --- docs/ai/microsoft-extensions-ai.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/ai/microsoft-extensions-ai.md b/docs/ai/microsoft-extensions-ai.md index e3eff2c3e3bf4..f3eb7adf0da24 100644 --- a/docs/ai/microsoft-extensions-ai.md +++ b/docs/ai/microsoft-extensions-ai.md @@ -100,6 +100,8 @@ The preceding code: - Calls `GetStreamingResponseAsync` on the client, passing a prompt and a list of tools that includes a function created with . - Iterates over the response, printing each update to the console. +You can also use Model Context Protocol (MCP) tools with your `IChatClient`. For more information, see [Build a minimal MCP client](./quickstarts/build-mcp-client.md). + #### Cache responses If you're familiar with [Caching in .NET](../core/extensions/caching.md), it's good to know that provides other such delegating `IChatClient` implementations. The is an `IChatClient` that layers caching around another arbitrary `IChatClient` instance. When a novel chat history is submitted to the `DistributedCachingChatClient`, it forwards it to the underlying client and then caches the response before sending it back to the consumer. The next time the same history is submitted, such that a cached response can be found in the cache, the `DistributedCachingChatClient` returns the cached response rather than forwarding the request along the pipeline. From a59d04fdec8dc23fa40498aeb3e882c38513f79a Mon Sep 17 00:00:00 2001 From: "Meaghan Osagie (Lewis)" Date: Thu, 25 Sep 2025 14:58:51 -0700 Subject: [PATCH 5/7] Update ownership of dotnet tutorials (#48754) --- .github/CODEOWNERS | 2 +- docfx.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c122e7059afed..3b810df49d2b7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -122,7 +122,7 @@ # Tools /docs/core/tools/ @adegeo @dotnet/docs # Tutorials -/docs/core/tutorials/ @BillWagner @dotnet/docs +/docs/core/tutorials/ @meaghanlewis @dotnet/docs # What's new /docs/core/whats-new/ @dotnet/docs diff --git a/docfx.json b/docfx.json index 9d5ee8ed87039..5a4bc914e7e25 100644 --- a/docfx.json +++ b/docfx.json @@ -366,7 +366,7 @@ "docs/core/runtime-config/**/**.md": "gewarren", "docs/core/testing/**/**.md": "IEvangelist", "docs/core/tools/**/**.md": "adegeo", - "docs/core/tutorials/**/**.md": "billwagner", + "docs/core/tutorials/**/**.md": "meaghanlewis", "docs/core/versions/**/**.md": "billwagner", "docs/core/whats-new/**/**.md": "gewarren", "docs/csharp/**/*.*": "billwagner", @@ -459,7 +459,7 @@ "docs/core/runtime-config/**/**.md": "gewarren", "docs/core/testing/**/**.md": "dapine", "docs/core/tools/**/**.md": "adegeo", - "docs/core/tutorials/**/**.md": "wiwagn", + "docs/core/tutorials/**/**.md": "mosagie", "docs/core/versions/**/**.md": "wiwagn", "docs/core/whats-new/**/**.md": "gewarren", "docs/csharp/**/*.*": "wiwagn", From af508fd30fb26858cfa036af539aee81e53f9f18 Mon Sep 17 00:00:00 2001 From: "Meaghan Osagie (Lewis)" Date: Thu, 25 Sep 2025 16:09:40 -0700 Subject: [PATCH 6/7] Update file-based app functionality in command reference (#48738) * add file based changes for dotnet build * add file based command for dotnet clean * add file-based app options for dotnet-run * add file-based app details for dotnet publish * add file-based app info for dotnet-restore * Fix indentation * add in file command * make consistency edits across commands * Specify the version file-based programs are available in. * apply changes from review feedback * move project-solution-file arguments to an include file * add trailing newline to include * specify behavior of dotnet run for arguments and using file option * Add trailing newline at end of file --- docs/core/tools/dotnet-build.md | 30 +++++----- docs/core/tools/dotnet-clean.md | 30 ++++++---- docs/core/tools/dotnet-publish.md | 28 ++++------ docs/core/tools/dotnet-restore.md | 16 +++--- docs/core/tools/dotnet-run.md | 55 +++++++++++++++++-- .../cli-arguments-project-solution-file.md | 14 +++++ 6 files changed, 119 insertions(+), 54 deletions(-) create mode 100644 includes/cli-arguments-project-solution-file.md diff --git a/docs/core/tools/dotnet-build.md b/docs/core/tools/dotnet-build.md index bbd05214f6a38..d4ac620eb2725 100644 --- a/docs/core/tools/dotnet-build.md +++ b/docs/core/tools/dotnet-build.md @@ -1,20 +1,20 @@ --- title: dotnet build command description: The dotnet build command builds a project and all of its dependencies. -ms.date: 11/27/2023 +ms.date: 09/24/2025 --- # dotnet build -**This article applies to:** ✔️ .NET Core 3.1 SDK and later versions +**This article applies to:** ✔️ .NET 6 and later versions ## Name -`dotnet build` - Builds a project and all of its dependencies. +`dotnet build` - Builds a project, solution, or file-based app and all of its dependencies. ## Synopsis ```dotnetcli -dotnet build [|] [-a|--arch ] +dotnet build [||] [-a|--arch ] [--artifacts-path ] [-c|--configuration ] [-f|--framework ] [--disable-build-servers] @@ -23,7 +23,7 @@ dotnet build [|] [-a|--arch ] [-o|--output ] [-p|--property:=] [-r|--runtime ] - [--self-contained [true|false]] [--source ] + [-sc|--self-contained [true|false]] [--source ] [--tl:[auto|on|off]] [--use-current-runtime, --ucr [true|false]] [-v|--verbosity ] [--version-suffix ] @@ -32,16 +32,14 @@ dotnet build -h|--help ## Description -The `dotnet build` command builds the project and its dependencies into a set of binaries. The binaries include the project's code in Intermediate Language (IL) files with a *.dll* extension. Depending on the project type and settings, other files may be included, such as: +The `dotnet build` command builds the project, solution, or file-based app and its dependencies into a set of binaries. The binaries include the project's code in Intermediate Language (IL) files with a *.dll* extension. Depending on the project type and settings, other files may be included, such as: -- An executable that can be used to run the application, if the project type is an executable targeting .NET Core 3.0 or later. +- An executable that can be used to run the application. - Symbol files used for debugging with a *.pdb* extension. - A *.deps.json* file, which lists the dependencies of the application or library. - A *.runtimeconfig.json* file, which specifies the shared runtime and its version for an application. - Other libraries that the project depends on (via project references or NuGet package references). -For executable projects targeting versions earlier than .NET Core 3.0, library dependencies from NuGet are typically NOT copied to the output folder. They're resolved from the NuGet global packages folder at run time. With that in mind, the product of `dotnet build` isn't ready to be transferred to another machine to run. To create a version of the application that can be deployed, you need to publish it (for example, with the [dotnet publish](dotnet-publish.md) command). For more information, see [.NET Application Deployment](../deploying/index.md). - For executable projects targeting .NET Core 3.0 and later, library dependencies are copied to the output folder. This means that if there isn't any other publish-specific logic (such as Web projects have), the build output should be deployable. ### Implicit restore @@ -64,7 +62,7 @@ To produce a library, omit the `` property or change its value to `L ### MSBuild -`dotnet build` uses MSBuild to build the project, so it supports both parallel and incremental builds. For more information, see [Incremental Builds](/visualstudio/msbuild/incremental-builds). +`dotnet build` uses MSBuild to build the project, solution, or file-based app. It supports both parallel and incremental builds. For more information, see [Incremental Builds](/visualstudio/msbuild/incremental-builds). In addition to its options, the `dotnet build` command accepts MSBuild options, such as `-p` for setting properties or `-l` to define a logger. For more information about these options, see the [MSBuild Command-Line Reference](/visualstudio/msbuild/msbuild-command-line-reference). Or you can also use the [dotnet msbuild](dotnet-msbuild.md) command. @@ -77,9 +75,7 @@ Running `dotnet build` is equivalent to running `dotnet msbuild -restore`; howev ## Arguments -`PROJECT | SOLUTION` - -The project or solution file to build. If a project or solution file isn't specified, MSBuild searches the current working directory for a file that has a file extension that ends in either *proj* or *sln* and uses that file. +[!INCLUDE [arguments-project-solution-file](../../../includes/cli-arguments-project-solution-file.md)] ## Options @@ -176,6 +172,14 @@ The project or solution file to build. If a project or solution file isn't speci dotnet build ``` +- Build a file-based app: + + ```dotnetcli + dotnet build MyProject.cs + ``` + + File-based app support was added in .NET SDK 10.0.100. + - Build a project and its dependencies using Release configuration: ```dotnetcli diff --git a/docs/core/tools/dotnet-clean.md b/docs/core/tools/dotnet-clean.md index 912e73e70ab15..b2c8104351c73 100644 --- a/docs/core/tools/dotnet-clean.md +++ b/docs/core/tools/dotnet-clean.md @@ -1,11 +1,11 @@ --- title: dotnet clean command description: The dotnet clean command cleans the current directory. -ms.date: 02/14/2020 +ms.date: 09/24/2025 --- # dotnet clean -**This article applies to:** ✔️ .NET Core 3.1 SDK and later versions +**This article applies to:** ✔️ .NET 6 and later versions ## Name @@ -14,7 +14,7 @@ ms.date: 02/14/2020 ## Synopsis ```dotnetcli -dotnet clean [|] [--artifacts-path ] +dotnet clean [||] [--artifacts-path ] [-c|--configuration ] [-f|--framework ] [--interactive] [--nologo] [-o|--output ] @@ -30,9 +30,7 @@ The `dotnet clean` command cleans the output of the previous build. It's impleme ## Arguments -`PROJECT | SOLUTION` - -The MSBuild project or solution to clean. If a project or solution file is not specified, MSBuild searches the current working directory for a file that has a file extension that ends in *proj* or *sln*, and uses that file. +[!INCLUDE [arguments-project-solution-file](../../../includes/cli-arguments-project-solution-file.md)] ## Options @@ -40,7 +38,7 @@ The MSBuild project or solution to clean. If a project or solution file is not s [!INCLUDE [configuration](../../../includes/cli-configuration-clean.md)] -* **`-f|--framework `** +- **`-f|--framework `** The [framework](../../standard/frameworks.md) that was specified at build time. The framework must be defined in the [project file](../project-sdk/overview.md). If you specified the framework at build time, you must specify the framework when cleaning. @@ -48,11 +46,11 @@ The MSBuild project or solution to clean. If a project or solution file is not s [!INCLUDE [interactive](../../../includes/cli-interactive-3-0.md)] -* **`--nologo`** +- **`--nologo`** Doesn't display the startup banner or the copyright message. -* **`-o|--output `** +- **`-o|--output `** The directory that contains the build artifacts to clean. Specify the `-f|--framework ` switch with the output directory switch if you specified the framework when the project was built. @@ -60,7 +58,7 @@ The MSBuild project or solution to clean. If a project or solution file is not s If you specify the `--output` option when running this command on a solution, the CLI will emit a warning (an error in 7.0.200) due to the unclear semantics of the output path. The `--output` option is disallowed because all outputs of all built projects would be copied into the specified directory, which isn't compatible with multi-targeted projects, as well as projects that have different versions of direct and transitive dependencies. For more information, see [Solution-level `--output` option no longer valid for build-related commands](../compatibility/sdk/7.0/solution-level-output-no-longer-valid.md). -* **`-r|--runtime `** +- **`-r|--runtime `** Cleans the output folder of the specified runtime. This is used when a [self-contained deployment](../deploying/index.md#self-contained-deployment) was created. @@ -70,13 +68,21 @@ The MSBuild project or solution to clean. If a project or solution file is not s ## Examples -* Clean a default build of the project: +- Clean a default build of the project: ```dotnetcli dotnet clean ``` -* Clean a project built using the Release configuration: +- Clean a file-based program: + + ```dotnetcli + dotnet clean Program.cs. + ``` + + File-based app support was added in .NET SDK 10.0.100. + +- Clean a project built using the Release configuration: ```dotnetcli dotnet clean --configuration Release diff --git a/docs/core/tools/dotnet-publish.md b/docs/core/tools/dotnet-publish.md index 94ffde8e5747a..c15c7205b6b47 100644 --- a/docs/core/tools/dotnet-publish.md +++ b/docs/core/tools/dotnet-publish.md @@ -1,11 +1,11 @@ --- title: dotnet publish command description: The dotnet publish command publishes a .NET project or solution to a directory. -ms.date: 01/07/2025 +ms.date: 09/24/2025 --- # dotnet publish -**This article applies to:** ✔️ .NET Core 3.1 SDK and later versions +**This article applies to:** ✔️ .NET 6 and later versions ## Name @@ -14,7 +14,7 @@ ms.date: 01/07/2025 ## Synopsis ```dotnetcli -dotnet publish [|] [-a|--arch ] +dotnet publish [||] [-a|--arch ] [--artifacts-path ] [-c|--configuration ] [--disable-build-servers] [-f|--framework ] [--force] [--interactive] @@ -114,13 +114,7 @@ For more information, see the following resources: ## Arguments -- **`PROJECT|SOLUTION`** - - The project or solution to publish. - - * `PROJECT` is the path and filename of a C#, F#, or Visual Basic project file, or the path to a directory that contains a C#, F#, or Visual Basic project file. If the directory is not specified, it defaults to the current directory. - - * `SOLUTION` is the path and filename of a solution file (*.sln* or *.slnx* extension), or the path to a directory that contains a solution file. If the directory is not specified, it defaults to the current directory. +[!INCLUDE [arguments-project-solution-file](../../../includes/cli-arguments-project-solution-file.md)] ## Options @@ -186,12 +180,6 @@ For more information, see the following resources: If you specify a relative path when publishing a solution, all output for all projects goes into the specified folder relative to the current working directory. To make publish output go to separate folders for each project, specify a relative path by using the msbuild `PublishDir` property instead of the `--output` option. For example, `dotnet publish -p:PublishDir=.\publish` sends publish output for each project to a `publish` folder under the folder that contains the project file. - - .NET Core 2.x SDK - - If you specify a relative path when publishing a project, the generated output directory is relative to the project file location, not to the current working directory. - - If you specify a relative path when publishing a solution, each project's output goes into a separate folder relative to the project file location. If you specify an absolute path when publishing a solution, all publish output for all projects goes into the specified folder. - [!INCLUDE [os](../../../includes/cli-os.md)] - **`--sc|--self-contained [true|false]`** @@ -268,6 +256,14 @@ For more information, see the following resources: dotnet publish --no-dependencies ``` +- Publish the file-based C# program *app.cs* in the current directory: + + ```dotnetcli + dotnet publish app.cs + ``` + + File-based program support was added in .NET SDK 10.0.100. + ## See also - [.NET application publishing overview](../deploying/index.md) diff --git a/docs/core/tools/dotnet-restore.md b/docs/core/tools/dotnet-restore.md index 260800790a7f6..2ca8374b29b70 100644 --- a/docs/core/tools/dotnet-restore.md +++ b/docs/core/tools/dotnet-restore.md @@ -1,11 +1,11 @@ --- title: dotnet restore command description: Learn how to restore dependencies and project-specific tools with the dotnet restore command. -ms.date: 07/19/2023 +ms.date: 09/24/2025 --- # dotnet restore -**This article applies to:** ✔️ .NET Core 3.1 SDK and later versions +**This article applies to:** ✔️ .NET 6 and later versions ## Name @@ -14,7 +14,7 @@ ms.date: 07/19/2023 ## Synopsis ```dotnetcli -dotnet restore [] [--configfile ] [--disable-build-servers] +dotnet restore [||] [--configfile ] [--disable-build-servers] [--disable-parallel] [-f|--force] [--force-evaluate] [--ignore-failed-sources] [--interactive] [--lock-file-path ] [--locked-mode] @@ -86,9 +86,7 @@ There are three specific settings that `dotnet restore` ignores: ## Arguments -- **`ROOT`** - - Optional path to the project file to restore. +[!INCLUDE [arguments-project-solution-file](../../../includes/cli-arguments-project-solution-file.md)] ## Options @@ -184,19 +182,19 @@ There are three specific settings that `dotnet restore` ignores: dotnet restore ./projects/app1/app1.csproj ``` -- Restore the dependencies and tools for the project in the current directory using the file path provided as the source: +- Restore the dependencies and tools for the project in the current directory using the file path provided as the source: ```dotnetcli dotnet restore -s c:\packages\mypackages ``` -- Restore the dependencies and tools for the project in the current directory using the two file paths provided as sources: +- Restore the dependencies and tools for the project in the current directory using the two file paths provided as sources: ```dotnetcli dotnet restore -s c:\packages\mypackages -s c:\packages\myotherpackages ``` -- Restore dependencies and tools for the project in the current directory showing detailed output: +- Restore dependencies and tools for the project in the current directory showing detailed output: ```dotnetcli dotnet restore --verbosity detailed diff --git a/docs/core/tools/dotnet-run.md b/docs/core/tools/dotnet-run.md index 120c3c285e564..52d837939bb34 100644 --- a/docs/core/tools/dotnet-run.md +++ b/docs/core/tools/dotnet-run.md @@ -1,11 +1,11 @@ --- title: dotnet run command description: The dotnet run command provides a convenient option to run your application from the source code. -ms.date: 03/26/2025 +ms.date: 09/24/2025 --- # dotnet run -**This article applies to:** ✔️ .NET Core 3.1 SDK and later versions +**This article applies to:** ✔️ .NET 6 and later versions ## Name @@ -14,8 +14,8 @@ ms.date: 03/26/2025 ## Synopsis ```dotnetcli -dotnet run [-a|--arch ] [-c|--configuration ] - [-e|--environment ] +dotnet run [] [-a|--arch ] [-c|--configuration ] + [-e|--environment ] [--file ] [-f|--framework ] [--force] [--interactive] [--launch-profile ] [--no-build] [--no-dependencies] [--no-launch-profile] [--no-restore] @@ -53,6 +53,14 @@ To run the application, the `dotnet run` command resolves the dependencies of th [!INCLUDE [cli-advertising-manifests](../../../includes/cli-advertising-manifests.md)] +## Arguments + + `` + + Arguments passed to the application that is being run. + + Any arguments that aren't recognized by `dotnet run` are passed to the application. To separate arguments for `dotnet run` from arguments for the application, use the `--` option. + ## Options - **`--`** @@ -75,6 +83,24 @@ To run the application, the `dotnet run` command resolves the dependencies of th Builds and runs the app using the specified [framework](../../standard/frameworks.md). The framework must be specified in the project file. +- **`--file `** + + The path to the file-based app to run. If a path isn't specified, the current directory is used to find and run the file. For more information on file-based apps, see [Build file-based C# apps](/dotnet/csharp/fundamentals/tutorials/file-based-programs). + + On Unix, you can run file-based apps directly, using the source file name on the command line instead of `dotnet run`. First, ensure the file has execute permissions. Then, add a shebang line `#!` as the first line of the file, for example: + + ```csharp + #!/usr/bin/env dotnet run + ``` + + Then you can run the file directly from the command line: + + ```bash + ./ConsoleApp.cs + ``` + + Introduced in .NET SDK 10.0.100. + - **`--force`** Forces all dependencies to be resolved even if the last restore was successful. Specifying this flag is the same as deleting the *project.assets.json* file. @@ -155,6 +181,14 @@ The environment is constructed in the same order as this list, so the `-e|--envi dotnet run ``` +- Run the specified file-based app in the current directory: + + ```dotnetcli + dotnet run --file ConsoleApp.cs + ``` + + File-based app support was added in .NET SDK 10.0.100. + - Run the specified project: ```dotnetcli @@ -178,3 +212,16 @@ The environment is constructed in the same order as this list, so the `-e|--envi ```dotnetcli dotnet run --verbosity m ``` + +- Run the project in the current directory using the specified framework and pass arguments to the application: + + ```dotnetcli + dotnet run -f net6.0 -- arg1 arg2 + ``` + + In the following example, three arguments are passed to the application. One argument is passed using `-`, and two arguments are passed after `--`: + + ```dotnetcli + dotnet run -f net6.0 -arg1 -- arg2 arg3 + ``` + \ No newline at end of file diff --git a/includes/cli-arguments-project-solution-file.md b/includes/cli-arguments-project-solution-file.md new file mode 100644 index 0000000000000..74d417e64a9ea --- /dev/null +++ b/includes/cli-arguments-project-solution-file.md @@ -0,0 +1,14 @@ +--- +ms.date: 09/25/2025 +ms.topic: include +--- + +`PROJECT | SOLUTION | FILE` + +The project or solution or C# (file-based app) file to operate on. If a file isn't specified, MSBuild searches the current directory for a project or solution. + +- `PROJECT` is the path and filename of a C#, F#, or Visual Basic project file, or the path to a directory that contains a C#, F#, or Visual Basic project file. + +- `SOLUTION` is the path and filename of a solution file (*.sln* or *.slnx* extension), or the path to a directory that contains a solution file. + +- `FILE` is an argument added in .NET 10. The path and filename of a file-based app. File-based apps are contained within a single file that is built and run without a corresponding project (*.csproj*) file. For more information, see [Build file-based C# apps](/dotnet/csharp/fundamentals/tutorials/file-based-programs). From 0fbbf03daa7ae54c08261210d1c18f751e6e0bab Mon Sep 17 00:00:00 2001 From: Ji Date: Sat, 27 Sep 2025 00:18:15 +0800 Subject: [PATCH 7/7] Update App Mod .NET containerization tool selection (#48746) * update tool selection. --- ...d-dotnet-containerization-tool-selection.png | Bin 0 -> 25124 bytes docs/azure/migration/appmod/containerization.md | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 docs/azure/media/appmod-dotnet-containerization-tool-selection.png diff --git a/docs/azure/media/appmod-dotnet-containerization-tool-selection.png b/docs/azure/media/appmod-dotnet-containerization-tool-selection.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba0dde168f91f7650c41564d702b90ca1a2a146 GIT binary patch literal 25124 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 literal 0 HcmV?d00001 diff --git a/docs/azure/migration/appmod/containerization.md b/docs/azure/migration/appmod/containerization.md index 6ae086ad208d6..a312fddb46f11 100644 --- a/docs/azure/migration/appmod/containerization.md +++ b/docs/azure/migration/appmod/containerization.md @@ -30,6 +30,10 @@ The GitHub Copilot app modernization for .NET containerization feature helps you 1. Open your project in Visual Studio. +1. Enable **appModernizationDeploy** in the GitHub Copilot toolbox. + + :::image type="content" source="../../media/appmod-dotnet-containerization-tool-selection.png" alt-text="Screenshot that shows containerization tool selection."::: + 1. Start containerization by using one of these approaches: - **Containerize from Assessment Report**: In the assessment report, select **Run Task** for the Docker Containerization issue.