From 472b0234512a210cda468893ce9d5e3e3d40f618 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Fri, 22 Nov 2024 06:55:24 -0800 Subject: [PATCH 01/11] Make Andy own core/install docs (#43690) --- docfx.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docfx.json b/docfx.json index e14d7c8db81cd..39f2a3fffb0bf 100644 --- a/docfx.json +++ b/docfx.json @@ -330,6 +330,7 @@ "docs/core/diagnostics/**/**.md": "tommcdon", "docs/core/extensions/**/**.md": "IEvangelist", "docs/core/docker/**/**.md": "IEvangelist", + "docs/core/install/**/**.md": "adegeo", "docs/core/native-interop/**/**.md": "jkoritzinsky", "docs/core/project-sdk/**/**.md": "gewarren", "docs/core/runtime-config/**/**.md": "gewarren", @@ -421,6 +422,7 @@ "docs/core/diagnostics/**/**.md": "tommcdon", "docs/core/extensions/**/**.md": "dapine", "docs/core/docker/**/**.md": "dapine", + "docs/core/install/**/**.md": "adegeo", "docs/core/native-interop/**/**.md": "jekoritz", "docs/core/porting/**/**.md": "dotnetcontent", "docs/core/project-sdk/**/**.md": "gewarren", From 2653fdb361a78dadb0df8e75133a455f913e2796 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Fri, 22 Nov 2024 06:56:06 -0800 Subject: [PATCH 02/11] fix build suggestions (#43698) --- docs/azure/includes/dotnet-all.md | 14 +++++++------- .../10-08-october-security-and-quality-rollup.md | 4 ++-- .../code-analysis/quality-rules/ca2013.md | 1 - 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index acfda7a4de0d0..4b4c3cbab96e7 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -397,7 +397,7 @@ | Common | NuGet [2.2.1](https://www.nuget.org/packages/Microsoft.Azure.Common/2.2.1) | | | | Common - Dependencies | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Common.Dependencies/1.0.0) | | | | Computer Vision | NuGet [7.0.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Vision.ComputerVision/7.0.1) | | GitHub [7.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Vision.ComputerVision_6.0.0-preview.1/sdk/cognitiveservices/Vision.ComputerVision) | -| Cosmos DB | NuGet [3.42.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.42.0)
NuGet [3.47.0-preview.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.47.0-preview.0) | [docs](https://learn.microsoft.com/dotnet/api/overview/azure/cosmosdb) | GitHub [3.42.0](https://github.com/Azure/azure-cosmos-dotnet-v3/tree/3.12.0/Microsoft.Azure.Cosmos) | +| Cosmos DB | NuGet [3.42.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.42.0)
NuGet [3.47.0-preview.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.47.0-preview.0) | [docs](/dotnet/api/overview/azure/cosmosdb) | GitHub [3.42.0](https://github.com/Azure/azure-cosmos-dotnet-v3/tree/3.12.0/Microsoft.Azure.Cosmos) | | Custom Image Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingCustomImageSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingCustomImageSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingCustomImageSearch) | | Custom Image Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.CustomImageSearch/2.0.0) | | | | Custom Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingCustomSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingCustomSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingCustomSearch) | @@ -413,15 +413,15 @@ | Entity Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.EntitySearch/2.0.0) | | | | Event Hubs - Service Fabric Processor | NuGet [0.5.4](https://www.nuget.org/packages/Microsoft.Azure.EventHubs.ServiceFabricProcessor/0.5.4) | | GitHub [0.5.4](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.EventHubs.ServiceFabricProcessor_0.5.4/sdk/eventhub/Microsoft.Azure.EventHubs.ServiceFabricProcessor/) | | Face | NuGet [2.8.0-preview.3](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Vision.Face/2.8.0-preview.3) | | GitHub [2.8.0-preview.3](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Vision.Face_2.6.0-preview.1/sdk/cognitiveservices/Vision.Face) | -| Feature Management | NuGet [3.0.0](https://www.nuget.org/packages/Microsoft.FeatureManagement/3.0.0) | [docs](https://learn.microsoft.com/dotnet/api/microsoft.featuremanagement) | | +| Feature Management | NuGet [3.0.0](https://www.nuget.org/packages/Microsoft.FeatureManagement/3.0.0) | [docs](/dotnet/api/microsoft.featuremanagement) | | | Gallery | NuGet [2.6.2-preview](https://www.nuget.org/packages/Microsoft.Azure.Gallery/2.6.2-preview) | | | | HDInsight - Job | NuGet [3.0.0-preview.3](https://www.nuget.org/packages/Microsoft.Azure.HDInsight.Job/3.0.0-preview.3) | | GitHub [3.0.0-preview.3](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.HDInsight.Job_3.0.0-preview.3/sdk/hdinsight/Microsoft.Azure.HDInsight.Job/) | | Image Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingImageSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingImageSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingImageSearch) | | Image Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.ImageSearch/2.0.0) | | | | IoT Edge Function | NuGet [3.5.3](https://www.nuget.org/packages/Microsoft.Azure.IoT.Edge.Function/3.5.3) | | | | IoT Plug and Play - Devices Client | NuGet [1.42.3](https://www.nuget.org/packages/Microsoft.Azure.Devices.Client/1.42.3)
NuGet [2.0.0-preview007](https://www.nuget.org/packages/Microsoft.Azure.Devices.Client/2.0.0-preview007) | | | -| Kusto Data | NuGet [9.3.1](https://www.nuget.org/packages/Microsoft.Azure.Kusto.Data/9.3.1) | [docs](https://learn.microsoft.com/azure/data-explorer/kusto/api/netfx/about-kusto-data) | GitHub [9.3.1](https://github.com/Azure/azure-kusto-dotnet) | -| Kusto Ingest | NuGet [9.3.1](https://www.nuget.org/packages/Microsoft.Azure.Kusto.Ingest/9.3.1) | [docs](https://learn.microsoft.com/azure/data-explorer/kusto/api/netfx/about-kusto-ingest) | GitHub [9.3.1](https://github.com/Azure/azure-kusto-dotnet) | +| Kusto Data | NuGet [9.3.1](https://www.nuget.org/packages/Microsoft.Azure.Kusto.Data/9.3.1) | [docs](/azure/data-explorer/kusto/api/netfx/about-kusto-data) | GitHub [9.3.1](https://github.com/Azure/azure-kusto-dotnet) | +| Kusto Ingest | NuGet [9.3.1](https://www.nuget.org/packages/Microsoft.Azure.Kusto.Ingest/9.3.1) | [docs](/azure/data-explorer/kusto/api/netfx/about-kusto-ingest) | GitHub [9.3.1](https://github.com/Azure/azure-kusto-dotnet) | | Local Search | NuGet [1.0.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingLocalSearch/1.0.0-preview.1) | | GitHub [1.0.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingLocalSearch_1.0.0-preview.1/sdk/cognitiveservices/Search.BingLocalSearch) | | Local Search | NuGet [0.9.0-preview](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.LocalSearch/0.9.0-preview) | | | | LUIS Authoring | NuGet [3.1.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring/3.1.0)
NuGet [3.2.0-preview.5](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring/3.2.0-preview.5) | | GitHub [3.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring_3.2.0-preview.3/sdk/cognitiveservices/Language.LUIS.Authoring) | @@ -449,7 +449,7 @@ | News Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.NewsSearch/2.0.0) | | | | Notification Hubs | NuGet [4.2.0](https://www.nuget.org/packages/Microsoft.Azure.NotificationHubs/4.2.0) | | GitHub [4.2.0](https://github.com/Azure/azure-notificationhubs-dotnet) | | Personalizer | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Personalizer/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Personalizer_1.0.0/sdk/cognitiveservices/Personalizer) | -| Relay | NuGet [3.0.1](https://www.nuget.org/packages/Microsoft.Azure.Relay/3.0.1) | [docs](https://learn.microsoft.com/dotnet/api/overview/azure/service-bus-relay) | GitHub [3.0.1](https://github.com/Azure/azure-relay-dotnet/tree/2.0.1) | +| Relay | NuGet [3.0.1](https://www.nuget.org/packages/Microsoft.Azure.Relay/3.0.1) | [docs](/dotnet/api/overview/azure/service-bus-relay) | GitHub [3.0.1](https://github.com/Azure/azure-relay-dotnet/tree/2.0.1) | | Schema Registry - Avro | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Microsoft.Azure.Kafka.SchemaRegistry.Avro/1.0.0-beta.1) | | | | Schema Registry - JSON | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Microsoft.Azure.Kafka.SchemaRegistry.Json/1.0.0-beta.1) | | | | Search - Common | NuGet [10.1.0](https://www.nuget.org/packages/Microsoft.Azure.Search.Common/10.1.0) | | GitHub [10.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Search.Common_10.1.0/sdk/search/Microsoft.Azure.Search.Common/) | @@ -460,7 +460,7 @@ | Speech Xamarin iOS | NuGet [1.25.0](https://www.nuget.org/packages/Microsoft.CognitiveServices.Speech.Xamarin.iOS/1.25.0) | | | | Spell Check | NuGet [4.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Language.SpellCheck/4.1.0-preview.1) | | GitHub [4.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Language.SpellCheck_4.1.0-preview.1/sdk/cognitiveservices/Language.SpellCheck) | | Spring Cloud Client | NuGet [2.0.0-preview.3](https://www.nuget.org/packages/Microsoft.Azure.SpringCloud.Client/2.0.0-preview.3) | | | -| Storage - Files Data Lake | NuGet [2.0.1-alpha.1](https://www.nuget.org/packages/Microsoft.Azure.DataLake.Store/2.0.1-alpha.1) | [docs](https://learn.microsoft.com/dotnet/api/overview/azure/data-lake-store) | GitHub [2.0.1-alpha.1](https://github.com/Azure/azure-data-lake-store-net/tree/1.2.3-alpha) | +| Storage - Files Data Lake | NuGet [2.0.1-alpha.1](https://www.nuget.org/packages/Microsoft.Azure.DataLake.Store/2.0.1-alpha.1) | [docs](/dotnet/api/overview/azure/data-lake-store) | GitHub [2.0.1-alpha.1](https://github.com/Azure/azure-data-lake-store-net/tree/1.2.3-alpha) | | Synapse Analytics | NuGet [0.1.0-preview](https://www.nuget.org/packages/Microsoft.Azure.Synapse/0.1.0-preview) | | GitHub [0.1.0-preview](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Synapse_0.1.0-preview/sdk/synapse/Microsoft.Azure.Synapse/) | | Tables | NuGet [2.1.2](https://www.nuget.org/packages/Microsoft.Azure.CosmosDB.Table/2.1.2) | | | | Video Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingVideoSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingVideoSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingVideoSearch) | @@ -485,7 +485,7 @@ | Functions extension for Azure SQL and SQL Server | NuGet [3.1.284](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Sql/3.1.284) | | | | Functions extension for Cosmos DB | NuGet [4.8.1](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.CosmosDB/4.8.1) | | GitHub [4.8.1](https://github.com/Azure/azure-webjobs-sdk-extensions/tree/cosmos-v3.0.7/src/WebJobs.Extensions.CosmosDB) | | Functions extension for DocumentDB | NuGet [1.3.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.DocumentDB/1.3.0) | | GitHub [1.3.0](https://github.com/Azure/azure-webjobs-sdk-extensions) | -| Functions extension for Durable Task Framework | NuGet [3.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.DurableTask/3.0.0) | [docs](https://learn.microsoft.com/dotnet/api/overview/azure/functions) | GitHub [3.0.0](https://github.com/Azure/azure-functions-durable-extension/tree/v2.2.2/src/WebJobs.Extensions.DurableTask) | +| Functions extension for Durable Task Framework | NuGet [3.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.DurableTask/3.0.0) | [docs](/dotnet/api/overview/azure/functions) | GitHub [3.0.0](https://github.com/Azure/azure-functions-durable-extension/tree/v2.2.2/src/WebJobs.Extensions.DurableTask) | | Functions extension for Durable Task Framework - isolated worker | NuGet [1.2.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.DurableTask/1.2.0) | | | | Functions extension for HTTP | NuGet [3.2.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Http/3.2.0) | | GitHub [3.2.0](https://github.com/Azure/azure-webjobs-sdk-extensions/tree/v3.0.2/src/WebJobs.Extensions.Http) | | Functions extension for IoT Edge | NuGet [1.0.7](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.EdgeHub/1.0.7) | | GitHub [1.0.7](https://github.com/Azure/iotedge/tree/1.0.7/edge-hub) | diff --git a/docs/framework/release-notes/2024/10-08-october-security-and-quality-rollup.md b/docs/framework/release-notes/2024/10-08-october-security-and-quality-rollup.md index 3e1f789d0e706..ae6bcc805fb90 100644 --- a/docs/framework/release-notes/2024/10-08-october-security-and-quality-rollup.md +++ b/docs/framework/release-notes/2024/10-08-october-security-and-quality-rollup.md @@ -36,7 +36,7 @@ Addresses an issue with May cumulative updates causing customers to observe runt ## Known issues -This release contains no known issues. +This release contains no known issues. ## Summary tables @@ -55,7 +55,7 @@ The following table outlines the updates in this release. | .NET Framework 3.5, 4.8.1 | [5044035](https://support.microsoft.com/kb/5044035) | | **Windows 11, version 21H2** |**[5044092](https://support.microsoft.com/kb/5044092)** | | .NET Framework 3.5, 4.8 | [5044023](https://support.microsoft.com/kb/5044023) | -| .NET Framework 3.5, 4.8.1 | [5044032](https://support.microsoft.com/kb/5044032**) | +| .NET Framework 3.5, 4.8.1 | [5044032](https://support.microsoft.com/kb/5044032) | | **Microsoft server operating system, version 21H2** | **[5044099](https://support.microsoft.com/kb/5044099)** | | .NET Framework 3.5, 4.8 | [5044025](https://support.microsoft.com/kb/5044025) | | .NET Framework 3.5, 4.8.1 | [5044035](https://support.microsoft.com/kb/5044035) | diff --git a/docs/fundamentals/code-analysis/quality-rules/ca2013.md b/docs/fundamentals/code-analysis/quality-rules/ca2013.md index 83ec21af6493f..c872c30789ad2 100644 --- a/docs/fundamentals/code-analysis/quality-rules/ca2013.md +++ b/docs/fundamentals/code-analysis/quality-rules/ca2013.md @@ -9,7 +9,6 @@ helpviewer_keywords: - "DoNotUseReferenceEqualsWithValueTypes" - "CA2013" author: buyaa-n -ms.author: bunamnan --- # CA2013: Do not use ReferenceEquals with value types From eb1812f749eb918b6bac95e506f58626a8b32741 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Fri, 22 Nov 2024 06:56:26 -0800 Subject: [PATCH 03/11] Update package index with latest published versions (#43689) --- docs/azure/includes/dotnet-all.md | 8 ++++---- docs/azure/includes/dotnet-new.md | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index 4b4c3cbab96e7..10e35c72c35c3 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -68,6 +68,7 @@ | Maps Search | NuGet [2.0.0-beta.4](https://www.nuget.org/packages/Azure.Maps.Search/2.0.0-beta.4) | [docs](/dotnet/api/overview/azure/Maps.Search-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [2.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Maps.Search_2.0.0-beta.4/sdk/maps/Azure.Maps.Search/) | | Media Analytics Edge | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Azure.Media.Analytics.Edge/1.0.0-beta.1) | [docs](/dotnet/api/overview/azure/Media.Analytics.Edge-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Media.Analytics.Edge_1.0.0-beta.1/sdk/mediaservices/Azure.Media.Analytics.Edge) | | Metrics Advisor | NuGet [1.1.0](https://www.nuget.org/packages/Azure.AI.MetricsAdvisor/1.1.0) | [docs](/dotnet/api/overview/azure/AI.MetricsAdvisor-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.MetricsAdvisor_1.1.0/sdk/metricsadvisor/Azure.AI.MetricsAdvisor/) | +| Microsoft Playwright Testing | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/1.0.0-beta.3) | [docs](/dotnet/api/overview/azure/Developer.MicrosoftPlaywrightTesting.TestLogger-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger_1.0.0-beta.3/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/) | | Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents | NuGet [1.0.1](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents/1.0.1) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents_1.0.1/sdk/entra/Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents/) | | Microsoft.Azure.WebPubSub.AspNetCore | NuGet [1.4.0](https://www.nuget.org/packages/Microsoft.Azure.WebPubSub.AspNetCore/1.4.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebPubSub.AspNetCore-readme) | GitHub [1.4.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebPubSub.AspNetCore_1.4.0/sdk/webpubsub/Microsoft.Azure.WebPubSub.AspNetCore/) | | Microsoft.Azure.WebPubSub.Common | NuGet [1.4.0](https://www.nuget.org/packages/Microsoft.Azure.WebPubSub.Common/1.4.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebPubSub.Common-readme) | GitHub [1.4.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebPubSub.Common_1.4.0/sdk/webpubsub/Microsoft.Azure.WebPubSub.Common/) | @@ -75,6 +76,7 @@ | Models Repository | NuGet [1.0.0-preview.6](https://www.nuget.org/packages/Azure.IoT.ModelsRepository/1.0.0-preview.6) | [docs](/dotnet/api/overview/azure/IoT.ModelsRepository-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-preview.6](https://github.com/Azure/azure-sdk-for-net/tree/Azure.IoT.ModelsRepository_1.0.0-preview.6/sdk/modelsrepository/Azure.IoT.ModelsRepository/) | | Monitor Ingestion | NuGet [1.1.2](https://www.nuget.org/packages/Azure.Monitor.Ingestion/1.1.2) | [docs](/dotnet/api/overview/azure/Monitor.Ingestion-readme) | GitHub [1.1.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Monitor.Ingestion_1.1.2/sdk/monitor/Azure.Monitor.Ingestion/) | | Monitor Query | NuGet [1.5.0](https://www.nuget.org/packages/Azure.Monitor.Query/1.5.0) | [docs](/dotnet/api/overview/azure/Monitor.Query-readme) | GitHub [1.5.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Monitor.Query_1.5.0/sdk/monitor/Azure.Monitor.Query/) | +| NUnit ? Microsoft Playwright Testing | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.Developer.MicrosoftPlaywrightTesting.NUnit/1.0.0-beta.3) | [docs](/dotnet/api/overview/azure/Developer.MicrosoftPlaywrightTesting.NUnit-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Developer.MicrosoftPlaywrightTesting.NUnit_1.0.0-beta.3/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.NUnit/) | | OpenAI Assistants | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Azure.AI.OpenAI.Assistants/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/AI.OpenAI.Assistants-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.OpenAI.Assistants_1.0.0-beta.4/sdk/openai/Azure.AI.OpenAI.Assistants/) | | OpenAI Inference | NuGet [2.0.0](https://www.nuget.org/packages/Azure.AI.OpenAI/2.0.0)
NuGet [2.1.0-beta.2](https://www.nuget.org/packages/Azure.AI.OpenAI/2.1.0-beta.2) | [docs](/dotnet/api/overview/azure/AI.OpenAI-readme) | GitHub [2.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.OpenAI_2.0.0/sdk/openai/Azure.AI.OpenAI/)
GitHub [2.1.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.OpenAI_2.1.0-beta.2/sdk/openai/Azure.AI.OpenAI/) | | OpenTelemetry AspNetCore | NuGet [1.2.0](https://www.nuget.org/packages/Azure.Monitor.OpenTelemetry.AspNetCore/1.2.0)
NuGet [1.3.0-beta.2](https://www.nuget.org/packages/Azure.Monitor.OpenTelemetry.AspNetCore/1.3.0-beta.2) | [docs](/dotnet/api/overview/azure/Monitor.OpenTelemetry.AspNetCore-readme) | GitHub [1.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Monitor.OpenTelemetry.AspNetCore_1.2.0/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/)
GitHub [1.3.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Monitor.OpenTelemetry.AspNetCore_1.3.0-beta.2/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/) | @@ -244,7 +246,7 @@ | Resource Management - HDInsight | NuGet [1.1.0](https://www.nuget.org/packages/Azure.ResourceManager.HDInsight/1.1.0)
NuGet [1.2.0-beta.3](https://www.nuget.org/packages/Azure.ResourceManager.HDInsight/1.2.0-beta.3) | [docs](/dotnet/api/overview/azure/ResourceManager.HDInsight-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HDInsight_1.1.0/sdk/hdinsight/Azure.ResourceManager.HDInsight/)
GitHub [1.2.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HDInsight_1.2.0-beta.3/sdk/hdinsight/Azure.ResourceManager.HDInsight/) | | Resource Management - HDInsight Containers | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Azure.ResourceManager.HDInsight.Containers/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/ResourceManager.HDInsight.Containers-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HDInsight.Containers_1.0.0-beta.4/sdk/hdinsightcontainers/Azure.ResourceManager.HDInsight.Containers/) | | Resource Management - Health Bot | NuGet [1.1.0](https://www.nuget.org/packages/Azure.ResourceManager.HealthBot/1.1.0) | [docs](/dotnet/api/overview/azure/ResourceManager.HealthBot-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HealthBot_1.1.0/sdk/healthbot/Azure.ResourceManager.HealthBot/) | -| Resource Management - Health Data AI Services | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.HealthDataAIServices/1.0.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.HealthDataAIServices-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HealthDataAIServices_1.0.0-beta.1/sdk/healthdataaiservices/Azure.ResourceManager.HealthDataAIServices/) | +| Resource Management - Health Data AI Services | NuGet [1.0.0](https://www.nuget.org/packages/Azure.ResourceManager.HealthDataAIServices/1.0.0) | [docs](/dotnet/api/overview/azure/ResourceManager.HealthDataAIServices-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HealthDataAIServices_1.0.0/sdk/healthdataaiservices/Azure.ResourceManager.HealthDataAIServices/) | | Resource Management - Healthcare APIs | NuGet [1.3.0](https://www.nuget.org/packages/Azure.ResourceManager.HealthcareApis/1.3.0) | [docs](/dotnet/api/overview/azure/ResourceManager.HealthcareApis-readme) | GitHub [1.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HealthcareApis_1.3.0/sdk/healthcareapis/Azure.ResourceManager.HealthcareApis/) | | Resource Management - Hybrid Compute | NuGet [1.0.0](https://www.nuget.org/packages/Azure.ResourceManager.HybridCompute/1.0.0) | [docs](/dotnet/api/overview/azure/ResourceManager.HybridCompute-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HybridCompute_1.0.0/sdk/hybridcompute/Azure.ResourceManager.HybridCompute/) | | Resource Management - Hybrid Connectivity | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Azure.ResourceManager.HybridConnectivity/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/ResourceManager.HybridConnectivity-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HybridConnectivity_1.0.0-beta.4/sdk/hybridconnectivity/Azure.ResourceManager.HybridConnectivity/) | @@ -366,8 +368,6 @@ | System Net Client Model | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/System.Net.ClientModel/1.0.0-beta.1) | | | | Unknown Display Name | NuGet [1.0.1-beta.3](https://www.nuget.org/packages/Azure.AI.ContentSafety.Extension.Embedded.Image/1.0.1-beta.3) | | | | Unknown Display Name | NuGet [1.0.0](https://www.nuget.org/packages/Azure.AI.ContentSafety.Extension.Embedded.Text/1.0.0)
NuGet [1.0.1-beta.3](https://www.nuget.org/packages/Azure.AI.ContentSafety.Extension.Embedded.Text/1.0.1-beta.3) | | | -| Unknown Display Name | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.Developer.MicrosoftPlaywrightTesting.NUnit/1.0.0-beta.3) | | | -| Unknown Display Name | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/1.0.0-beta.3) | | | | Unknown Display Name | NuGet [1.0.4-preview](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.MySql/1.0.4-preview) | | | | Unknown Display Name | NuGet [1.0.4-preview](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.MySql/1.0.4-preview) | | | | Unknown Display Name | NuGet [1.41.1](https://www.nuget.org/packages/Microsoft.CognitiveServices.Speech.CLI/1.41.1) | | | @@ -428,7 +428,7 @@ | LUIS Runtime | NuGet [3.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime/3.1.0-preview.1) | | GitHub [3.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime_3.1.0-preview.1/sdk/cognitiveservices/Language.LUIS.Runtime) | | Media Live Video Analytics Edge | NuGet [1.0.4-preview.1](https://www.nuget.org/packages/Microsoft.Azure.Media.LiveVideoAnalytics.Edge/1.0.4-preview.1) | | GitHub [1.0.4-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Media.LiveVideoAnalytics.Edge_1.0.4-preview.1/sdk/mediaservices/Microsoft.Azure.Media.LiveVideoAnalytics.Edge) | | Microsoft.Azure.Amqp | NuGet [2.6.9](https://www.nuget.org/packages/Microsoft.Azure.Amqp/2.6.9) | | | -| Microsoft.Azure.Devices | NuGet [1.39.1](https://www.nuget.org/packages/Microsoft.Azure.Devices/1.39.1)
NuGet [2.0.0-preview007](https://www.nuget.org/packages/Microsoft.Azure.Devices/2.0.0-preview007) | | | +| Microsoft.Azure.Devices | NuGet [1.40.0](https://www.nuget.org/packages/Microsoft.Azure.Devices/1.40.0)
NuGet [2.0.0-preview007](https://www.nuget.org/packages/Microsoft.Azure.Devices/2.0.0-preview007) | | | | Microsoft.Azure.Devices.Authentication | NuGet [2.0.0-preview001](https://www.nuget.org/packages/Microsoft.Azure.Devices.Authentication/2.0.0-preview001) | | | | Microsoft.Azure.Devices.Client.PCL | NuGet [1.0.16](https://www.nuget.org/packages/Microsoft.Azure.Devices.Client.PCL/1.0.16) | | | | Microsoft.Azure.Devices.ProtocolGateway.Core | NuGet [2.0.1](https://www.nuget.org/packages/Microsoft.Azure.Devices.ProtocolGateway.Core/2.0.1) | | | diff --git a/docs/azure/includes/dotnet-new.md b/docs/azure/includes/dotnet-new.md index 792ed654f8e55..50e1ef55a6ce8 100644 --- a/docs/azure/includes/dotnet-new.md +++ b/docs/azure/includes/dotnet-new.md @@ -69,6 +69,7 @@ | Maps Search | NuGet [2.0.0-beta.4](https://www.nuget.org/packages/Azure.Maps.Search/2.0.0-beta.4) | [docs](/dotnet/api/overview/azure/Maps.Search-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [2.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Maps.Search_2.0.0-beta.4/sdk/maps/Azure.Maps.Search/) | | Media Analytics Edge | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Azure.Media.Analytics.Edge/1.0.0-beta.1) | [docs](/dotnet/api/overview/azure/Media.Analytics.Edge-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Media.Analytics.Edge_1.0.0-beta.1/sdk/mediaservices/Azure.Media.Analytics.Edge) | | Metrics Advisor | NuGet [1.1.0](https://www.nuget.org/packages/Azure.AI.MetricsAdvisor/1.1.0) | [docs](/dotnet/api/overview/azure/AI.MetricsAdvisor-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.MetricsAdvisor_1.1.0/sdk/metricsadvisor/Azure.AI.MetricsAdvisor/) | +| Microsoft Playwright Testing | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/1.0.0-beta.3) | [docs](/dotnet/api/overview/azure/Developer.MicrosoftPlaywrightTesting.TestLogger-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger_1.0.0-beta.3/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.TestLogger/) | | Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents | NuGet [1.0.1](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents/1.0.1) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents_1.0.1/sdk/entra/Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents/) | | Microsoft.Azure.WebPubSub.AspNetCore | NuGet [1.4.0](https://www.nuget.org/packages/Microsoft.Azure.WebPubSub.AspNetCore/1.4.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebPubSub.AspNetCore-readme) | GitHub [1.4.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebPubSub.AspNetCore_1.4.0/sdk/webpubsub/Microsoft.Azure.WebPubSub.AspNetCore/) | | Microsoft.Azure.WebPubSub.Common | NuGet [1.4.0](https://www.nuget.org/packages/Microsoft.Azure.WebPubSub.Common/1.4.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebPubSub.Common-readme) | GitHub [1.4.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebPubSub.Common_1.4.0/sdk/webpubsub/Microsoft.Azure.WebPubSub.Common/) | @@ -76,6 +77,7 @@ | Models Repository | NuGet [1.0.0-preview.6](https://www.nuget.org/packages/Azure.IoT.ModelsRepository/1.0.0-preview.6) | [docs](/dotnet/api/overview/azure/IoT.ModelsRepository-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-preview.6](https://github.com/Azure/azure-sdk-for-net/tree/Azure.IoT.ModelsRepository_1.0.0-preview.6/sdk/modelsrepository/Azure.IoT.ModelsRepository/) | | Monitor Ingestion | NuGet [1.1.2](https://www.nuget.org/packages/Azure.Monitor.Ingestion/1.1.2) | [docs](/dotnet/api/overview/azure/Monitor.Ingestion-readme) | GitHub [1.1.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Monitor.Ingestion_1.1.2/sdk/monitor/Azure.Monitor.Ingestion/) | | Monitor Query | NuGet [1.5.0](https://www.nuget.org/packages/Azure.Monitor.Query/1.5.0) | [docs](/dotnet/api/overview/azure/Monitor.Query-readme) | GitHub [1.5.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Monitor.Query_1.5.0/sdk/monitor/Azure.Monitor.Query/) | +| NUnit ? Microsoft Playwright Testing | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.Developer.MicrosoftPlaywrightTesting.NUnit/1.0.0-beta.3) | [docs](/dotnet/api/overview/azure/Developer.MicrosoftPlaywrightTesting.NUnit-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Developer.MicrosoftPlaywrightTesting.NUnit_1.0.0-beta.3/sdk/playwrighttesting/Azure.Developer.MicrosoftPlaywrightTesting.NUnit/) | | OpenAI Assistants | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Azure.AI.OpenAI.Assistants/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/AI.OpenAI.Assistants-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.OpenAI.Assistants_1.0.0-beta.4/sdk/openai/Azure.AI.OpenAI.Assistants/) | | OpenAI Inference | NuGet [2.0.0](https://www.nuget.org/packages/Azure.AI.OpenAI/2.0.0)
NuGet [2.1.0-beta.2](https://www.nuget.org/packages/Azure.AI.OpenAI/2.1.0-beta.2) | [docs](/dotnet/api/overview/azure/AI.OpenAI-readme) | GitHub [2.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.OpenAI_2.0.0/sdk/openai/Azure.AI.OpenAI/)
GitHub [2.1.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.OpenAI_2.1.0-beta.2/sdk/openai/Azure.AI.OpenAI/) | | OpenTelemetry AspNetCore | NuGet [1.2.0](https://www.nuget.org/packages/Azure.Monitor.OpenTelemetry.AspNetCore/1.2.0)
NuGet [1.3.0-beta.2](https://www.nuget.org/packages/Azure.Monitor.OpenTelemetry.AspNetCore/1.3.0-beta.2) | [docs](/dotnet/api/overview/azure/Monitor.OpenTelemetry.AspNetCore-readme) | GitHub [1.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Monitor.OpenTelemetry.AspNetCore_1.2.0/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/)
GitHub [1.3.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Monitor.OpenTelemetry.AspNetCore_1.3.0-beta.2/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/) | @@ -250,7 +252,7 @@ | Resource Management - HDInsight | NuGet [1.1.0](https://www.nuget.org/packages/Azure.ResourceManager.HDInsight/1.1.0)
NuGet [1.2.0-beta.3](https://www.nuget.org/packages/Azure.ResourceManager.HDInsight/1.2.0-beta.3) | [docs](/dotnet/api/overview/azure/ResourceManager.HDInsight-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HDInsight_1.1.0/sdk/hdinsight/Azure.ResourceManager.HDInsight/)
GitHub [1.2.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HDInsight_1.2.0-beta.3/sdk/hdinsight/Azure.ResourceManager.HDInsight/) | | Resource Management - HDInsight Containers | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Azure.ResourceManager.HDInsight.Containers/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/ResourceManager.HDInsight.Containers-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HDInsight.Containers_1.0.0-beta.4/sdk/hdinsightcontainers/Azure.ResourceManager.HDInsight.Containers/) | | Resource Management - Health Bot | NuGet [1.1.0](https://www.nuget.org/packages/Azure.ResourceManager.HealthBot/1.1.0) | [docs](/dotnet/api/overview/azure/ResourceManager.HealthBot-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HealthBot_1.1.0/sdk/healthbot/Azure.ResourceManager.HealthBot/) | -| Resource Management - Health Data AI Services | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.HealthDataAIServices/1.0.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.HealthDataAIServices-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HealthDataAIServices_1.0.0-beta.1/sdk/healthdataaiservices/Azure.ResourceManager.HealthDataAIServices/) | +| Resource Management - Health Data AI Services | NuGet [1.0.0](https://www.nuget.org/packages/Azure.ResourceManager.HealthDataAIServices/1.0.0) | [docs](/dotnet/api/overview/azure/ResourceManager.HealthDataAIServices-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HealthDataAIServices_1.0.0/sdk/healthdataaiservices/Azure.ResourceManager.HealthDataAIServices/) | | Resource Management - Healthcare APIs | NuGet [1.3.0](https://www.nuget.org/packages/Azure.ResourceManager.HealthcareApis/1.3.0) | [docs](/dotnet/api/overview/azure/ResourceManager.HealthcareApis-readme) | GitHub [1.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HealthcareApis_1.3.0/sdk/healthcareapis/Azure.ResourceManager.HealthcareApis/) | | Resource Management - Hybrid Compute | NuGet [1.0.0](https://www.nuget.org/packages/Azure.ResourceManager.HybridCompute/1.0.0) | [docs](/dotnet/api/overview/azure/ResourceManager.HybridCompute-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HybridCompute_1.0.0/sdk/hybridcompute/Azure.ResourceManager.HybridCompute/) | | Resource Management - Hybrid Connectivity | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Azure.ResourceManager.HybridConnectivity/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/ResourceManager.HybridConnectivity-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HybridConnectivity_1.0.0-beta.4/sdk/hybridconnectivity/Azure.ResourceManager.HybridConnectivity/) | From c85c4d13f01cda1cc3c72842fe682d476ddacb52 Mon Sep 17 00:00:00 2001 From: alexwolfmsft <93200798+alexwolfmsft@users.noreply.github.com> Date: Fri, 22 Nov 2024 11:07:15 -0500 Subject: [PATCH 04/11] Migrate quickstarts to Extensions AI library (#43673) * Migrate quickstarts to Extensions AI library --------- Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --- docs/ai/quickstarts/get-started-openai.md | 206 ++++++---------- .../quickstarts/includes/clone-sample-repo.md | 2 +- .../quickstarts/includes/create-ai-service.md | 4 +- .../quickstart-azure-openai-tool.md | 223 ++++++------------ .../quickstart-openai-summarize-text.md | 4 +- .../azure-openai/ChatAppAI.csproj | 20 ++ .../build-chat-app/azure-openai/Program.cs | 51 ++++ .../openai/ExtensionsOpenAI.csproj | 16 ++ .../snippets/build-chat-app/openai/Program.cs | 50 ++++ .../azure-openai/FunctionCallingAI.csproj | 21 ++ .../function-calling/azure-openai/Program.cs | 42 ++++ .../openai/FunctionCallingAI.csproj | 17 ++ .../function-calling/openai/Program.cs | 40 ++++ 13 files changed, 399 insertions(+), 297 deletions(-) create mode 100644 docs/ai/quickstarts/snippets/build-chat-app/azure-openai/ChatAppAI.csproj create mode 100644 docs/ai/quickstarts/snippets/build-chat-app/azure-openai/Program.cs create mode 100644 docs/ai/quickstarts/snippets/build-chat-app/openai/ExtensionsOpenAI.csproj create mode 100644 docs/ai/quickstarts/snippets/build-chat-app/openai/Program.cs create mode 100644 docs/ai/quickstarts/snippets/function-calling/azure-openai/FunctionCallingAI.csproj create mode 100644 docs/ai/quickstarts/snippets/function-calling/azure-openai/Program.cs create mode 100644 docs/ai/quickstarts/snippets/function-calling/openai/FunctionCallingAI.csproj create mode 100644 docs/ai/quickstarts/snippets/function-calling/openai/Program.cs diff --git a/docs/ai/quickstarts/get-started-openai.md b/docs/ai/quickstarts/get-started-openai.md index 3ef018134108e..82fbc56116200 100644 --- a/docs/ai/quickstarts/get-started-openai.md +++ b/docs/ai/quickstarts/get-started-openai.md @@ -12,214 +12,146 @@ zone_pivot_groups: openai-library # Build an AI chat app with .NET - -:::zone target="docs" pivot="openai" - +In this quickstart, you learn how to create a conversational .NET console chat app using an OpenAI or Azure OpenAI model. The app uses the [`Microsoft.Extensions.AI`](https://www.nuget.org/packages/Microsoft.Extensions.AI) library so you can write code using AI abstractions rather than a specific SDK. AI abstractions enable you to change the underlying AI model with minimal code changes. + +> [!NOTE] +> The [`Microsoft.Extensions.AI`](https://www.nuget.org/packages/Microsoft.Extensions.AI/) library is currently in Preview. -Get started with OpenAI and [Semantic Kernel](../semantic-kernel-dotnet-overview.md) by creating a simple .NET 8 console chat application. The application will run locally and use the OpenAI `gpt-3.5-turbo` model. Follow these steps to get access to OpenAI and learn how to use Semantic Kernel. +:::zone target="docs" pivot="openai" -[!INCLUDE [download-alert](includes/prerequisites-openai.md)] +[!INCLUDE [openai-prereqs](includes/prerequisites-openai.md)] :::zone-end - :::zone target="docs" pivot="azure-openai" - -Get started with OpenAI and [Semantic Kernel](../semantic-kernel-dotnet-overview.md) by creating a simple .NET 8 console chat application. The application will run locally and connect to the OpenAI `gpt-35-turbo` model deployed into Azure OpenAI. Follow these steps to provision Azure OpenAI and learn how to use Semantic Kernel. - -[!INCLUDE [download-alert](includes/prerequisites-azure-openai.md)] +[!INCLUDE [azure-openai-prereqs](includes/prerequisites-azure-openai.md)] :::zone-end -## Get the sample project +[!INCLUDE [semantic-kernel](../../azure/includes/semantic-kernel.md)] [!INCLUDE [clone-sample-repo](includes/clone-sample-repo.md)] -:::zone target="docs" pivot="azure-openai" +## Create the app -## Create the Azure OpenAI service +Complete the following steps to create a .NET console app to connect to an AI model. -# [Azure Developer CLI](#tab/azd) +1. In an empty directory on your computer, use the `dotnet new` command to create a new console app: -[!INCLUDE [deploy-azd](includes/deploy-azd.md)] + ```dotnetcli + dotnet new console -o ChatAppAI + ``` -# [Azure CLI](#tab/azure-cli) +1. Change directory into the app folder: -1. To provision an Azure OpenAI service and model using the Azure CLI, complete the steps in the [Create and deploy an Azure OpenAI Service resource](/azure/ai-services/openai/how-to/create-resource?pivots=cli) article. + ```dotnetcli + cd ChatAppAI + ``` -1. From a terminal or command prompt, navigate to the `src\quickstarts\azure-openai\semantic-kernel\02-HikerAI` directory. +1. Install the required packages: -1. Run the following commands to configure your OpenAI API key as a secret for the sample app: + :::zone target="docs" pivot="azure-openai" ```bash - dotnet user-secrets init - dotnet user-secrets set OpenAIKey - -# [Azure Portal](#tab/azure-portal) - -1. To provision an Azure OpenAI service and model using the Azure portal, complete the steps in the [Create and deploy an Azure OpenAI Service resource](/azure/ai-services/openai/how-to/create-resource?pivots=web-portal) article. + dotnet add package Azure.Identity + dotnet add package Azure.AI.OpenAI + dotnet add package Microsoft.Extensions.AI.OpenAI + dotnet add package Microsoft.Extensions.Configuration + dotnet add package Microsoft.Extensions.Configuration.UserSecrets + ``` -1. From a terminal or command prompt, navigate to the `src\quickstarts\azure-openai\semantic-kernel\02-HikerAI` directory. + :::zone-end -1. Run the following commands to configure your OpenAI API key as a secret for the sample app: + :::zone target="docs" pivot="openai" ```bash - dotnet user-secrets init - dotnet user-secrets set OpenAIKey - ---- - -:::zone-end - -## Try the HikerAI sample - - -:::zone target="docs" pivot="openai" + dotnet add package OpenAI + dotnet add package Microsoft.Extensions.AI.OpenAI + dotnet add package Microsoft.Extensions.Configuration + dotnet add package Microsoft.Extensions.Configuration.UserSecrets + ``` -1. From a terminal or command prompt, navigate to the `src\quickstarts\azure-openai\semantic-kernel\02-HikerAI` directory. + :::zone-end -1. Run the following commands to configure your OpenAI API key as a secret for the sample app: +1. Open the app in Visual Studio Code (or your editor of choice). ```bash - dotnet user-secrets init - dotnet user-secrets set OpenAIKey - ``` - -1. Use the `dotnet run` command to run the app: - - ```dotnetcli - dotnet run + code . ``` -:::zone-end - :::zone target="docs" pivot="azure-openai" -1. From a terminal or command prompt, navigate to the `semantic-kernel\02-HikerAI` directory. - -2. Use the `dotnet run` command to run the app: - - ```dotnetcli - dotnet run - ``` - - > [!TIP] - > If you get an error message, the Azure OpenAI resources might not have finished deploying. Wait a couple of minutes and try again. +[!INCLUDE [create-ai-service](includes/create-ai-service.md)] :::zone-end :::zone target="docs" pivot="openai" -## Explore the code - -The app uses the [`Microsoft.SemanticKernel`](https://www.nuget.org/packages/Microsoft.SemanticKernel) package to send and receive requests to the OpenAI service. +## Configure the app -The app code is contained within the **Program.cs** file. The first several lines of code set configuration values and get the OpenAI Key that was previously set using the `dotnet user-secrets` command. +1. Navigate to the root of your .NET project from a terminal or command prompt. -```csharp -var config = new ConfigurationBuilder().AddUserSecrets().Build(); -string model = "gpt-3.5-turbo"; -string key = config["OpenAIKey"]; -``` - -The `OpenAIChatCompletionService` service facilitates the requests and responses. +1. Run the following commands to configure your OpenAI API key as a secret for the sample app: -```csharp -// Create the OpenAI Chat Completion Service -OpenAIChatCompletionService service = new(model, key); -``` + ```bash + dotnet user-secrets init + dotnet user-secrets set OpenAIKey + dotnet user-secrets set ModelName + ``` :::zone-end - -:::zone target="docs" pivot="azure-openai" - +## Add the app code -## Explore the code +The app uses the [`Microsoft.Extensions.AI`](https://www.nuget.org/packages/Microsoft.Extensions.AI/) package to send and receive requests to the AI model and is designed to provide users with information about hiking trails. -The application uses the [`Microsoft.SemanticKernel`](https://www.nuget.org/packages/Microsoft.SemanticKernel) package to send and receive requests to an Azure OpenAI service deployed in Azure. +1. In the **Program.cs** file, add the following code to connect and authenticate to the AI model. -The entire application is contained within the **Program.cs** file. The first several lines of code retrieve the secrets and configuration values that were set in the `dotnet user-secrets` for you during the application provisioning. + :::zone target="docs" pivot="azure-openai" -```csharp -// Retrieve the local secrets saved during the Azure deployment -var config = new ConfigurationBuilder().AddUserSecrets().Build(); -string endpoint = config["AZURE_OPENAI_ENDPOINT"]; -string deployment = config["AZURE_OPENAI_GPT_NAME"]; -``` + :::code language="csharp" source="snippets/build-chat-app/azure-openai/program.cs" range="1-12"::: -The `AzureOpenAIChatCompletionService` service facilitates the requests and responses. + > [!NOTE] + > searches for authentication credentials from your local tooling. If you aren't using the `azd` template to provision the Azure OpenAI resource, you'll need to assign the `Azure AI Developer` role to the account you used to sign in to Visual Studio or the Azure CLI. For more information, see [Authenticate to Azure AI services with .NET](../azure-ai-services-authentication.md). -```csharp -// Create the Azure OpenAI Chat Completion Service -AzureOpenAIChatCompletionService service = new(deployment, endpoint, new DefaultAzureCredential()); -``` + :::zone-end -:::zone-end + :::zone target="docs" pivot="openai" -Add a system prompt to provide more context to the model, which influences model behavior and the generated completions during the conversation. + :::code language="csharp" source="snippets/build-chat-app/openai/program.cs" range="1-11"::: -```csharp -// Start the conversation with context for the AI model -ChatHistory chatHistory = new(""" - You are a hiking enthusiast who helps people discover fun hikes in their area. - You are upbeat and friendly. You introduce yourself when first saying hello. - When helping people out, you always ask them for this information - to inform the hiking recommendation you provide: + :::zone-end - 1. Where they are located - 2. What hiking intensity they are looking for +1. Create a system prompt to provide the AI model with initial role context and instructions about hiking recommendations: - You will then provide three suggestions for nearby hikes that vary in length - after you get that information. You will also share an interesting fact about - the local nature on the hikes when making a recommendation. - """); -``` + :::code language="csharp" source="snippets/build-chat-app/openai/program.cs" range="13-30"::: -Add a user message to the chat history using the `AddUserMessage` function. Use the `GetChatMessageContentAsync` function to instruct the model to generate a response based off the system prompt and the user request. +1. Create a conversational loop that accepts an input prompt from the user, sends the prompt to the model, and prints the response completion: -```csharp - -// Add user message to chat history -chatHistory.AddUserMessage("Hi! Apparently you can help me find a hike that I will like?"); - -// Print User Message to console -Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}"); - -// Get response -var response = await service.GetChatMessageContentAsync( - chatHistory, new OpenAIPromptExecutionSettings() { MaxTokens = 400 }); -``` + :::code language="csharp" source="snippets/build-chat-app/openai/program.cs" range="32-51"::: -Add the response from the mode to maintain the chat history. - -```csharp -// Add response to chat history -chatHistory.Add(response); +1. Use the `dotnet run` command to run the app: -// Print Response to console -Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}"); -``` + ```dotnetcli + dotnet run + ``` -Customize the system prompt and user message to see how the model responds to help you find a hike that you'll like. + The app prints out the completion response from the AI model. Send additional follow up prompts and ask other questions to experiment with the AI chat functionality. - :::zone target="docs" pivot="azure-openai" - + ## Clean up resources -Remove the corresponding deployment and all resources when you no longer need the sample application or resources. +When you no longer need the sample application or resources, remove the corresponding deployment and all resources. ```azdeveloper azd down ``` -[!INCLUDE [troubleshoot](includes/troubleshoot.md)] - :::zone-end ## Next steps -- [Quickstart - Get insight about your data from .NET AI chat app](quickstart-ai-chat-with-data.md) -- [Generate text and conversations with .NET and OpenAI Completions](/training/modules/open-ai-dotnet-text-completions/) +- [Quickstart - Chat with a local AI model](quickstart-local-ai.md) +- [Generate images using AI with .NET](quickstart-openai-generate-images.md) diff --git a/docs/ai/quickstarts/includes/clone-sample-repo.md b/docs/ai/quickstarts/includes/clone-sample-repo.md index cf0519bc57332..c27f5d28d91b0 100644 --- a/docs/ai/quickstarts/includes/clone-sample-repo.md +++ b/docs/ai/quickstarts/includes/clone-sample-repo.md @@ -7,7 +7,7 @@ ms.topic: include ## Clone the sample repository - You can create your own app and follow along the steps in the sections ahead, or you can clone the GitHub repository that contains the completed sample apps for all of the quickstarts. The sample repo is also structured as an Azure Developer CLI template that can provision an Azure OpenAI resource for you. + You can create your own app using the steps in the sections ahead, or you can clone the GitHub repository that contains the completed sample apps for all of the quickstarts. If you plan to use Azure OpenAI, the sample repo is also structured as an Azure Developer CLI template that can provision an Azure OpenAI resource for you. ```bash git clone https://github.com/dotnet/ai-samples.git diff --git a/docs/ai/quickstarts/includes/create-ai-service.md b/docs/ai/quickstarts/includes/create-ai-service.md index 470e74356373b..2c9532b80d143 100644 --- a/docs/ai/quickstarts/includes/create-ai-service.md +++ b/docs/ai/quickstarts/includes/create-ai-service.md @@ -10,7 +10,7 @@ 1. From a terminal or command prompt, navigate to the root of your project directory. -1. Run the following commands to configure your OpenAI API key as a secret for the sample app: +1. Run the following commands to configure your Azure OpenAI endpoint and model name for the sample app: ```bash dotnet user-secrets init @@ -24,7 +24,7 @@ 1. From a terminal or command prompt, navigate to the root of your project directory. -1. Run the following commands to configure your OpenAI API key as a secret for the sample app: +1. Run the following commands to configure your Azure OpenAI endpoint and model name for the sample app: ```bash dotnet user-secrets init diff --git a/docs/ai/quickstarts/quickstart-azure-openai-tool.md b/docs/ai/quickstarts/quickstart-azure-openai-tool.md index 13e0f625acf09..225c1f7821a51 100644 --- a/docs/ai/quickstarts/quickstart-azure-openai-tool.md +++ b/docs/ai/quickstarts/quickstart-azure-openai-tool.md @@ -10,220 +10,135 @@ zone_pivot_groups: openai-library # CustomerIntent: As a .NET developer new to OpenAI, I want deploy and use sample code to interact to learn from the sample code how to extend the model using Tools. --- -# Extend OpenAI using Tools and execute a local Function with .NET +# Invoke .NET functions using an AI model - -:::zone target="docs" pivot="openai" - +In this quickstart, you create a .NET console AI chat app to connect to an AI model with local function calling enabled. The app uses the [`Microsoft.Extensions.AI`](https://www.nuget.org/packages/Microsoft.Extensions.AI) library so you can write code using AI abstractions rather than a specific SDK. AI abstractions enable you to change the underlying AI model with minimal code changes. + +> [!NOTE] +> The [`Microsoft.Extensions.AI`](https://www.nuget.org/packages/Microsoft.Extensions.AI/) library is currently in Preview. -Get started with AI by creating a simple .NET 8 console chat application. The application will run locally and use the OpenAI `gpt-3.5-turbo` model, using Tools to extend the model's capabilities by calling a local .NET method. Follow these steps to get access to OpenAI and learn how to use Semantic Kernel. +:::zone target="docs" pivot="openai" -[!INCLUDE [download-alert](includes/prerequisites-openai.md)] +[!INCLUDE [openai-prereqs](includes/prerequisites-openai.md)] :::zone-end - :::zone target="docs" pivot="azure-openai" - -Get started with AI by creating a simple .NET 8 console chat application. The application will run locally and use the OpenAI `gpt-35-turbo` model deployed into an Azure OpenAI account. It uses Tools to extend the model's capabilities by calling a local .NET method. Follow these steps to provision Azure OpenAI and learn how to use Semantic Kernel. - -[!INCLUDE [download-alert](includes/prerequisites-azure-openai.md)] +[!INCLUDE [azure-openai-prereqs](includes/prerequisites-azure-openai.md)] :::zone-end -## Get the sample project +[!INCLUDE [semantic-kernel](../../azure/includes/semantic-kernel.md)] [!INCLUDE [clone-sample-repo](includes/clone-sample-repo.md)] -:::zone target="docs" pivot="azure-openai" +## Create the app -## Create the Azure OpenAI service +Complete the following steps to create a .NET console app to connect to an AI model. -# [Azure Developer CLI](#tab/azd) +1. In an empty directory on your computer, use the `dotnet new` command to create a new console app: -[!INCLUDE [deploy-azd](includes/deploy-azd.md)] + ```dotnetcli + dotnet new console -o FunctionCallingAI + ``` -# [Azure CLI](#tab/azure-cli) +1. Change directory into the app folder: -1. To provision an Azure OpenAI service and model using the Azure CLI, complete the steps in the [Create and deploy an Azure OpenAI Service resource](/azure/ai-services/openai/how-to/create-resource?pivots=cli) article. + ```dotnetcli + cd FunctionCallingAI + ``` -1. From a terminal or command prompt, navigate to the `src\quickstarts\azure-openai\semantic-kernel\04-HikerAIPro` directory. +1. Install the required packages: -1. Run the following commands to configure your OpenAI API key as a secret for the sample app: + :::zone target="docs" pivot="azure-openai" ```bash - dotnet user-secrets init - dotnet user-secrets set OpenAIKey - -# [Azure Portal](#tab/azure-portal) - -1. To provision an Azure OpenAI service and model using the Azure portal, complete the steps in the [Create and deploy an Azure OpenAI Service resource](/azure/ai-services/openai/how-to/create-resource?pivots=web-portal) article. + dotnet add package Azure.Identity + dotnet add package Azure.AI.OpenAI + dotnet add package Microsoft.Extensions.AI + dotnet add package Microsoft.Extensions.AI.OpenAI + dotnet add package Microsoft.Extensions.Configuration + dotnet add package Microsoft.Extensions.Configuration.UserSecrets + ``` -1. From a terminal or command prompt, navigate to the `src\quickstarts\azure-openai\semantic-kernel\04-HikerAIPro` directory. + :::zone-end -1. Run the following commands to configure your OpenAI API key as a secret for the sample app: + :::zone target="docs" pivot="openai" ```bash - dotnet user-secrets init - dotnet user-secrets set OpenAIKey - ---- - -:::zone-end - -## Try the the hiker pro sample + dotnet add package Microsoft.Extensions.AI + dotnet add package Microsoft.Extensions.AI.OpenAI + dotnet add package Microsoft.Extensions.Configuration + dotnet add package Microsoft.Extensions.Configuration.UserSecrets + ``` - -:::zone target="docs" pivot="openai" + :::zone-end -1. From a terminal or command prompt, navigate to the `src\quickstarts\openai\semantic-kernel\04-HikerAIPro` directory. - -1. Run the following commands to configure your OpenAI API key as a secret for the sample app: +1. Open the app in Visual Studio code or your editor of choice ```bash - dotnet user-secrets init - dotnet user-secrets set OpenAIKey + code . ``` -1. Use the `dotnet run` command to run the app: - - ```dotnetcli - dotnet run - ``` - -:::zone-end - :::zone target="docs" pivot="azure-openai" -1. From a terminal or command prompt, navigate to the `semantic-kernel\04-HikerAIPro` directory. - -2. Use the `dotnet run` command to run the app: - - ```dotnetcli - dotnet run - ``` - - > [!TIP] - > If you get an error message, the Azure OpenAI resources might not have finished deploying. Wait a couple of minutes and try again. +[!INCLUDE [create-ai-service](includes/create-ai-service.md)] :::zone-end - -## Understand the code - - :::zone target="docs" pivot="openai" -The application uses the [`Microsoft.SemanticKernel`](https://www.nuget.org/packages/Microsoft.SemanticKernel) package to send and receive requests to the OpenAI service. - -The entire application is contained within the **Program.cs** file. The first several lines of code set configuration values and get the OpenAI Key that was previously set using the `dotnet user-secrets` command. - -```csharp -var config = new ConfigurationBuilder().AddUserSecrets().Build(); -string model = "gpt-3.5-turbo"; -string key = config["OpenAIKey"]; -``` +## Configure the app -The `Kernel` class facilitates the requests and responses with the help of `AddOpenAIChatCompletion` service. +1. Navigate to the root of your .NET projet from a terminal or command prompt. -```csharp -// Create a Kernel containing the OpenAI Chat Completion Service -IKernelBuilder b = Kernel.CreateBuilder(); +1. Run the following commands to configure your OpenAI API key as a secret for the sample app: -Kernel kernel = b - .AddOpenAIChatCompletion(model, key) - .Build(); -``` + ```bash + dotnet user-secrets init + dotnet user-secrets set OpenAIKey + dotnet user-secrets set ModelName + ``` :::zone-end -:::zone target="docs" pivot="azure-openai" - - -The application uses the [`Microsoft.SemanticKernel`](https://www.nuget.org/packages/Microsoft.SemanticKernel) package to send and receive requests to the OpenAI service. +## Add the app code -The entire application is contained within the **Program.cs** file. The first several lines of code loads up secrets and configuration values that were set in the `dotnet user-secrets` for you during the application provisioning. +The app uses the [`Microsoft.Extensions.AI`](https://www.nuget.org/packages/Microsoft.Extensions.AI/) package to send and receive requests to the AI model. -```csharp -var config = new ConfigurationBuilder().AddUserSecrets().Build(); -string endpoint = config["AZURE_OPENAI_ENDPOINT"]; -string deployment = config["AZURE_OPENAI_GPT_NAME"]; -``` - -The `Kernel` class facilitates the requests and responses with the help of `AzureOpenAIChatCompletion` service. +1. In the **Program.cs** file, add the following code to connect and authenticate to the AI model. The `ChatClient` is also configured to use function invocation, which allows .NET functions in your code to be called by the AI model. -```csharp -// Create a Kernel containing the Azure OpenAI Chat Completion Service -IKernelBuilder b = Kernel.CreateBuilder(); + :::zone target="docs" pivot="azure-openai" -Kernel kernel = b - .AddAzureOpenAIChatCompletion(deployment, endpoint, new DefaultAzureCredential()) - .Build(); -``` + :::code language="csharp" source="snippets/function-calling/azure-openai/program.cs" range="1-16"::: -:::zone-end + > [!NOTE] + > searches for authentication credentials from your local tooling. If you aren't using the `azd` template to provision the Azure OpenAI resource, you'll need to assign the `Azure AI Developer` role to the account you used to sign in to Visual Studio or the Azure CLI. For more information, see [Authenticate to Azure AI services with .NET](../azure-ai-services-authentication.md). -The functions `ImportPluginFromFunctions` and `CreateFromMethod` define the local function that will be called by the model. - -```csharp -// Add a new plugin with a local .NET function that should be available to the AI model -// For convenience and clarity of into the code, this standalone local method handles tool call responses. It will fake a call to a weather API and return the current weather for the specified location. -kernel.ImportPluginFromFunctions("WeatherPlugin", -[ - KernelFunctionFactory.CreateFromMethod( - ([Description("The city, e.g. Montreal, Sidney")] string location, string unit = null) => - { - // Here you would call a weather API to get the weather for the location - return "Periods of rain or drizzle, 15 C"; - }, "get_current_weather", "Get the current weather in a given location") -]); -``` + :::zone-end -Once the `kernel` client is created, the code uses a system prompt to provide context and influence the completion tone and content. Note how the weather is emphasized in the system prompt. + :::zone target="docs" pivot="openai" -```csharp -ChatHistory chatHistory = new(""" - You are a hiking enthusiast who helps people discover fun hikes in their area. - You are upbeat and friendly. Good weather is important for a good hike. - Only make recommendations if the weather is good or if people insist. - You introduce yourself when first saying hello. When helping people out, - you always ask them for this information to inform the hiking recommendation you provide: + :::code language="csharp" source="snippets/function-calling/openai/program.cs" range="1-14"::: - 1. Where they are located - 2. What hiking intensity they are looking for + :::zone-end - You will then provide three suggestions for nearby hikes that vary in length - after you get that information. You will also share an interesting fact about the local - nature on the hikes when making a recommendation. - """); -``` +1. Create a new `ChatOptions` object that contains an inline function the AI model can call to get the current weather. The function declaration includes a delegate to run logic and name and description parameters to describe the purpose of the function to the AI model. -The app also adds a user message to the model using the `AddUserMessage` function. The `GetChatMessageContentAsync` function sends the chat history to the model to generate a response based off the system and user prompts. + :::code language="csharp" source="snippets/function-calling/openai/program.cs" range="16-26"::: -```csharp -chatHistory.AddUserMessage(""" - Is the weather is good today for a hike? - If yes, I live in the greater Montreal area and would like an easy hike. - I don't mind driving a bit to get there. I don't want the hike to be over 10 miles round trip. - I'd consider a point-to-point hike. - I want the hike to be as isolated as possible. I don't want to see many people. - I would like it to be as bug free as possible. - """); +1. Add a system prompt to the `chatHistory` to provide context and instructions to the model. Send a user prompt with a question that requires the AI model to call the registered function to properly answer the question. -Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}"); + :::code language="csharp" source="snippets/function-calling/openai/program.cs" range="28-40"::: -chatHistory.Add(await service.GetChatMessageContentAsync( - chatHistory, - new OpenAIPromptExecutionSettings() - { - MaxTokens = 400 - })); +1. Use the `dotnet run` command to run the app: -Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}"); -``` + ```dotnetcli + dotnet run + ``` -Customize the system prompt and user message to see how the model responds to help you find a hike that you'll like. + The app prints a the completion response from the AI model that includes data provided by the .NET function. The AI model understood the registered function was available and called it automatically to generate a proper response. :::zone target="docs" pivot="azure-openai" @@ -235,11 +150,9 @@ When you no longer need the sample application or resources, remove the correspo azd down ``` -[!INCLUDE [troubleshoot](includes/troubleshoot.md)] - :::zone-end ## Next steps -- [Quickstart - Get insight about your data from a .NET AI chat app](quickstart-ai-chat-with-data.md) +- [Quickstart - Build an AI chat app with .NET](get-started-openai.md) - [Generate text and conversations with .NET and Azure OpenAI Completions](/training/modules/open-ai-dotnet-text-completions/) diff --git a/docs/ai/quickstarts/quickstart-openai-summarize-text.md b/docs/ai/quickstarts/quickstart-openai-summarize-text.md index 8ce9714500d2e..4c6ba4b4f1991 100644 --- a/docs/ai/quickstarts/quickstart-openai-summarize-text.md +++ b/docs/ai/quickstarts/quickstart-openai-summarize-text.md @@ -19,13 +19,13 @@ In this quickstart, you learn how to create a .NET console chat app to connect t :::zone target="docs" pivot="openai" -[!INCLUDE [azure-openai-prereqs](includes/prerequisites-azure-openai.md)] +[!INCLUDE [openai-prereqs](includes/prerequisites-openai.md)] :::zone-end :::zone target="docs" pivot="azure-openai" -[!INCLUDE [openai-prereqs](includes/prerequisites-openai.md)] +[!INCLUDE [azure-openai-prereqs](includes/prerequisites-azure-openai.md)] :::zone-end diff --git a/docs/ai/quickstarts/snippets/build-chat-app/azure-openai/ChatAppAI.csproj b/docs/ai/quickstarts/snippets/build-chat-app/azure-openai/ChatAppAI.csproj new file mode 100644 index 0000000000000..f269d006a3a95 --- /dev/null +++ b/docs/ai/quickstarts/snippets/build-chat-app/azure-openai/ChatAppAI.csproj @@ -0,0 +1,20 @@ + + + + Exe + net9.0 + enable + enable + 4d162886-0da5-4b62-a4db-d09780d06911 + + + + + + + + + + + + diff --git a/docs/ai/quickstarts/snippets/build-chat-app/azure-openai/Program.cs b/docs/ai/quickstarts/snippets/build-chat-app/azure-openai/Program.cs new file mode 100644 index 0000000000000..c6031d83718f5 --- /dev/null +++ b/docs/ai/quickstarts/snippets/build-chat-app/azure-openai/Program.cs @@ -0,0 +1,51 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.AI; +using Azure.AI.OpenAI; +using Azure.Identity; + +var config = new ConfigurationBuilder().AddUserSecrets().Build(); +string endpoint = config["AZURE_OPENAI_ENDPOINT"]; +string deployment = config["AZURE_OPENAI_GPT_NAME"]; + +IChatClient chatClient = + new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential()) + .AsChatClient(deployment); + +// Start the conversation with context for the AI model +List chatHistory = new() + { + new ChatMessage(ChatRole.System, """ + You are a friendly hiking enthusiast who helps people discover fun hikes in their area. + You introduce yourself when first saying hello. + When helping people out, you always ask them for this information + to inform the hiking recommendation you provide: + + 1. The location where they would like to hike + 2. What hiking intensity they are looking for + + You will then provide three suggestions for nearby hikes that vary in length + after you get that information. You will also share an interesting fact about + the local nature on the hikes when making a recommendation. At the end of your + response, ask if there is anything else you can help with. + """) + }; + +while (true) +{ + // Get user prompt and add to chat history + Console.WriteLine("Your prompt:"); + var userPrompt = Console.ReadLine(); + chatHistory.Add(new ChatMessage(ChatRole.User, userPrompt)); + + // Stream the AI response and add to chat history + Console.WriteLine("AI Response:"); + var response = ""; + await foreach (var item in + chatClient.CompleteStreamingAsync(chatHistory)) + { + Console.Write(item.Text); + response += item.Text; + } + chatHistory.Add(new ChatMessage(ChatRole.Assistant, response)); + Console.WriteLine(); +} diff --git a/docs/ai/quickstarts/snippets/build-chat-app/openai/ExtensionsOpenAI.csproj b/docs/ai/quickstarts/snippets/build-chat-app/openai/ExtensionsOpenAI.csproj new file mode 100644 index 0000000000000..870fe0459d937 --- /dev/null +++ b/docs/ai/quickstarts/snippets/build-chat-app/openai/ExtensionsOpenAI.csproj @@ -0,0 +1,16 @@ + + + + Exe + net9.0 + enable + enable + + + + + + + + + diff --git a/docs/ai/quickstarts/snippets/build-chat-app/openai/Program.cs b/docs/ai/quickstarts/snippets/build-chat-app/openai/Program.cs new file mode 100644 index 0000000000000..12e694e1ab8c8 --- /dev/null +++ b/docs/ai/quickstarts/snippets/build-chat-app/openai/Program.cs @@ -0,0 +1,50 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.AI; +using OpenAI; + +var config = new ConfigurationBuilder().AddUserSecrets().Build(); +string model = config["ModelName"]; +string key = config["OpenAIKey"]; + +// Create the IChatClient +IChatClient chatClient = + new OpenAIClient(key).AsChatClient(model); + +// Start the conversation with context for the AI model +List chatHistory = new() + { + new ChatMessage(ChatRole.System, """ + You are a friendly hiking enthusiast who helps people discover fun hikes in their area. + You introduce yourself when first saying hello. + When helping people out, you always ask them for this information + to inform the hiking recommendation you provide: + + 1. The location where they would like to hike + 2. What hiking intensity they are looking for + + You will then provide three suggestions for nearby hikes that vary in length + after you get that information. You will also share an interesting fact about + the local nature on the hikes when making a recommendation. At the end of your + response, ask if there is anything else you can help with. + """) + }; + +while (true) +{ + // Get user prompt and add to chat history + Console.WriteLine("Your prompt:"); + var userPrompt = Console.ReadLine(); + chatHistory.Add(new ChatMessage(ChatRole.User, userPrompt)); + + // Stream the AI response and add to chat history + Console.WriteLine("AI Response:"); + var response = ""; + await foreach (var item in + chatClient.CompleteStreamingAsync(chatHistory)) + { + Console.Write(item.Text); + response += item.Text; + } + chatHistory.Add(new ChatMessage(ChatRole.Assistant, response)); + Console.WriteLine(); +} diff --git a/docs/ai/quickstarts/snippets/function-calling/azure-openai/FunctionCallingAI.csproj b/docs/ai/quickstarts/snippets/function-calling/azure-openai/FunctionCallingAI.csproj new file mode 100644 index 0000000000000..d4ba16e09b3dd --- /dev/null +++ b/docs/ai/quickstarts/snippets/function-calling/azure-openai/FunctionCallingAI.csproj @@ -0,0 +1,21 @@ + + + + Exe + net9.0 + enable + enable + 4d162886-0da5-4b62-a4db-d09780d06911 + + + + + + + + + + + + + diff --git a/docs/ai/quickstarts/snippets/function-calling/azure-openai/Program.cs b/docs/ai/quickstarts/snippets/function-calling/azure-openai/Program.cs new file mode 100644 index 0000000000000..5d9dee4294635 --- /dev/null +++ b/docs/ai/quickstarts/snippets/function-calling/azure-openai/Program.cs @@ -0,0 +1,42 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.AI; +using Azure.AI.OpenAI; +using Azure.Identity; + +var config = new ConfigurationBuilder().AddUserSecrets().Build(); +string endpoint = config["AZURE_OPENAI_ENDPOINT"]; +string deployment = config["AZURE_OPENAI_GPT_NAME"]; + +IChatClient client = + new ChatClientBuilder() + .UseFunctionInvocation() + .Use( + new AzureOpenAIClient(new Uri(endpoint), + new DefaultAzureCredential()) + .AsChatClient(deployment)); + +// Add a new plugin with a local .NET function that should be available to the AI model +var chatOptions = new ChatOptions +{ + Tools = [AIFunctionFactory.Create((string location, string unit) => + { + // Here you would call a weather API to get the weather for the location + return "Periods of rain or drizzle, 15 C"; + }, + "get_current_weather", + "Get the current weather in a given location")] +}; + +// System prompt to provide context +List chatHistory = [new(ChatRole.System, """ + You are a hiking enthusiast who helps people discover fun hikes in their area. You are upbeat and friendly. + """)]; + +// Weather conversation relevant to the registered function +chatHistory.Add(new ChatMessage(ChatRole.User, + "I live in Montreal and I'm looking for a moderate intensity hike. What's the current weather like? ")); +Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}"); + +var response = await client.CompleteAsync(chatHistory, chatOptions); +chatHistory.Add(new ChatMessage(ChatRole.Assistant, response.Message.Contents)); +Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}"); diff --git a/docs/ai/quickstarts/snippets/function-calling/openai/FunctionCallingAI.csproj b/docs/ai/quickstarts/snippets/function-calling/openai/FunctionCallingAI.csproj new file mode 100644 index 0000000000000..8941b559a1c54 --- /dev/null +++ b/docs/ai/quickstarts/snippets/function-calling/openai/FunctionCallingAI.csproj @@ -0,0 +1,17 @@ + + + + Exe + net9.0 + enable + enable + + + + + + + + + + diff --git a/docs/ai/quickstarts/snippets/function-calling/openai/Program.cs b/docs/ai/quickstarts/snippets/function-calling/openai/Program.cs new file mode 100644 index 0000000000000..c57da3c4c3275 --- /dev/null +++ b/docs/ai/quickstarts/snippets/function-calling/openai/Program.cs @@ -0,0 +1,40 @@ +using Microsoft.Extensions.AI; +using Microsoft.Extensions.Configuration; +using OpenAI; + +var config = new ConfigurationBuilder().AddUserSecrets().Build(); +string model = config["ModelName"]; +string key = config["OpenAIKey"]; + +IChatClient client = + new ChatClientBuilder() + .UseFunctionInvocation() + .Use( + new OpenAIClient(key) + .AsChatClient(model)); + +// Add a new plugin with a local .NET function that should be available to the AI model +var chatOptions = new ChatOptions +{ + Tools = [AIFunctionFactory.Create((string location, string unit) => + { + // Here you would call a weather API to get the weather for the location + return "Periods of rain or drizzle, 15 C"; + }, + "get_current_weather", + "Get the current weather in a given location")] +}; + +// System prompt to provide context +List chatHistory = [new(ChatRole.System, """ + You are a hiking enthusiast who helps people discover fun hikes in their area. You are upbeat and friendly. + """)]; + +// Weather conversation relevant to the registered function +chatHistory.Add(new ChatMessage(ChatRole.User, + "I live in Montreal and I'm looking for a moderate intensity hike. What's the current weather like? ")); +Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}"); + +var response = await client.CompleteAsync(chatHistory, chatOptions); +chatHistory.Add(new ChatMessage(ChatRole.Assistant, response.Message.Contents)); +Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last()}"); From 4d6a4522c38f1fd6efcc9f997070577f307f2d50 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Fri, 22 Nov 2024 09:04:41 -0800 Subject: [PATCH 05/11] Update package index with latest published versions (#43707) --- docs/azure/includes/dotnet-all.md | 16 ++++++++-------- docs/azure/includes/dotnet-new.md | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index 10e35c72c35c3..6ae946b8714d8 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -329,7 +329,7 @@ | Resource Management - Self Help | NuGet [1.0.0](https://www.nuget.org/packages/Azure.ResourceManager.SelfHelp/1.0.0)
NuGet [1.1.0-beta.4](https://www.nuget.org/packages/Azure.ResourceManager.SelfHelp/1.1.0-beta.4) | [docs](/dotnet/api/overview/azure/ResourceManager.SelfHelp-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.SelfHelp_1.0.0/sdk/selfhelp/Azure.ResourceManager.SelfHelp/)
GitHub [1.1.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.SelfHelp_1.1.0-beta.4/sdk/selfhelp/Azure.ResourceManager.SelfHelp/) | | Resource Management - Service Bus | NuGet [1.0.1](https://www.nuget.org/packages/Azure.ResourceManager.ServiceBus/1.0.1)
NuGet [1.1.0-beta.7](https://www.nuget.org/packages/Azure.ResourceManager.ServiceBus/1.1.0-beta.7) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceBus-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceBus_1.0.1/sdk/servicebus/Azure.ResourceManager.ServiceBus/)
GitHub [1.1.0-beta.7](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceBus_1.1.0-beta.7/sdk/servicebus/Azure.ResourceManager.ServiceBus/) | | Resource Management - Service Fabric | NuGet [1.1.0](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabric/1.1.0)
NuGet [1.2.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabric/1.2.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceFabric-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabric_1.1.0/sdk/servicefabric/Azure.ResourceManager.ServiceFabric/)
GitHub [1.2.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabric_1.2.0-beta.1/sdk/servicefabric/Azure.ResourceManager.ServiceFabric/) | -| Resource Management - Service Fabric Managed Clusters | NuGet [1.2.0](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabricManagedClusters/1.2.0)
NuGet [1.3.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabricManagedClusters/1.3.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceFabricManagedClusters-readme) | GitHub [1.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabricManagedClusters_1.2.0/sdk/servicefabricmanagedclusters/Azure.ResourceManager.ServiceFabricManagedClusters/)
GitHub [1.3.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabricManagedClusters_1.3.0-beta.1/sdk/servicefabricmanagedclusters/Azure.ResourceManager.ServiceFabricManagedClusters/) | +| Resource Management - Service Fabric Managed Clusters | NuGet [1.2.0](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabricManagedClusters/1.2.0)
NuGet [1.3.0-beta.2](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabricManagedClusters/1.3.0-beta.2) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceFabricManagedClusters-readme) | GitHub [1.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabricManagedClusters_1.2.0/sdk/servicefabricmanagedclusters/Azure.ResourceManager.ServiceFabricManagedClusters/)
GitHub [1.3.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabricManagedClusters_1.3.0-beta.2/sdk/servicefabricmanagedclusters/Azure.ResourceManager.ServiceFabricManagedClusters/) | | Resource Management - Service Linker | NuGet [1.1.0](https://www.nuget.org/packages/Azure.ResourceManager.ServiceLinker/1.1.0) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceLinker-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceLinker_1.1.0/sdk/servicelinker/Azure.ResourceManager.ServiceLinker/) | | Resource Management - Service Networking | NuGet [1.0.1](https://www.nuget.org/packages/Azure.ResourceManager.ServiceNetworking/1.0.1) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceNetworking-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceNetworking_1.0.1/sdk/servicenetworking/Azure.ResourceManager.ServiceNetworking/) | | Resource Management - SignalR | NuGet [1.1.3](https://www.nuget.org/packages/Azure.ResourceManager.SignalR/1.1.3) | [docs](/dotnet/api/overview/azure/ResourceManager.SignalR-readme) | GitHub [1.1.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.SignalR_1.1.3/sdk/signalr/Azure.ResourceManager.SignalR/) | @@ -397,7 +397,7 @@ | Common | NuGet [2.2.1](https://www.nuget.org/packages/Microsoft.Azure.Common/2.2.1) | | | | Common - Dependencies | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Common.Dependencies/1.0.0) | | | | Computer Vision | NuGet [7.0.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Vision.ComputerVision/7.0.1) | | GitHub [7.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Vision.ComputerVision_6.0.0-preview.1/sdk/cognitiveservices/Vision.ComputerVision) | -| Cosmos DB | NuGet [3.42.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.42.0)
NuGet [3.47.0-preview.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.47.0-preview.0) | [docs](/dotnet/api/overview/azure/cosmosdb) | GitHub [3.42.0](https://github.com/Azure/azure-cosmos-dotnet-v3/tree/3.12.0/Microsoft.Azure.Cosmos) | +| Cosmos DB | NuGet [3.42.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.42.0)
NuGet [3.47.0-preview.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos/3.47.0-preview.0) | [docs](https://learn.microsoft.com/dotnet/api/overview/azure/cosmosdb) | GitHub [3.42.0](https://github.com/Azure/azure-cosmos-dotnet-v3/tree/3.12.0/Microsoft.Azure.Cosmos) | | Custom Image Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingCustomImageSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingCustomImageSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingCustomImageSearch) | | Custom Image Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.CustomImageSearch/2.0.0) | | | | Custom Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingCustomSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingCustomSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingCustomSearch) | @@ -413,15 +413,15 @@ | Entity Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.EntitySearch/2.0.0) | | | | Event Hubs - Service Fabric Processor | NuGet [0.5.4](https://www.nuget.org/packages/Microsoft.Azure.EventHubs.ServiceFabricProcessor/0.5.4) | | GitHub [0.5.4](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.EventHubs.ServiceFabricProcessor_0.5.4/sdk/eventhub/Microsoft.Azure.EventHubs.ServiceFabricProcessor/) | | Face | NuGet [2.8.0-preview.3](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Vision.Face/2.8.0-preview.3) | | GitHub [2.8.0-preview.3](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Vision.Face_2.6.0-preview.1/sdk/cognitiveservices/Vision.Face) | -| Feature Management | NuGet [3.0.0](https://www.nuget.org/packages/Microsoft.FeatureManagement/3.0.0) | [docs](/dotnet/api/microsoft.featuremanagement) | | +| Feature Management | NuGet [3.0.0](https://www.nuget.org/packages/Microsoft.FeatureManagement/3.0.0) | [docs](https://learn.microsoft.com/dotnet/api/microsoft.featuremanagement) | | | Gallery | NuGet [2.6.2-preview](https://www.nuget.org/packages/Microsoft.Azure.Gallery/2.6.2-preview) | | | | HDInsight - Job | NuGet [3.0.0-preview.3](https://www.nuget.org/packages/Microsoft.Azure.HDInsight.Job/3.0.0-preview.3) | | GitHub [3.0.0-preview.3](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.HDInsight.Job_3.0.0-preview.3/sdk/hdinsight/Microsoft.Azure.HDInsight.Job/) | | Image Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingImageSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingImageSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingImageSearch) | | Image Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.ImageSearch/2.0.0) | | | | IoT Edge Function | NuGet [3.5.3](https://www.nuget.org/packages/Microsoft.Azure.IoT.Edge.Function/3.5.3) | | | | IoT Plug and Play - Devices Client | NuGet [1.42.3](https://www.nuget.org/packages/Microsoft.Azure.Devices.Client/1.42.3)
NuGet [2.0.0-preview007](https://www.nuget.org/packages/Microsoft.Azure.Devices.Client/2.0.0-preview007) | | | -| Kusto Data | NuGet [9.3.1](https://www.nuget.org/packages/Microsoft.Azure.Kusto.Data/9.3.1) | [docs](/azure/data-explorer/kusto/api/netfx/about-kusto-data) | GitHub [9.3.1](https://github.com/Azure/azure-kusto-dotnet) | -| Kusto Ingest | NuGet [9.3.1](https://www.nuget.org/packages/Microsoft.Azure.Kusto.Ingest/9.3.1) | [docs](/azure/data-explorer/kusto/api/netfx/about-kusto-ingest) | GitHub [9.3.1](https://github.com/Azure/azure-kusto-dotnet) | +| Kusto Data | NuGet [9.3.1](https://www.nuget.org/packages/Microsoft.Azure.Kusto.Data/9.3.1) | [docs](https://learn.microsoft.com/azure/data-explorer/kusto/api/netfx/about-kusto-data) | GitHub [9.3.1](https://github.com/Azure/azure-kusto-dotnet) | +| Kusto Ingest | NuGet [9.3.1](https://www.nuget.org/packages/Microsoft.Azure.Kusto.Ingest/9.3.1) | [docs](https://learn.microsoft.com/azure/data-explorer/kusto/api/netfx/about-kusto-ingest) | GitHub [9.3.1](https://github.com/Azure/azure-kusto-dotnet) | | Local Search | NuGet [1.0.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingLocalSearch/1.0.0-preview.1) | | GitHub [1.0.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingLocalSearch_1.0.0-preview.1/sdk/cognitiveservices/Search.BingLocalSearch) | | Local Search | NuGet [0.9.0-preview](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.LocalSearch/0.9.0-preview) | | | | LUIS Authoring | NuGet [3.1.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring/3.1.0)
NuGet [3.2.0-preview.5](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring/3.2.0-preview.5) | | GitHub [3.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring_3.2.0-preview.3/sdk/cognitiveservices/Language.LUIS.Authoring) | @@ -449,7 +449,7 @@ | News Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.NewsSearch/2.0.0) | | | | Notification Hubs | NuGet [4.2.0](https://www.nuget.org/packages/Microsoft.Azure.NotificationHubs/4.2.0) | | GitHub [4.2.0](https://github.com/Azure/azure-notificationhubs-dotnet) | | Personalizer | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Personalizer/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Personalizer_1.0.0/sdk/cognitiveservices/Personalizer) | -| Relay | NuGet [3.0.1](https://www.nuget.org/packages/Microsoft.Azure.Relay/3.0.1) | [docs](/dotnet/api/overview/azure/service-bus-relay) | GitHub [3.0.1](https://github.com/Azure/azure-relay-dotnet/tree/2.0.1) | +| Relay | NuGet [3.0.1](https://www.nuget.org/packages/Microsoft.Azure.Relay/3.0.1) | [docs](https://learn.microsoft.com/dotnet/api/overview/azure/service-bus-relay) | GitHub [3.0.1](https://github.com/Azure/azure-relay-dotnet/tree/2.0.1) | | Schema Registry - Avro | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Microsoft.Azure.Kafka.SchemaRegistry.Avro/1.0.0-beta.1) | | | | Schema Registry - JSON | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Microsoft.Azure.Kafka.SchemaRegistry.Json/1.0.0-beta.1) | | | | Search - Common | NuGet [10.1.0](https://www.nuget.org/packages/Microsoft.Azure.Search.Common/10.1.0) | | GitHub [10.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Search.Common_10.1.0/sdk/search/Microsoft.Azure.Search.Common/) | @@ -460,7 +460,7 @@ | Speech Xamarin iOS | NuGet [1.25.0](https://www.nuget.org/packages/Microsoft.CognitiveServices.Speech.Xamarin.iOS/1.25.0) | | | | Spell Check | NuGet [4.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Language.SpellCheck/4.1.0-preview.1) | | GitHub [4.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Language.SpellCheck_4.1.0-preview.1/sdk/cognitiveservices/Language.SpellCheck) | | Spring Cloud Client | NuGet [2.0.0-preview.3](https://www.nuget.org/packages/Microsoft.Azure.SpringCloud.Client/2.0.0-preview.3) | | | -| Storage - Files Data Lake | NuGet [2.0.1-alpha.1](https://www.nuget.org/packages/Microsoft.Azure.DataLake.Store/2.0.1-alpha.1) | [docs](/dotnet/api/overview/azure/data-lake-store) | GitHub [2.0.1-alpha.1](https://github.com/Azure/azure-data-lake-store-net/tree/1.2.3-alpha) | +| Storage - Files Data Lake | NuGet [2.0.1-alpha.1](https://www.nuget.org/packages/Microsoft.Azure.DataLake.Store/2.0.1-alpha.1) | [docs](https://learn.microsoft.com/dotnet/api/overview/azure/data-lake-store) | GitHub [2.0.1-alpha.1](https://github.com/Azure/azure-data-lake-store-net/tree/1.2.3-alpha) | | Synapse Analytics | NuGet [0.1.0-preview](https://www.nuget.org/packages/Microsoft.Azure.Synapse/0.1.0-preview) | | GitHub [0.1.0-preview](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Synapse_0.1.0-preview/sdk/synapse/Microsoft.Azure.Synapse/) | | Tables | NuGet [2.1.2](https://www.nuget.org/packages/Microsoft.Azure.CosmosDB.Table/2.1.2) | | | | Video Search | NuGet [2.1.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.BingVideoSearch/2.1.0-preview.1) | | GitHub [2.1.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Search.BingVideoSearch_2.1.0-preview.1/sdk/cognitiveservices/Search.BingVideoSearch) | @@ -485,7 +485,7 @@ | Functions extension for Azure SQL and SQL Server | NuGet [3.1.284](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Sql/3.1.284) | | | | Functions extension for Cosmos DB | NuGet [4.8.1](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.CosmosDB/4.8.1) | | GitHub [4.8.1](https://github.com/Azure/azure-webjobs-sdk-extensions/tree/cosmos-v3.0.7/src/WebJobs.Extensions.CosmosDB) | | Functions extension for DocumentDB | NuGet [1.3.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.DocumentDB/1.3.0) | | GitHub [1.3.0](https://github.com/Azure/azure-webjobs-sdk-extensions) | -| Functions extension for Durable Task Framework | NuGet [3.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.DurableTask/3.0.0) | [docs](/dotnet/api/overview/azure/functions) | GitHub [3.0.0](https://github.com/Azure/azure-functions-durable-extension/tree/v2.2.2/src/WebJobs.Extensions.DurableTask) | +| Functions extension for Durable Task Framework | NuGet [3.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.DurableTask/3.0.0) | [docs](https://learn.microsoft.com/dotnet/api/overview/azure/functions) | GitHub [3.0.0](https://github.com/Azure/azure-functions-durable-extension/tree/v2.2.2/src/WebJobs.Extensions.DurableTask) | | Functions extension for Durable Task Framework - isolated worker | NuGet [1.2.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.DurableTask/1.2.0) | | | | Functions extension for HTTP | NuGet [3.2.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Http/3.2.0) | | GitHub [3.2.0](https://github.com/Azure/azure-webjobs-sdk-extensions/tree/v3.0.2/src/WebJobs.Extensions.Http) | | Functions extension for IoT Edge | NuGet [1.0.7](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.EdgeHub/1.0.7) | | GitHub [1.0.7](https://github.com/Azure/iotedge/tree/1.0.7/edge-hub) | diff --git a/docs/azure/includes/dotnet-new.md b/docs/azure/includes/dotnet-new.md index 50e1ef55a6ce8..504ef1f67ccaa 100644 --- a/docs/azure/includes/dotnet-new.md +++ b/docs/azure/includes/dotnet-new.md @@ -336,7 +336,7 @@ | Resource Management - Self Help | NuGet [1.0.0](https://www.nuget.org/packages/Azure.ResourceManager.SelfHelp/1.0.0)
NuGet [1.1.0-beta.4](https://www.nuget.org/packages/Azure.ResourceManager.SelfHelp/1.1.0-beta.4) | [docs](/dotnet/api/overview/azure/ResourceManager.SelfHelp-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.SelfHelp_1.0.0/sdk/selfhelp/Azure.ResourceManager.SelfHelp/)
GitHub [1.1.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.SelfHelp_1.1.0-beta.4/sdk/selfhelp/Azure.ResourceManager.SelfHelp/) | | Resource Management - Service Bus | NuGet [1.0.1](https://www.nuget.org/packages/Azure.ResourceManager.ServiceBus/1.0.1)
NuGet [1.1.0-beta.7](https://www.nuget.org/packages/Azure.ResourceManager.ServiceBus/1.1.0-beta.7) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceBus-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceBus_1.0.1/sdk/servicebus/Azure.ResourceManager.ServiceBus/)
GitHub [1.1.0-beta.7](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceBus_1.1.0-beta.7/sdk/servicebus/Azure.ResourceManager.ServiceBus/) | | Resource Management - Service Fabric | NuGet [1.1.0](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabric/1.1.0)
NuGet [1.2.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabric/1.2.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceFabric-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabric_1.1.0/sdk/servicefabric/Azure.ResourceManager.ServiceFabric/)
GitHub [1.2.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabric_1.2.0-beta.1/sdk/servicefabric/Azure.ResourceManager.ServiceFabric/) | -| Resource Management - Service Fabric Managed Clusters | NuGet [1.2.0](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabricManagedClusters/1.2.0)
NuGet [1.3.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabricManagedClusters/1.3.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceFabricManagedClusters-readme) | GitHub [1.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabricManagedClusters_1.2.0/sdk/servicefabricmanagedclusters/Azure.ResourceManager.ServiceFabricManagedClusters/)
GitHub [1.3.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabricManagedClusters_1.3.0-beta.1/sdk/servicefabricmanagedclusters/Azure.ResourceManager.ServiceFabricManagedClusters/) | +| Resource Management - Service Fabric Managed Clusters | NuGet [1.2.0](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabricManagedClusters/1.2.0)
NuGet [1.3.0-beta.2](https://www.nuget.org/packages/Azure.ResourceManager.ServiceFabricManagedClusters/1.3.0-beta.2) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceFabricManagedClusters-readme) | GitHub [1.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabricManagedClusters_1.2.0/sdk/servicefabricmanagedclusters/Azure.ResourceManager.ServiceFabricManagedClusters/)
GitHub [1.3.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceFabricManagedClusters_1.3.0-beta.2/sdk/servicefabricmanagedclusters/Azure.ResourceManager.ServiceFabricManagedClusters/) | | Resource Management - Service Linker | NuGet [1.1.0](https://www.nuget.org/packages/Azure.ResourceManager.ServiceLinker/1.1.0) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceLinker-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceLinker_1.1.0/sdk/servicelinker/Azure.ResourceManager.ServiceLinker/) | | Resource Management - Service Networking | NuGet [1.0.1](https://www.nuget.org/packages/Azure.ResourceManager.ServiceNetworking/1.0.1) | [docs](/dotnet/api/overview/azure/ResourceManager.ServiceNetworking-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.ServiceNetworking_1.0.1/sdk/servicenetworking/Azure.ResourceManager.ServiceNetworking/) | | Resource Management - SignalR | NuGet [1.1.3](https://www.nuget.org/packages/Azure.ResourceManager.SignalR/1.1.3) | [docs](/dotnet/api/overview/azure/ResourceManager.SignalR-readme) | GitHub [1.1.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.SignalR_1.1.3/sdk/signalr/Azure.ResourceManager.SignalR/) | From 23ee5727de99706c0241390e8b7693871c3df6c2 Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Fri, 22 Nov 2024 13:01:50 -0500 Subject: [PATCH 06/11] Update yield.md (#43706) Fixes anonymous feedback. --- docs/csharp/language-reference/statements/yield.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/csharp/language-reference/statements/yield.md b/docs/csharp/language-reference/statements/yield.md index ba8e2fac49378..c387eb9d627d9 100644 --- a/docs/csharp/language-reference/statements/yield.md +++ b/docs/csharp/language-reference/statements/yield.md @@ -38,7 +38,7 @@ You can't use the `yield` statements in: - methods with [in](../keywords/method-parameters.md#in-parameter-modifier), [ref](../keywords/ref.md), or [out](../keywords/method-parameters.md#out-parameter-modifier) parameters - [lambda expressions](../operators/lambda-expressions.md) and [anonymous methods](../operators/delegate-operator.md) - [unsafe blocks](../keywords/unsafe.md). Before C# 13, `yield` was invalid in any method with an `unsafe` block. Beginning with C# 13, you can use `yield` in methods with `unsafe` blocks, but not in the `unsafe` block. -- `yield return` and `yield break` can not be used in [try](../statements/exception-handling-statements.md), [catch](../statements/exception-handling-statements.md) and [finally](../statements/exception-handling-statements.md) blocks. +- `yield return` and `yield break` can not be used in [catch](../statements/exception-handling-statements.md) and [finally](../statements/exception-handling-statements.md) blocks, or in [try](../statements/exception-handling-statements.md) blocks with a corresponding `catch` block. The `yield return` and `yield break` statements can be used in a `try` block with no `catch` blocks, only a `finally` block. ## Execution of an iterator From 9517dc6d1270263d25caeaee503a65ffd8e0ef48 Mon Sep 17 00:00:00 2001 From: alexwolfmsft <93200798+alexwolfmsft@users.noreply.github.com> Date: Fri, 22 Nov 2024 13:04:55 -0500 Subject: [PATCH 07/11] Fix role assignment images (#43709) --- ...dev-group-to-role-azure-portal-6-240px.png | Bin 15765 -> 11107 bytes ...local-dev-group-to-role-azure-portal-6.png | Bin 15644 -> 16355 bytes ...dev-group-to-role-azure-portal-7-240px.png | Bin 13994 -> 8664 bytes ...local-dev-group-to-role-azure-portal-7.png | Bin 35750 -> 35047 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/azure/sdk/media/assign-local-dev-group-to-role-azure-portal-6-240px.png b/docs/azure/sdk/media/assign-local-dev-group-to-role-azure-portal-6-240px.png index be16e82654f3ef9ecf6849dd568f5a7ef60f0ade..b76ae1271389688cdc6a2a30b9dcd460312c1bbf 100644 GIT binary patch literal 11107 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 literal 15765 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 literal 15644 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 diff --git a/docs/azure/sdk/media/assign-local-dev-group-to-role-azure-portal-7-240px.png b/docs/azure/sdk/media/assign-local-dev-group-to-role-azure-portal-7-240px.png index 751f016e8088063f9d27a02f5e20b84243d6d1f0..77a376167bff52cc97dd6ac158de278b34c041e9 100644 GIT binary patch literal 8664 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 literal 13994 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 diff --git a/docs/azure/sdk/media/assign-local-dev-group-to-role-azure-portal-7.png b/docs/azure/sdk/media/assign-local-dev-group-to-role-azure-portal-7.png index 23adf1ccf8daa3360526174c5aeef026b03d5d6a..6051efea2f35a08cf7e7e2fcda8c384769c6b049 100644 GIT binary patch literal 35047 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 literal 35750 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%0AY$~oWN`>uD!0t_0&s}82EO9i4LC;+ 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 G@P7d2c;z+# From bcf3298a42cdfd911b57c8e0458f7debd54c9a0f Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Fri, 22 Nov 2024 13:12:38 -0500 Subject: [PATCH 08/11] Add class declaration (#43693) Fixes #43239 Add the class declaration for this type. --- docs/csharp/fundamentals/types/anonymous-types.md | 8 ++++++-- .../types/snippets/anonymous-types/Program.cs | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/csharp/fundamentals/types/anonymous-types.md b/docs/csharp/fundamentals/types/anonymous-types.md index f4523239ad885..d86d624246787 100644 --- a/docs/csharp/fundamentals/types/anonymous-types.md +++ b/docs/csharp/fundamentals/types/anonymous-types.md @@ -28,9 +28,13 @@ Anonymous types are typically used in the [`select`](../../language-reference/ke Anonymous types contain one or more public read-only properties. No other kinds of class members, such as methods or events, are valid. The expression that is used to initialize a property cannot be `null`, an anonymous function, or a pointer type. -The most common scenario is to initialize an anonymous type with properties from another type. In the following example, assume that a class exists that is named `Product`. Class `Product` includes `Color` and `Price` properties, together with other properties that you are not interested in. Variable `products` is a collection of `Product` objects. The anonymous type declaration starts with the `new` keyword. The declaration initializes a new type that uses only two properties from `Product`. Using anonymous types causes a smaller amount of data to be returned in the query. +The most common scenario is to initialize an anonymous type with properties from another type. In the following example, assume that a class exists that is named `Product`. Class `Product` includes `Color` and `Price` properties, together with other properties that you are not interested in: -If you don't specify member names in the anonymous type, the compiler gives the anonymous type members the same name as the property being used to initialize them. You provide a name for a property that's being initialized with an expression, as shown in the previous example. In the following example, the names of the properties of the anonymous type are `Color` and `Price`. +:::code language="csharp" source="snippets/anonymous-types/Program.cs" ID="ProductDefinition"::: + +The anonymous type declaration starts with the `new` keyword. The declaration initializes a new type that uses only two properties from `Product`. Using anonymous types causes a smaller amount of data to be returned in the query. + +If you don't specify member names in the anonymous type, the compiler gives the anonymous type members the same name as the property being used to initialize them. You provide a name for a property that's being initialized with an expression, as shown in the previous example. In the following example, the names of the properties of the anonymous type are `Color` and `Price`. The instances are item from the `products` collection of `Product` types: :::code language="csharp" source="snippets/anonymous-types/Program.cs" ID="snippet81"::: diff --git a/docs/csharp/fundamentals/types/snippets/anonymous-types/Program.cs b/docs/csharp/fundamentals/types/snippets/anonymous-types/Program.cs index ec5a8576d3c23..86423bb785516 100644 --- a/docs/csharp/fundamentals/types/snippets/anonymous-types/Program.cs +++ b/docs/csharp/fundamentals/types/snippets/anonymous-types/Program.cs @@ -4,11 +4,16 @@ namespace anonymous_types { + // class Product { public string? Color {get;set;} public decimal Price {get;set;} + public string? Name {get;set;} + public string? Category {get;set;} + public string? Size {get;set;} } + // class Anonymous { static void Main() From 2376471a001317658d3976d7e7b9d536e9a7da1b Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Fri, 22 Nov 2024 10:14:32 -0800 Subject: [PATCH 09/11] Update creating-app-with-plugin-support.md (#43679) --- .../tutorials/creating-app-with-plugin-support.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/core/tutorials/creating-app-with-plugin-support.md b/docs/core/tutorials/creating-app-with-plugin-support.md index 7420524c99219..22304c597b0ad 100644 --- a/docs/core/tutorials/creating-app-with-plugin-support.md +++ b/docs/core/tutorials/creating-app-with-plugin-support.md @@ -3,24 +3,24 @@ title: Create a .NET Core application with plugins description: Learn how to create a .NET Core application that supports plugins. author: jkoritzinsky ms.author: jekoritz -ms.date: 10/16/2019 +ms.date: 11/20/2024 --- # Create a .NET Core application with plugins -This tutorial shows you how to create a custom to load plugins. An is used to resolve the dependencies of the plugin. The tutorial correctly isolates the plugin's dependencies from the hosting application. You'll learn how to: +This tutorial shows you how to create a custom to load plugins. An is used to resolve the dependencies of the plugin. The tutorial provides a separate assembly context for the plugin's dependencies, allowing different assembly dependencies between the plugins and the hosting application. You'll learn how to: - Structure a project to support plugins. - Create a custom to load each plugin. - Use the type to allow plugins to have dependencies. - Author plugins that can be easily deployed by just copying the build artifacts. -## Prerequisites +> [!NOTE] +> Untrusted code cannot be safely loaded into a trusted .NET process. To provide a security or reliability boundary, consider a technology provided by your OS or virtualization platform. -- Install the [.NET 5 SDK](https://dotnet.microsoft.com/download) or a newer version. +## Prerequisites -> [!NOTE] -> The sample code targets .NET 5, but all the features it uses were introduced in .NET Core 3.0 and are available in all .NET releases since then. +- Install the [.NET SDK](https://dotnet.microsoft.com/download). ## Create the application From 4b20a2413fdd1265531e772bdbf6d223adf0c8c7 Mon Sep 17 00:00:00 2001 From: Nigusu Solomon Yenework <59111203+Nigusu-Allehu@users.noreply.github.com> Date: Fri, 22 Nov 2024 10:38:17 -0800 Subject: [PATCH 10/11] Update dotnet-nuget-why.md to include RID specific packages (#43672) --- docs/core/tools/dotnet-nuget-why.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/core/tools/dotnet-nuget-why.md b/docs/core/tools/dotnet-nuget-why.md index 2514722be9491..84426fcc1ff7c 100644 --- a/docs/core/tools/dotnet-nuget-why.md +++ b/docs/core/tools/dotnet-nuget-why.md @@ -29,6 +29,9 @@ First, restore the project in Visual Studio, or `msbuild.exe`. By default the assets file is in the project's `obj\` directory, but you can find the location with `msbuild.exe path\to\project.proj -getProperty:ProjectAssetsFile`. Finally, run `dotnet nuget why path\to\project.assets.json SomePackage`. +Starting with version 9.0.200, the command introduces support for runtime identifier (RID) specific packages by generating separate dependency trees for each RID and framework combination. +For example, if a project targets `net9.0` with the `win-x64` RID, the command generates trees for `net9.0/win-x64` and `net9.0`. + ## Arguments - **`PROJECT|SOLUTION`** From a80ab45f57ea8058fea204c20c9e0c942c801579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Amaury=20Lev=C3=A9?= Date: Fri, 22 Nov 2024 22:12:46 +0100 Subject: [PATCH 11/11] MSTest SDK - remove incorrect mention of net9 (#43716) --- docs/core/testing/unit-testing-mstest-sdk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/testing/unit-testing-mstest-sdk.md b/docs/core/testing/unit-testing-mstest-sdk.md index d1389adf2330c..b3c6c47656e0f 100644 --- a/docs/core/testing/unit-testing-mstest-sdk.md +++ b/docs/core/testing/unit-testing-mstest-sdk.md @@ -8,7 +8,7 @@ ms.date: 02/13/2024 # MSTest SDK overview -Introduced in .NET 9, [MSTest.Sdk](https://www.nuget.org/packages/MSTest.Sdk) is a [MSBuild project SDK](/visualstudio/msbuild/how-to-use-project-sdk) for building MSTest apps. It's possible to build a MSTest app without this SDK, however, the MSTest SDK is: +[MSTest.Sdk](https://www.nuget.org/packages/MSTest.Sdk) is a [MSBuild project SDK](/visualstudio/msbuild/how-to-use-project-sdk) for building MSTest apps. It's possible to build a MSTest app without this SDK, however, the MSTest SDK is: * Tailored towards providing a first-class experience for testing with MSTest. * The recommended target for most users.