From 0c1d11cf790bdd64cb293a2c13114974f19747ec Mon Sep 17 00:00:00 2001 From: Steve Smith Date: Mon, 15 Nov 2021 14:58:17 -0500 Subject: [PATCH 01/37] Blazor ebook frontmatter (#27086) * Update cs5001.md (#27080) * Update cs5001.md * Update docs/csharp/misc/cs5001.md Co-authored-by: David Pine * Remove redundant nullable operator (#27023) * Remove redundant nullable operator Remove redundant nullable operator for reference type. String is a reference type and always nullable, * Make undesired error more clear Co-authored-by: Bill Wagner Co-authored-by: Bill Wagner * update version * fix typo Co-authored-by: Machiel visser <16868513+machielvisser@users.noreply.github.com> Co-authored-by: David Pine Co-authored-by: Artur Khutak Co-authored-by: Bill Wagner --- .../architecture/blazor-for-web-forms-developers/index.md | 8 ++++---- docs/csharp/misc/cs5001.md | 2 +- docs/csharp/whats-new/csharp-10.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/architecture/blazor-for-web-forms-developers/index.md b/docs/architecture/blazor-for-web-forms-developers/index.md index f72f7b70cde5b..86ea2f37c8d78 100644 --- a/docs/architecture/blazor-for-web-forms-developers/index.md +++ b/docs/architecture/blazor-for-web-forms-developers/index.md @@ -4,7 +4,7 @@ description: Learn how to build full-stack web apps with .NET using Blazor and . author: danroth27 ms.author: daroth no-loc: [Blazor, WebAssembly] -ms.date: 02/02/2021 +ms.date: 11/15/2021 --- # Blazor for ASP.NET Web Forms Developers @@ -12,9 +12,9 @@ ms.date: 02/02/2021 > DOWNLOAD available at: -**EDITION v1.0** +**EDITION v6.0** - Updated to .NET 6 -Refer [changelog](https://aka.ms/blazor-ebook-changelog) for the book updates and community contributions. +Refer to [changelog](https://aka.ms/blazor-ebook-changelog) for the book updates and community contributions. PUBLISHED BY @@ -50,7 +50,7 @@ Authors: > **[Scott Addie](https://github.com/scottaddie)**, Senior Content Developer, Microsoft Corp. -> **[Steve "ardalis" Smith](https://ardalis.com)**, Software Architect and Trainer, Ardalis Services LLC +> **[Steve "@ardalis" Smith](https://github.com/ardalis)**, Software Architect and Trainer, NimblePros.com ## Introduction diff --git a/docs/csharp/misc/cs5001.md b/docs/csharp/misc/cs5001.md index 470ee6f48becc..da8494c2a34fb 100644 --- a/docs/csharp/misc/cs5001.md +++ b/docs/csharp/misc/cs5001.md @@ -14,7 +14,7 @@ Program does not contain a static 'Main' method suitable for an entry point This error occurs when no static `Main` method with a correct signature is found in the code that produces an executable file. It also occurs if the entry point function, `Main`, is defined with the wrong case, such as lower-case `main`. For information about the rules that apply to the `Main` method, see [Main() and Command-Line Arguments](../fundamentals/program-structure/main-command-line.md). -If the `Main` method has an `async` modifier, make sure that the [selected C# language version](../language-reference/configure-language-version.md) is 7.1 or higher. +If the `Main` method has an `async` modifier, make sure that the [selected C# language version](../language-reference/configure-language-version.md) is 7.1 or higher and to use `Task` or `Task` as the return type. The `Main` method is only required when compiling an executable file, that is, when the **exe** or **winexe** element of the [**TargetType**](../language-reference/compiler-options/output.md#targettype) compiler option is specified. The following Visual Studio project types specify one of these options by default: diff --git a/docs/csharp/whats-new/csharp-10.md b/docs/csharp/whats-new/csharp-10.md index 21a4793974964..10637b4c368be 100644 --- a/docs/csharp/whats-new/csharp-10.md +++ b/docs/csharp/whats-new/csharp-10.md @@ -119,7 +119,7 @@ int x = 0; Prior to C# 10, there were many scenarios where definite assignment and null-state analysis produced warnings that were false positives. These generally involved comparisons to boolean constants, accessing a variable only in the `true` or `false` statements in an `if` statement, and null coalescing expressions. These examples generated warnings in previous versions of C#, but don't in C# 10: ```csharp -string? representation; +string representation = "N/A"; if ((c != null) && c.GetDependentValue(out object obj)) == true) { representation = obj.ToString(); // undesired error From 1f1e5bb754888f86fd4b09c896e3e5a6428d4e87 Mon Sep 17 00:00:00 2001 From: Jakub Kozera Date: Mon, 15 Nov 2021 17:33:30 +0100 Subject: [PATCH 02/37] VS 2022 'preview' removed (#27070) --- docs/csharp/whats-new/tutorials/records.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/csharp/whats-new/tutorials/records.md b/docs/csharp/whats-new/tutorials/records.md index 350332c2c11c9..2485247495fb6 100644 --- a/docs/csharp/whats-new/tutorials/records.md +++ b/docs/csharp/whats-new/tutorials/records.md @@ -17,7 +17,7 @@ In this tutorial, you'll learn how to: ## Prerequisites -You'll need to set up your machine to run .NET 6 or later, including the C# 10 or later compiler. The C# 10 compiler is available starting with [Visual Studio 2022 preview](https://visualstudio.microsoft.com/vs) or the [.NET 6 SDK](https://dotnet.microsoft.com/download). +You'll need to set up your machine to run .NET 6 or later, including the C# 10 or later compiler. The C# 10 compiler is available starting with [Visual Studio 2022](https://visualstudio.microsoft.com/vs) or the [.NET 6 SDK](https://dotnet.microsoft.com/download). ## Characteristics of records From 7d054635b0f572d42ca04d9e69c3349c353a4d0b Mon Sep 17 00:00:00 2001 From: Azhar <17266828+mohamed-azhar@users.noreply.github.com> Date: Mon, 15 Nov 2021 21:34:44 +0500 Subject: [PATCH 03/37] Fixed Typo (#27072) changed short description to shortDescription in the comments to avoid confusion. --- .../builtin-types/snippets/shared/NullableReferenceTypes.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/csharp/language-reference/builtin-types/snippets/shared/NullableReferenceTypes.cs b/docs/csharp/language-reference/builtin-types/snippets/shared/NullableReferenceTypes.cs index 135c17770c241..bdd506b344f22 100644 --- a/docs/csharp/language-reference/builtin-types/snippets/shared/NullableReferenceTypes.cs +++ b/docs/csharp/language-reference/builtin-types/snippets/shared/NullableReferenceTypes.cs @@ -26,7 +26,7 @@ public class ProductDescription private string shortDescription; private string? detailedDescription; - public ProductDescription() // Warning! short description not initialized. + public ProductDescription() // Warning! shortDescription not initialized. { } From 7475617c0121971e7456fc2f0cc6d0f654f2ec57 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Mon, 15 Nov 2021 08:41:16 -0800 Subject: [PATCH 04/37] Update package index with latest published versions (#27083) --- docs/azure/includes/dotnet-all.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index de6402983261b..c73bb9777f306 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -612,7 +612,7 @@ | Management - Stream Analytics | NuGet [2.1.0](https://www.nuget.org/packages/Microsoft.Azure.Management.StreamAnalytics/2.1.0)
NuGet [3.0.0-preview](https://www.nuget.org/packages/Microsoft.Azure.Management.StreamAnalytics/3.0.0-preview) | [docs](/dotnet/api/overview/azure/stream-analytics) | GitHub [2.1.0](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/streamanalytics/Microsoft.Azure.Management.StreamAnalytics) | | Management - Subscription | NuGet [1.1.5](https://www.nuget.org/packages/Microsoft.Azure.Management.Subscription/1.1.5) | | GitHub [1.1.5](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Management.Subscription_1.1.5/sdk/subscription/Microsoft.Azure.Management.Subscription/) | | Management - Support | NuGet [1.0.1](https://www.nuget.org/packages/Microsoft.Azure.Management.Support/1.0.1) | | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Management.Support_1.0.1/sdk/support/Microsoft.Azure.Management.Support/) | -| Management - Synapse | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.Management.Synapse/2.0.0)
NuGet [2.3.0-preview](https://www.nuget.org/packages/Microsoft.Azure.Management.Synapse/2.3.0-preview) | | GitHub [2.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Management.Synapse_2.0.0/sdk/synapse/Microsoft.Azure.Management.Synapse/)
GitHub [2.3.0-preview](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Management.Synapse_2.3.0-preview/sdk/synapse/Microsoft.Azure.Management.Synapse/) | +| Management - Synapse | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.Management.Synapse/2.0.0)
NuGet [2.4.0-preview](https://www.nuget.org/packages/Microsoft.Azure.Management.Synapse/2.4.0-preview) | | GitHub [2.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Management.Synapse_2.0.0/sdk/synapse/Microsoft.Azure.Management.Synapse/)
GitHub [2.4.0-preview](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Management.Synapse_2.4.0-preview/sdk/synapse/Microsoft.Azure.Management.Synapse/) | | Management - Traffic Manager | NuGet [2.5.4](https://www.nuget.org/packages/Microsoft.Azure.Management.TrafficManager/2.5.4) | | GitHub [2.5.4](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/trafficmanager/Microsoft.Azure.Management.TrafficManager) | | Management - Traffic Manager Fluent | NuGet [1.38.0](https://www.nuget.org/packages/Microsoft.Azure.Management.TrafficManager.Fluent/1.38.0) | [docs](/dotnet/api/overview/azure/traffic-manager) | | | Management - WebSites | NuGet [3.1.2](https://www.nuget.org/packages/Microsoft.Azure.Management.WebSites/3.1.2) | | GitHub [3.1.2](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/websites/Microsoft.Azure.Management.WebSites) | From 522db4fcf108940e9babe3e9789337e751a602ac Mon Sep 17 00:00:00 2001 From: wuyuansushen <43259764+wuyuansushen@users.noreply.github.com> Date: Tue, 16 Nov 2021 04:07:10 +0800 Subject: [PATCH 05/37] Update ExampleAsyncDisposable.cs (#27074) --- .../snippets/dispose-async/ExampleAsyncDisposable.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/standard/garbage-collection/snippets/dispose-async/ExampleAsyncDisposable.cs b/docs/standard/garbage-collection/snippets/dispose-async/ExampleAsyncDisposable.cs index 3983af085219d..be78170c2107a 100644 --- a/docs/standard/garbage-collection/snippets/dispose-async/ExampleAsyncDisposable.cs +++ b/docs/standard/garbage-collection/snippets/dispose-async/ExampleAsyncDisposable.cs @@ -28,9 +28,8 @@ protected virtual void Dispose(bool disposing) if (disposing) { _jsonWriter?.Dispose(); + _jsonWriter = null; } - - _jsonWriter = null; } protected virtual async ValueTask DisposeAsyncCore() From 45f3b2f90c64a120262f8ee082885c22c4657abc Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 15 Nov 2021 14:10:30 -0600 Subject: [PATCH 06/37] Details overloading `==` and `!=` operators on the `ValueObject` type (#27040) * Add details about overloading == and != operators * Apply suggestions from code review Co-authored-by: Tom Dykstra Co-authored-by: Tom Dykstra --- .../implement-value-objects.md | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/docs/architecture/microservices/microservice-ddd-cqrs-patterns/implement-value-objects.md b/docs/architecture/microservices/microservice-ddd-cqrs-patterns/implement-value-objects.md index 351ccec13ea72..83dae822d5bd7 100644 --- a/docs/architecture/microservices/microservice-ddd-cqrs-patterns/implement-value-objects.md +++ b/docs/architecture/microservices/microservice-ddd-cqrs-patterns/implement-value-objects.md @@ -1,7 +1,7 @@ --- title: Implementing value objects description: .NET Microservices Architecture for Containerized .NET Applications | Get into the details and options to implement value objects using new Entity Framework features. -ms.date: 08/21/2020 +ms.date: 11/11/2021 --- # Implement value objects @@ -16,7 +16,7 @@ Figure 7-13 shows the Address value object within the Order aggregate. **Figure 7-13**. Address value object within the Order aggregate -As shown in Figure 7-13, an entity is usually composed of multiple attributes. For example, the `Order` entity can be modeled as an entity with an identity and composed internally of a set of attributes such as OrderId, OrderDate, OrderItems, etc. But the address, which is simply a complex-value composed of country/region, street, city, etc. and has no identity in this domain, must be modeled and treated as a value object. +As shown in Figure 7-13, an entity is usually composed of multiple attributes. For example, the `Order` entity can be modeled as an entity with an identity and composed internally of a set of attributes such as OrderId, OrderDate, OrderItems, etc. But the address, which is simply a complex-value composed of country/region, street, city, etc., and has no identity in this domain, must be modeled and treated as a value object. ## Important characteristics of value objects @@ -75,7 +75,23 @@ public abstract class ValueObject } ``` -You can use this class when implementing your actual value object, as with the Address value object shown in the following example: + + +The `ValueObject` is an `abstract class` type, but in this example, it doesn't overload the `==` and `!=` operators. You could choose to do so, making comparisons delegate to the `Equals` override. For example, consider the following operator overloads to the `ValueObject` type: + +```csharp +public static bool operator ==(ValueObject one, ValueObject two) +{ + return one?.Equals(two) ?? false; +} + +public static bool operator !=(ValueObject one, ValueObject two) +{ + return !(one?.Equals(two) ?? false); +} +``` + +You can use this class when implementing your actual value object, as with the `Address` value object shown in the following example: ```csharp public class Address : ValueObject @@ -109,12 +125,28 @@ public class Address : ValueObject } ``` -You can see how this value object implementation of Address has no identity and therefore, no ID field, neither at the Address class not even at the ValueObject class. +This value object implementation of `Address` has no identity, and therefore no ID field is defined for it, either in the `Address` class definition or the `ValueObject` class definition. Having no ID field in a class to be used by Entity Framework (EF) was not possible until EF Core 2.0, which greatly helps to implement better value objects with no ID. That is precisely the explanation of the next section. It could be argued that value objects, being immutable, should be read-only (that is, have get-only properties), and that's indeed true. However, value objects are usually serialized and deserialized to go through message queues, and being read-only stops the deserializer from assigning values, so you just leave them as `private set`, which is read-only enough to be practical. +### Value object comparison semantics + +Two instances of the `Address` type can be compared using all the following methods: + +```csharp +var one = new Address("1 Microsoft Way", "Redmond", "WA", "US", "98052"); +var two = new Address("1 Microsoft Way", "Redmond", "WA", "US", "98052"); + +Console.WriteLine(EqualityComparer
.Default.Equals(one, two)); // True +Console.WriteLine(object.Equals(one, two)); // True +Console.WriteLine(one.Equals(two)); // True +Console.WriteLine(one == two); // True +``` + +When all the values are the same, the comparisons are correctly evaluated as `true`. If you didn't choose to overload the `==` and `!=` operators, then the last comparison of `one == two` would evaluate as `false`. For more information, see [Overload ValueObject equality operators](#equal-op-overload). + ## How to persist value objects in the database with EF Core 2.0 and later You just saw how to define a value object in your domain model. But how can you actually persist it into the database using Entity Framework Core since it usually targets entities with identity? From d3dd722fffc8332d7c2a3a15530c2cb52c4c452e Mon Sep 17 00:00:00 2001 From: Leo Spratt Date: Mon, 15 Nov 2021 20:35:47 +0000 Subject: [PATCH 07/37] Fix text element count not starting at 1 (#27010) When the code sample `InsertNewlinesEveryTenTextElements` is run, the first newline is 11 characters long when it is meant to be 10. This commit fixes that by making the `textElementCount` start at 1. --- .../character-encoding-introduction/csharp/InsertNewlines.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/standard/base-types/snippets/character-encoding-introduction/csharp/InsertNewlines.cs b/docs/standard/base-types/snippets/character-encoding-introduction/csharp/InsertNewlines.cs index 02981ca4057f3..c0254bf97f78d 100644 --- a/docs/standard/base-types/snippets/character-encoding-introduction/csharp/InsertNewlines.cs +++ b/docs/standard/base-types/snippets/character-encoding-introduction/csharp/InsertNewlines.cs @@ -31,7 +31,7 @@ static string InsertNewlinesEveryTenTextElements(string input) TextElementEnumerator enumerator = StringInfo.GetTextElementEnumerator(input); - int textElementCount = 0; + int textElementCount = 1; while (enumerator.MoveNext()) { builder.Append(enumerator.Current); From a2279873903a92e39664042145a6be8a5416699e Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Mon, 15 Nov 2021 17:28:59 -0800 Subject: [PATCH 08/37] Update code analysis props for .NET 6 (#26880) --- docs/core/project-sdk/msbuild-props.md | 15 +++--- .../code-analysis/configuration-options.md | 2 +- docs/fundamentals/code-analysis/overview.md | 52 +++++++++++++------ .../string-comparison-net-5-plus.md | 2 +- 4 files changed, 45 insertions(+), 26 deletions(-) diff --git a/docs/core/project-sdk/msbuild-props.md b/docs/core/project-sdk/msbuild-props.md index 2a024e24f730e..e8f8ff15d5519 100644 --- a/docs/core/project-sdk/msbuild-props.md +++ b/docs/core/project-sdk/msbuild-props.md @@ -587,7 +587,7 @@ The following table lists the property name for each rule category. ### AnalysisMode -Starting with .NET 5, the .NET SDK ships with all of the ["CA" code quality rules](../../fundamentals/code-analysis/quality-rules/index.md). By default, only [some rules are enabled](../../fundamentals/code-analysis/overview.md#enabled-rules) as build warnings. The `AnalysisMode` property lets you customize the set of rules that are enabled by default. You can either switch to a more aggressive (opt-out) analysis mode or a more conservative (opt-in) analysis mode. For example, if you want to enable all rules by default as build warnings, set the value to `All` or `AllEnabledByDefault`. +Starting with .NET 5, the .NET SDK ships with all of the ["CA" code quality rules](../../fundamentals/code-analysis/quality-rules/index.md). By default, only [some rules are enabled](../../fundamentals/code-analysis/overview.md#enabled-rules) as build warnings. The `AnalysisMode` property lets you customize the set of rules that are enabled by default. You can either switch to a more aggressive (opt-out) analysis mode or a more conservative (opt-in) analysis mode. For example, if you want to enable all rules by default as build warnings, set the value to `All`. ```xml @@ -597,13 +597,13 @@ Starting with .NET 5, the .NET SDK ships with all of the ["CA" code quality rule The following table shows the available option values in .NET 5 and .NET 6. They're listed in increasing order of the number of rules they enable. -| .NET 5 value | .NET 6 value | Meaning | +| .NET 6+ value | .NET 5 value | Meaning | |-|-|-| -| `AllDisabledByDefault` | `None` | All rules are disabled by default. You can selectively [opt in to](../../fundamentals/code-analysis/configuration-options.md) individual rules to enable them. | +| `None` | `AllDisabledByDefault` | All rules are disabled by default. You can selectively [opt in to](../../fundamentals/code-analysis/configuration-options.md) individual rules to enable them. | | `Default` | `Default` | Default mode, where certain rules are enabled as build warnings, certain rules are enabled as Visual Studio IDE suggestions, and the remainder are disabled. | -| | `Minimum` | More aggressive mode than the `Default` mode. Certain suggestions that are highly recommended for build enforcement are enabled as build warnings. | -| | `Recommended` | More aggressive mode than the `Minimum` mode, where more rules are enabled as build warnings. | -| `AllEnabledByDefault` | `All` | All rules are enabled by default as build warnings. You can selectively [opt out](../../fundamentals/code-analysis/configuration-options.md) of individual rules to disable them. | +| `Minimum` | N/A | More aggressive mode than the `Default` mode. Certain suggestions that are highly recommended for build enforcement are enabled as build warnings. | +| `Recommended` | N/A | More aggressive mode than the `Minimum` mode, where more rules are enabled as build warnings. | +| `All` | `AllEnabledByDefault` | All rules are enabled by default as build warnings. You can selectively [opt out](../../fundamentals/code-analysis/configuration-options.md) of individual rules to disable them. | > [!NOTE] > @@ -664,9 +664,6 @@ The `CodeAnalysisTreatWarningsAsErrors` property lets you configure whether code ### EnforceCodeStyleInBuild -> [!NOTE] -> This feature is currently experimental and may change between the .NET 5 and .NET 6 releases. - [.NET code style analysis](../../fundamentals/code-analysis/overview.md#code-style-analysis) is disabled, by default, on build for all .NET projects. You can enable code style analysis for .NET projects by setting the `EnforceCodeStyleInBuild` property to `true`. ```xml diff --git a/docs/fundamentals/code-analysis/configuration-options.md b/docs/fundamentals/code-analysis/configuration-options.md index 0983333da5f91..5d45203f18b09 100644 --- a/docs/fundamentals/code-analysis/configuration-options.md +++ b/docs/fundamentals/code-analysis/configuration-options.md @@ -97,7 +97,7 @@ The following table shows the different rule severities that you can configure f > > - Add an explicit `dotnet_diagnostic..severity = ` configuration entry for each rule. > - In .NET 6+, enable a category of rules by setting [\>](../../core/project-sdk/msbuild-props.md#analysismodecategory) to `All`. -> - Enable *all* rules by setting [\](../../core/project-sdk/msbuild-props.md#analysismode) to `AllEnabledByDefault`. +> - Enable *all* rules by setting [\](../../core/project-sdk/msbuild-props.md#analysismode) to `All` or by setting [\](../../core/project-sdk/msbuild-props.md#analysislevel) to `latest-All`. #### Precedence diff --git a/docs/fundamentals/code-analysis/overview.md b/docs/fundamentals/code-analysis/overview.md index bf427bc7777d0..568fe21f12205 100644 --- a/docs/fundamentals/code-analysis/overview.md +++ b/docs/fundamentals/code-analysis/overview.md @@ -2,7 +2,7 @@ title: Code analysis in .NET titleSuffix: "" description: Learn about source code analysis in the .NET SDK. -ms.date: 12/04/2020 +ms.date: 11/08/2021 ms.topic: overview ms.custom: updateeachrelease helpviewer_keywords: @@ -29,18 +29,26 @@ If rule violations are found by an analyzer, they're reported as a suggestion, w ### Enabled rules -The following rules are enabled, by default, in .NET 5. +The following rules are enabled, by default, in .NET 6. | Diagnostic ID | Category | Severity | Description | | - | - | - | - | -| [CA1416](/visualstudio/code-quality/ca1416) | Interoperability | Warning | Platform compatibility analyzer | -| [CA1417](/visualstudio/code-quality/ca1417) | Interoperability | Warning | Do not use `OutAttribute` on string parameters for P/Invokes | -| [CA1831](/visualstudio/code-quality/ca1831) | Performance | Warning | Use `AsSpan` instead of range-based indexers for string when appropriate | -| [CA2013](/visualstudio/code-quality/ca2013) | Reliability | Warning | Do not use `ReferenceEquals` with value types | -| [CA2014](/visualstudio/code-quality/ca2014) | Reliability | Warning | Do not use `stackalloc` in loops | -| [CA2015](/visualstudio/code-quality/ca2015) | Reliability | Warning | Do not define finalizers for types derived from | -| [CA2200](/visualstudio/code-quality/ca2200) | Usage | Warning | Rethrow to preserve stack details -| [CA2247](/visualstudio/code-quality/ca2247) | Usage | Warning | Argument passed to TaskCompletionSource constructor should be enum instead of | +| [CA1416](quality-rules/ca1416.md) | Interoperability | Warning | Platform compatibility analyzer | +| [CA1417](quality-rules/ca1417.md) | Interoperability | Warning | Do not use `OutAttribute` on string parameters for P/Invokes | +| [CA1418](quality-rules/ca1418.md) | Interoperability | Warning | Use valid platform string | +| [CA1831](quality-rules/ca1831.md) | Performance | Warning | Use `AsSpan` instead of range-based indexers for string when appropriate | +| [CA2013](quality-rules/ca2013.md) | Reliability | Warning | Do not use `ReferenceEquals` with value types | +| [CA2014](quality-rules/ca2014.md) | Reliability | Warning | Do not use `stackalloc` in loops | +| [CA2015](quality-rules/ca2015.md) | Reliability | Warning | Do not define finalizers for types derived from | +| CA2017 | Reliability | Warning | Parameter count mismatch | +| [CA2018](quality-rules/ca2018.md) | Reliability | Warning | The `count` argument to `Buffer.BlockCopy` should specify the number of bytes to copy | +| [CA2200](quality-rules/ca2200.md) | Usage | Warning | Rethrow to preserve stack details | +| [CA2252](quality-rules/ca2252.md) | Usage | Error | Opt in to preview features | +| [CA2247](quality-rules/ca2247.md) | Usage | Warning | Argument passed to `TaskCompletionSource` constructor should be enum instead of | +| CA2255 | Usage | Warning | The `ModuleInitializer` attribute should not be used in libraries | +| CA2256 | Usage | Warning | All members declared in parent interfaces must have an implementation in a `DynamicInterfaceCastableImplementation`-attributed interface | +| CA2257 | Usage | Warning | Members defined on an interface with the `DynamicInterfaceCastableImplementationAttribute` should be `static` | +| CA2258 | Usage | Warning | Providing a `DynamicInterfaceCastableImplementation` interface in Visual Basic is unsupported | You can change the severity of these rules to disable them or elevate them to errors. You can also [enable more rules](#enable-additional-rules). @@ -51,11 +59,25 @@ You can change the severity of these rules to disable them or elevate them to er *Analysis mode* refers to a predefined code analysis configuration where none, some, or all rules are enabled. In the default analysis mode, only a small number of rules are [enabled as build warnings](#enabled-rules). You can change the analysis mode for your project by setting the [\](../../core/project-sdk/msbuild-props.md#analysismode) property in the project file. The allowable values are: -| Value | Description | -| - | - | -| `AllDisabledByDefault` | This is the most conservative mode. All rules are disabled by default. You can selectively [opt into](configuration-options.md) individual rules to enable them.

`AllDisabledByDefault` | -| `AllEnabledByDefault` | This is the most aggressive mode. All rules are enabled as build warnings. You can selectively [opt out of](configuration-options.md) individual rules to disable them.

`AllEnabledByDefault` | -| `Default` | The default mode, where a handful of rules are enabled as warnings, others are enabled only as Visual Studio IDE suggestions with corresponding code fixes, and the rest are disabled completely. You can selectively [opt into or out of](configuration-options.md) individual rules to disable them.

`Default` | +:::row::: + :::column::: + `None` + :::column-end::: + :::column::: + `Default` + :::column-end::: + :::column::: + `Minimum` + :::column-end::: + :::column::: + `Recommended` + :::column-end::: + :::column::: + `All` + :::column-end::: +:::row-end::: + +Starting in .NET 6, you can omit [\](../../core/project-sdk/msbuild-props.md#analysismode) in favor of a compound value for the \ property. For example, the following value enables the recommended set of rules for the latest release: `latest-Recommended`. For more information, see [AnalysisLevel](../../core/project-sdk/msbuild-props.md#analysislevel). To find the default severity for each available rule and whether or not the rule is enabled in the default analysis mode, see the [full list of rules](https://github.com/dotnet/roslyn-analyzers/blob/main/src/NetAnalyzers/Core/AnalyzerReleases.Shipped.md). diff --git a/docs/standard/base-types/string-comparison-net-5-plus.md b/docs/standard/base-types/string-comparison-net-5-plus.md index 22494aed48f8b..e7e2a09f43410 100644 --- a/docs/standard/base-types/string-comparison-net-5-plus.md +++ b/docs/standard/base-types/string-comparison-net-5-plus.md @@ -49,7 +49,7 @@ These specific rules aren't enabled by default. To enable them and show any viol ```xml - AllEnabledByDefault + All $(WarningsAsErrors);CA1307;CA1309;CA1310 ``` From 56457d9d265d7687c9df1775693e49470ed5d5b7 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Tue, 16 Nov 2021 06:26:51 -0800 Subject: [PATCH 09/37] Update package index with latest published versions (#27095) --- docs/azure/includes/dotnet-all.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index c73bb9777f306..40f83e303ca95 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -95,7 +95,7 @@ | Microsoft.Azure.Cosmos.Templates | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Cosmos.Templates/1.0.0) | | | | Microsoft.Azure.Functions.Analyzers | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Analyzers/1.0.0) | | | | Microsoft.Azure.Functions.Authentication.WebAssembly | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Authentication.WebAssembly/1.0.0)
NuGet [1.0.1-preview](https://www.nuget.org/packages/Microsoft.Azure.Functions.Authentication.WebAssembly/1.0.1-preview) | | | -| Microsoft.Azure.Functions.Worker.Core | NuGet [1.4.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Core/1.4.0) | | | +| Microsoft.Azure.Functions.Worker.Core | NuGet [1.4.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Core/1.4.0)
NuGet [1.5.0-preview1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Core/1.5.0-preview1) | | | | Microsoft.Azure.Functions.Worker.Extensions.Abstractions | NuGet [1.1.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Abstractions/1.1.0) | | | | Microsoft.Azure.Functions.Worker.Extensions.ApplicationInsights | NuGet [1.0.0-preview4](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.ApplicationInsights/1.0.0-preview4) | | | | Microsoft.Azure.Functions.Worker.Extensions.CosmosDB | NuGet [3.0.9](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.CosmosDB/3.0.9)
NuGet [4.0.0-preview2](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.CosmosDB/4.0.0-preview2) | | | @@ -113,7 +113,7 @@ | Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues | NuGet [5.0.0-beta.4](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues/5.0.0-beta.4) | | | | Microsoft.Azure.Functions.Worker.Extensions.Timer | NuGet [4.1.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Timer/4.1.0) | | | | Microsoft.Azure.Functions.Worker.Extensions.Warmup | NuGet [4.0.2](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Warmup/4.0.2) | | | -| Microsoft.Azure.Functions.Worker.Grpc | NuGet [1.3.1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Grpc/1.3.1) | | | +| Microsoft.Azure.Functions.Worker.Grpc | NuGet [1.3.1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Grpc/1.3.1)
NuGet [1.4.0-preview1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Grpc/1.4.0-preview1) | | | | Microsoft.Azure.Functions.Worker.ItemTemplates | NuGet [4.0.1964](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ItemTemplates/4.0.1964) | | | | Microsoft.Azure.Functions.Worker.ProjectTemplates | NuGet [4.0.1964](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.ProjectTemplates/4.0.1964) | | | | Microsoft.Azure.Functions.Worker.Sdk.Analyzers | NuGet [1.1.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Sdk.Analyzers/1.1.0) | | | @@ -301,7 +301,7 @@ | Microsoft.Azure.Devices.Provisioning.Transport.Http | NuGet [1.15.0](https://www.nuget.org/packages/Microsoft.Azure.Devices.Provisioning.Transport.Http/1.15.0)
NuGet [1.14.0-preview-001](https://www.nuget.org/packages/Microsoft.Azure.Devices.Provisioning.Transport.Http/1.14.0-preview-001) | | | | Microsoft.Azure.Devices.Provisioning.Transport.Mqtt | NuGet [1.17.0](https://www.nuget.org/packages/Microsoft.Azure.Devices.Provisioning.Transport.Mqtt/1.17.0)
NuGet [1.16.0-preview-001](https://www.nuget.org/packages/Microsoft.Azure.Devices.Provisioning.Transport.Mqtt/1.16.0-preview-001) | | | | Microsoft.Azure.Devices.Shared | NuGet [1.30.0](https://www.nuget.org/packages/Microsoft.Azure.Devices.Shared/1.30.0)
NuGet [1.29.0-preview-001](https://www.nuget.org/packages/Microsoft.Azure.Devices.Shared/1.29.0-preview-001) | | | -| Microsoft.Azure.Functions.Worker | NuGet [1.6.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker/1.6.0) | | | +| Microsoft.Azure.Functions.Worker | NuGet [1.6.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker/1.6.0)
NuGet [1.7.0-preview1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker/1.7.0-preview1) | | | | Microsoft.Azure.Functions.Worker.Sdk | NuGet [1.3.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Sdk/1.3.0) | | | | Microsoft.Azure.uamqp | NuGet [1.2.11](https://www.nuget.org/packages/Microsoft.Azure.uamqp/1.2.11) | | | | Microsoft.Azure.umqtt | NuGet [1.1.11](https://www.nuget.org/packages/Microsoft.Azure.umqtt/1.1.11) | | | From 0d2c8d7605fb7707c4f833c403b98386837d86b8 Mon Sep 17 00:00:00 2001 From: "Andy (Steve) De George" <67293991+adegeo@users.noreply.github.com> Date: Tue, 16 Nov 2021 08:03:29 -0800 Subject: [PATCH 10/37] Add link to Fedora .NET 6 tracking bug (#27091) * Update linux-fedora.md * Update linux-fedora.md --- docs/core/install/linux-fedora.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/core/install/linux-fedora.md b/docs/core/install/linux-fedora.md index 864a1d84ec3a7..654892405a589 100644 --- a/docs/core/install/linux-fedora.md +++ b/docs/core/install/linux-fedora.md @@ -3,7 +3,7 @@ title: Install .NET on Fedora - .NET description: Demonstrates the various ways to install .NET SDK and .NET Runtime on Fedora. author: adegeo ms.author: adegeo -ms.date: 11/05/2021 +ms.date: 11/15/2021 --- # Install the .NET SDK or the .NET Runtime on Fedora @@ -28,6 +28,8 @@ The latest version of .NET that's available in the default package repositories - [Install the .NET SDK or the .NET Runtime with a script.](linux-scripted-manual.md#scripted-install) - [Install the .NET SDK or the .NET Runtime manually.](linux-scripted-manual.md#manual-install) +You can track the .NET 6 for Fedora release through [Red Hat Bugzilla bug #2021763](https://bugzilla.redhat.com/show_bug.cgi?id=2021763). + ## Install .NET 5 [!INCLUDE [linux-dnf-install-50](includes/linux-install-50-dnf.md)] From 08af11c785cc8c492aaca2a55ae67f737e3a4d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Rowicki?= <35342116+radrow@users.noreply.github.com> Date: Tue, 16 Nov 2021 17:11:17 +0100 Subject: [PATCH 11/37] Retitle Fact 1 (#27102) Facts cannot be stated in an imperative form. Otherwise, I would call it a "tip". --- docs/framework/performance/writing-large-responsive-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/framework/performance/writing-large-responsive-apps.md b/docs/framework/performance/writing-large-responsive-apps.md index 904bb3c1f94a9..5cad4eecf1a65 100644 --- a/docs/framework/performance/writing-large-responsive-apps.md +++ b/docs/framework/performance/writing-large-responsive-apps.md @@ -26,7 +26,7 @@ The .NET Framework is highly productive for building apps. Powerful and safe lan Consider these facts when tuning performance and creating responsive .NET Framework apps. -### Fact 1: Don’t prematurely optimize +### Fact 1: Premature optimizations are not always worth the hassle Writing code that is more complex than it needs to be incurs maintenance, debugging, and polishing costs. Experienced programmers have an intuitive grasp of how to solve coding problems and write more efficient code. However, they sometimes prematurely optimize their code. For example, they use a hash table when a simple array would suffice, or use complicated caching that may leak memory instead of simply recomputing values. Even if you’re an experience programmer, you should test for performance and analyze your code when you find issues. From 5e3f838adcfef21aa8ad165fd8fc85f09f1fd8e8 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 16 Nov 2021 10:16:58 -0600 Subject: [PATCH 12/37] Add the HTTP keyword to the expected list of available slug completions (#27104) --- .vscode/settings.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.vscode/settings.json b/.vscode/settings.json index 1202643c2dc9c..784b37b368281 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,6 +13,7 @@ "F#", "HashiCorp Configuration Language (HCL)", "HTML", + "HTTP", "Ini", "JavaScript", "JSON", From 86db07626a7f5684189904ecba98822f87407f9d Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 16 Nov 2021 11:15:25 -0600 Subject: [PATCH 13/37] Address concerns about inconsistent code style and formatting (#27089) * Code style * Update usings.cs --- .../keywords/snippets/usings.cs | 52 +++++++++++-------- .../keywords/using-statement.md | 2 +- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/docs/csharp/language-reference/keywords/snippets/usings.cs b/docs/csharp/language-reference/keywords/snippets/usings.cs index bb311353a3bcd..12e131244328b 100644 --- a/docs/csharp/language-reference/keywords/snippets/usings.cs +++ b/docs/csharp/language-reference/keywords/snippets/usings.cs @@ -18,7 +18,7 @@ public static void Examples() private static void UsingExample() { // - string manyLines=@"This is line one + string manyLines = @"This is line one This is line two Here is line three The penultimate line is line four @@ -27,10 +27,11 @@ The penultimate line is line four using (var reader = new StringReader(manyLines)) { string? item; - do { + do + { item = reader.ReadLine(); Console.WriteLine(item); - } while(item != null); + } while (item != null); } // } @@ -38,7 +39,7 @@ The penultimate line is line four private static void ModernUsing() { // - string manyLines=@"This is line one + string manyLines = @"This is line one This is line two Here is line three The penultimate line is line four @@ -46,10 +47,11 @@ The penultimate line is line four using var reader = new StringReader(manyLines); string? item; - do { + do + { item = reader.ReadLine(); Console.WriteLine(item); - } while(item != null); + } while (item != null); // } @@ -57,7 +59,7 @@ private static void TryFinallyExample() { // The extra braces are necessary for the explanation. Do not remove them. // - string manyLines=@"This is line one + string manyLines = @"This is line one This is line two Here is line three The penultimate line is line four @@ -65,13 +67,16 @@ The penultimate line is line four { var reader = new StringReader(manyLines); - try { + try + { string? item; - do { + do + { item = reader.ReadLine(); Console.WriteLine(item); - } while(item != null); - } finally + } while (item != null); + } + finally { reader?.Dispose(); } @@ -82,11 +87,11 @@ The penultimate line is line four private static void DeclareMultipleVariables() { // - string numbers=@"One + string numbers = @"One Two Three Four."; - string letters=@"A + string letters = @"A B C D."; @@ -95,13 +100,14 @@ private static void DeclareMultipleVariables() right = new StringReader(letters)) { string? item; - do { + do + { item = left.ReadLine(); Console.Write(item); Console.Write(" "); item = right.ReadLine(); Console.WriteLine(item); - } while(item != null); + } while (item != null); } // } @@ -109,11 +115,11 @@ private static void DeclareMultipleVariables() private static void ModernMultipleVariables() { // - string numbers=@"One + string numbers = @"One Two Three Four."; - string letters=@"A + string letters = @"A B C D."; @@ -121,20 +127,21 @@ private static void ModernMultipleVariables() using StringReader left = new StringReader(numbers), right = new StringReader(letters); string? item; - do { + do + { item = left.ReadLine(); Console.Write(item); Console.Write(" "); item = right.ReadLine(); Console.WriteLine(item); - } while(item != null); + } while (item != null); // } private static void DeclareBeforeUsing() { // - string manyLines=@"This is line one + string manyLines = @"This is line one This is line two Here is line three The penultimate line is line four @@ -144,10 +151,11 @@ The penultimate line is line four using (reader) { string? item; - do { + do + { item = reader.ReadLine(); Console.WriteLine(item); - } while(item != null); + } while (item != null); } // reader is in scope here, but has been disposed // diff --git a/docs/csharp/language-reference/keywords/using-statement.md b/docs/csharp/language-reference/keywords/using-statement.md index c715edf42ffaf..9be67ddc8ae87 100644 --- a/docs/csharp/language-reference/keywords/using-statement.md +++ b/docs/csharp/language-reference/keywords/using-statement.md @@ -1,7 +1,7 @@ --- description: "using statement - C# Reference" title: "using statement - C# Reference" -ms.date: 05/29/2020 +ms.date: 11/15/2021 f1_keywords: - "using-statement_CSharpKeyword" helpviewer_keywords: From e2d8bbbba8776bcae4eccf5fe0a49d016cf91175 Mon Sep 17 00:00:00 2001 From: Ken Dale Date: Tue, 16 Nov 2021 12:55:31 -0500 Subject: [PATCH 14/37] Code block fix (#27103) --- .../cryptography/3.0/envelopedcms-defaults-to-aes256.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/core-changes/cryptography/3.0/envelopedcms-defaults-to-aes256.md b/includes/core-changes/cryptography/3.0/envelopedcms-defaults-to-aes256.md index 9ee6fa597d313..38e264a6b3e2e 100644 --- a/includes/core-changes/cryptography/3.0/envelopedcms-defaults-to-aes256.md +++ b/includes/core-changes/cryptography/3.0/envelopedcms-defaults-to-aes256.md @@ -30,7 +30,7 @@ AlgorithmIdentifier tripleDesIdentifier = new AlgorithmIdentifier(tripleDesOid); EnvelopedCms cms = new EnvelopedCms(content, tripleDesIdentifier); cms.Encrypt(recipient); -return cms.Encode()l +return cms.Encode(); ``` #### Category From 39961fa35aed961b78f19b2a7261f0764ef482bd Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Tue, 16 Nov 2021 11:03:17 -0800 Subject: [PATCH 15/37] Update package index with latest published versions (#27105) --- docs/azure/includes/dotnet-all.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index 40f83e303ca95..9ea798e166ddc 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -312,7 +312,7 @@ | Monitor Query | NuGet [1.0.1](https://www.nuget.org/packages/Azure.Monitor.Query/1.0.1) | [docs](/dotnet/api/overview/azure/Monitor.Query-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Monitor.Query_1.0.1/sdk/monitor/Azure.Monitor.Query/) | | News Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.NewsSearch/2.0.0) | | | | Notification Hubs | NuGet [4.1.0](https://www.nuget.org/packages/Microsoft.Azure.NotificationHubs/4.1.0) | | GitHub [4.1.0](https://github.com/Azure/azure-notificationhubs-dotnet) | -| Operational Insights | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.OperationalInsights/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/operationalinsights/Microsoft.Azure.OperationalInsights) | +| Operational Insights | NuGet [1.1.0](https://www.nuget.org/packages/Microsoft.Azure.OperationalInsights/1.1.0) | | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/operationalinsights/Microsoft.Azure.OperationalInsights) | | Personalizer | NuGet [2.0.0-beta.1](https://www.nuget.org/packages/Azure.AI.Personalizer/2.0.0-beta.1) | [docs](/dotnet/api/overview/azure/AI.Personalizer-readme-pre) | GitHub [2.0.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.Personalizer_2.0.0-beta.1/sdk/personalizer/Azure.AI.Personalizer/) | | 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) | | Power BI | NuGet [3.20.1](https://www.nuget.org/packages/Microsoft.PowerBI.Api/3.20.1) | | GitHub [3.20.1](https://github.com/Microsoft/PowerBI-CSharp) | @@ -480,7 +480,7 @@ | Management - Billing Fluent | NuGet [1.9.1-beta](https://www.nuget.org/packages/Microsoft.Azure.Management.Billing.Fluent/1.9.1-beta) | | | | Management - Blueprint | NuGet [0.20.7-preview](https://www.nuget.org/packages/Microsoft.Azure.Management.Blueprint/0.20.7-preview) | | GitHub [0.20.7-preview](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Management.Blueprint_0.20.7-preview/sdk/blueprint/Microsoft.Azure.Management.Blueprint/) | | Management - Bot Service | NuGet [0.9.3-preview](https://www.nuget.org/packages/Microsoft.Azure.Management.BotService/0.9.3-preview) | | GitHub [0.9.3-preview](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/botservice/Microsoft.Azure.Management.BotService) | -| Management - Cognitive Services | NuGet [8.0.0-preview](https://www.nuget.org/packages/Microsoft.Azure.Management.CognitiveServices/8.0.0-preview) | | GitHub [8.0.0-preview](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Management.CognitiveServices_8.0.0-preview/sdk/cognitiveservices/Microsoft.Azure.Management.CognitiveServices/) | +| Management - Cognitive Services | NuGet [8.1.0](https://www.nuget.org/packages/Microsoft.Azure.Management.CognitiveServices/8.1.0) | | GitHub [8.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Management.CognitiveServices_8.1.0/sdk/cognitiveservices/Microsoft.Azure.Management.CognitiveServices/) | | Management - Cognitive Services Fluent | NuGet [1.9.1-beta](https://www.nuget.org/packages/Microsoft.Azure.Management.CognitiveServices.Fluent/1.9.1-beta) | | | | Management - Compute | NuGet [50.0.0](https://www.nuget.org/packages/Microsoft.Azure.Management.Compute/50.0.0) | | GitHub [50.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Management.Compute_50.0.0/sdk/compute/Microsoft.Azure.Management.Compute/) | | Management - Compute Fluent | NuGet [1.38.0](https://www.nuget.org/packages/Microsoft.Azure.Management.Compute.Fluent/1.38.0) | [docs](/dotnet/api/overview/azure/virtualmachines) | | From 34ee5a05b44fdee9f6f46c97f6bfdadd7068820d Mon Sep 17 00:00:00 2001 From: Tom Dykstra Date: Tue, 16 Nov 2021 11:13:30 -0800 Subject: [PATCH 16/37] Fix NETSDK error number (#27106) --- docs/core/compatibility/sdk/6.0/duplicate-files-in-output.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core/compatibility/sdk/6.0/duplicate-files-in-output.md b/docs/core/compatibility/sdk/6.0/duplicate-files-in-output.md index e889ee7861502..e74f4c96b08cd 100644 --- a/docs/core/compatibility/sdk/6.0/duplicate-files-in-output.md +++ b/docs/core/compatibility/sdk/6.0/duplicate-files-in-output.md @@ -5,7 +5,7 @@ ms.date: 07/07/2021 --- # Generate error for duplicate files in publish output -The .NET SDK generates a new error (`NETSDK1148`) in cases where files from different source paths would be copied to the same file path in the publish output. This can happen when a project and its project references include a file with the same name that's included in the publish output. +The .NET SDK generates a new error (`NETSDK1152`) in cases where files from different source paths would be copied to the same file path in the publish output. This can happen when a project and its project references include a file with the same name that's included in the publish output. ## Version introduced @@ -25,7 +25,7 @@ C:\Program Files\dotnet\sdk\5.0.100-preview.5.20258.6\Sdks\Microsoft.NET.Sdk\tar ## New behavior -Starting in .NET 6, MSBuild removes duplicate files that are copied to the publish folder if both the source and destination are the same. If there are any remaining duplicates, a `NETSDK1148` error is generated and lists the files that are duplicated. +Starting in .NET 6, MSBuild removes duplicate files that are copied to the publish folder if both the source and destination are the same. If there are any remaining duplicates, a `NETSDK1152` error is generated and lists the files that are duplicated. ## Reason for change From 0291f982e3bdf09b5ce882271e0fd015feaf439b Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Tue, 16 Nov 2021 11:34:44 -0800 Subject: [PATCH 17/37] Add more info to recommended actions (#27093) --- .../sdk/6.0/duplicate-files-in-output.md | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/docs/core/compatibility/sdk/6.0/duplicate-files-in-output.md b/docs/core/compatibility/sdk/6.0/duplicate-files-in-output.md index e74f4c96b08cd..bbc4d7d139551 100644 --- a/docs/core/compatibility/sdk/6.0/duplicate-files-in-output.md +++ b/docs/core/compatibility/sdk/6.0/duplicate-files-in-output.md @@ -1,7 +1,7 @@ --- title: "Breaking change: Generate error for duplicate files in publish output" description: Learn about the breaking change in .NET 6 where the .NET SDK generates an error when files from different source paths would be copied to the same location in the publish output. -ms.date: 07/07/2021 +ms.date: 11/15/2021 --- # Generate error for duplicate files in publish output @@ -33,22 +33,15 @@ Duplicate files in the publish output sometimes caused build breaks or unpredict ## Recommended action -Ideally, you should updated your project to avoid situations where multiple files with the same name are copied to the publish output. +- Ideally, you should update your project to avoid situations where multiple files with the same name are copied to the publish output. The error message includes the name of the duplicate file. Some causes for duplicate files include: -Alternatively, you can set the [ErrorOnDuplicatePublishOutputFiles](../../../project-sdk/msbuild-props.md#erroronduplicatepublishoutputfiles) property to `false`. + - An ASP.NET Core project that references an ASP.NET Core web service, and each has its own *appsettings.json* file. + - A project item where `CopyToOutputDirectory` is unnecessarily set to `Always`. + + [Binary log files](https://github.com/dotnet/msbuild/blob/main/documentation/wiki/Providing-Binary-Logs.md) can be useful for finding the cause of the duplicated files. + +- Alternatively, you can set the [ErrorOnDuplicatePublishOutputFiles](../../../project-sdk/msbuild-props.md#erroronduplicatepublishoutputfiles) property to `false`. ## Affected APIs N/A - - From 7da65f5acf2add6f6c72f7e68081b81f57e10350 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Tue, 16 Nov 2021 12:18:14 -0800 Subject: [PATCH 18/37] Add note about .NET Framework (#27107) --- docs/framework/network-programming/ftp.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/framework/network-programming/ftp.md b/docs/framework/network-programming/ftp.md index 9106c001ceeb3..fe69ffa20f389 100644 --- a/docs/framework/network-programming/ftp.md +++ b/docs/framework/network-programming/ftp.md @@ -10,6 +10,9 @@ ms.assetid: 9b43f8b4-89d7-46a7-89fc-71aca916dd32 The .NET Framework provides comprehensive support for the FTP protocol with the and classes. These classes are derived from and . In most cases, the and classes provide all that is necessary to make the request, but if you need access to the FTP-specific features exposed as properties, you can typecast these classes to or . +> [!NOTE] +> This article is specific to projects that target .NET Framework. For projects that target .NET 6 and later versions, [FTP is no longer supported](../../core/compatibility/networking/6.0/webrequest-deprecated.md). + ## Examples For more information, see the following topics: [How to: Download Files with FTP](how-to-download-files-with-ftp.md), [How to: Upload Files with FTP](how-to-upload-files-with-ftp.md), and [How to: List Directory Contents with FTP](how-to-list-directory-contents-with-ftp.md). From e25944baaead9729808aaf732e29f6bd73172e39 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Tue, 16 Nov 2021 12:40:54 -0800 Subject: [PATCH 19/37] Update package index with latest published versions (#27108) --- docs/azure/includes/dotnet-all.md | 4 ++-- docs/azure/includes/dotnet-new.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index 9ea798e166ddc..49ecdc971b2f8 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -39,7 +39,7 @@ | IoT Device Update | NuGet [1.0.0-beta.2](https://www.nuget.org/packages/Azure.IoT.DeviceUpdate/1.0.0-beta.2) | [docs](/dotnet/api/overview/azure/IoT.DeviceUpdate-readme-pre) | GitHub [1.0.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.IoT.DeviceUpdate_1.0.0-beta.2/sdk/deviceupdate/Azure.Iot.DeviceUpdate/) | | Key Vault - Administration | NuGet [4.0.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Administration/4.0.0)
NuGet [4.1.0-beta.2](https://www.nuget.org/packages/Azure.Security.KeyVault.Administration/4.1.0-beta.2) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Administration-readme) | GitHub [4.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Administration_4.0.0/sdk/keyvault/Azure.Security.KeyVault.Administration/)
GitHub [4.1.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Administration_4.1.0-beta.2/sdk/keyvault/Azure.Security.KeyVault.Administration/) | | Key Vault - Certificates | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Certificates/4.2.0)
NuGet [4.3.0-beta.2](https://www.nuget.org/packages/Azure.Security.KeyVault.Certificates/4.3.0-beta.2) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Certificates-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Certificates_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Certificates/)
GitHub [4.3.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Certificates_4.3.0-beta.2/sdk/keyvault/Azure.Security.KeyVault.Certificates/) | -| Key Vault - Keys | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.2.0)
NuGet [4.3.0-beta.3](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.3.0-beta.3) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Keys-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Keys/)
GitHub [4.3.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.3.0-beta.3/sdk/keyvault/Azure.Security.KeyVault.Keys/) | +| Key Vault - Keys | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.2.0)
NuGet [4.3.0-beta.4](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.3.0-beta.4) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Keys-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Keys/)
GitHub [4.3.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.3.0-beta.4/sdk/keyvault/Azure.Security.KeyVault.Keys/) | | Key Vault - Secrets | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Secrets/4.2.0)
NuGet [4.3.0-beta.2](https://www.nuget.org/packages/Azure.Security.KeyVault.Secrets/4.3.0-beta.2) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Secrets-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Secrets_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Secrets/)
GitHub [4.3.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Secrets_4.3.0-beta.2/sdk/keyvault/Azure.Security.KeyVault.Secrets/) | | 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-pre) | 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/) | @@ -273,7 +273,7 @@ | Key Vault - Core | NuGet [3.0.5](https://www.nuget.org/packages/Microsoft.Azure.KeyVault.Core/3.0.5) | | GitHub [3.0.5](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.KeyVault.Core_3.0.5/sdk/keyvault/Microsoft.Azure.KeyVault.Core/) | | Key Vault - Cryptography | NuGet [3.0.5](https://www.nuget.org/packages/Microsoft.Azure.KeyVault.Cryptography/3.0.5) | | GitHub [3.0.5](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.KeyVault.Cryptography_3.0.5/sdk/keyvault/Microsoft.Azure.KeyVault.Cryptography/) | | Key Vault - Extensions | NuGet [3.0.5](https://www.nuget.org/packages/Microsoft.Azure.KeyVault.Extensions/3.0.5) | | GitHub [3.0.5](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.KeyVault.Extensions_3.0.5/sdk/keyvault/Microsoft.Azure.KeyVault.Extensions/) | -| Key Vault - Keys | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.2.0)
NuGet [4.3.0-beta.3](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.3.0-beta.3) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Keys-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Keys/)
GitHub [4.3.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.3.0-beta.3/sdk/keyvault/Azure.Security.KeyVault.Keys/) | +| Key Vault - Keys | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.2.0)
NuGet [4.3.0-beta.4](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.3.0-beta.4) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Keys-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Keys/)
GitHub [4.3.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.3.0-beta.4/sdk/keyvault/Azure.Security.KeyVault.Keys/) | | Key Vault - Secrets | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Secrets/4.2.0)
NuGet [4.3.0-beta.2](https://www.nuget.org/packages/Azure.Security.KeyVault.Secrets/4.3.0-beta.2) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Secrets-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Secrets_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Secrets/)
GitHub [4.3.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Secrets_4.3.0-beta.2/sdk/keyvault/Azure.Security.KeyVault.Secrets/) | | Key Vault - WebKey | NuGet [3.0.5](https://www.nuget.org/packages/Microsoft.Azure.KeyVault.WebKey/3.0.5) | | GitHub [3.0.5](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.KeyVault.WebKey_3.0.5/sdk/keyvault/Microsoft.Azure.KeyVault.WebKey/) | | Kinect Developer Kit | NuGet [1.0.1](https://www.nuget.org/packages/Microsoft.Azure.Kinect.BodyTracking/1.0.1) | | | diff --git a/docs/azure/includes/dotnet-new.md b/docs/azure/includes/dotnet-new.md index 694ed4dda6214..139fb92ca0904 100644 --- a/docs/azure/includes/dotnet-new.md +++ b/docs/azure/includes/dotnet-new.md @@ -39,7 +39,7 @@ | IoT Device Update | NuGet [1.0.0-beta.2](https://www.nuget.org/packages/Azure.IoT.DeviceUpdate/1.0.0-beta.2) | [docs](/dotnet/api/overview/azure/IoT.DeviceUpdate-readme-pre) | GitHub [1.0.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.IoT.DeviceUpdate_1.0.0-beta.2/sdk/deviceupdate/Azure.Iot.DeviceUpdate/) | | Key Vault - Administration | NuGet [4.0.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Administration/4.0.0)
NuGet [4.1.0-beta.2](https://www.nuget.org/packages/Azure.Security.KeyVault.Administration/4.1.0-beta.2) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Administration-readme) | GitHub [4.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Administration_4.0.0/sdk/keyvault/Azure.Security.KeyVault.Administration/)
GitHub [4.1.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Administration_4.1.0-beta.2/sdk/keyvault/Azure.Security.KeyVault.Administration/) | | Key Vault - Certificates | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Certificates/4.2.0)
NuGet [4.3.0-beta.2](https://www.nuget.org/packages/Azure.Security.KeyVault.Certificates/4.3.0-beta.2) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Certificates-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Certificates_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Certificates/)
GitHub [4.3.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Certificates_4.3.0-beta.2/sdk/keyvault/Azure.Security.KeyVault.Certificates/) | -| Key Vault - Keys | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.2.0)
NuGet [4.3.0-beta.3](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.3.0-beta.3) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Keys-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Keys/)
GitHub [4.3.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.3.0-beta.3/sdk/keyvault/Azure.Security.KeyVault.Keys/) | +| Key Vault - Keys | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.2.0)
NuGet [4.3.0-beta.4](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/4.3.0-beta.4) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Keys-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Keys/)
GitHub [4.3.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Keys_4.3.0-beta.4/sdk/keyvault/Azure.Security.KeyVault.Keys/) | | Key Vault - Secrets | NuGet [4.2.0](https://www.nuget.org/packages/Azure.Security.KeyVault.Secrets/4.2.0)
NuGet [4.3.0-beta.2](https://www.nuget.org/packages/Azure.Security.KeyVault.Secrets/4.3.0-beta.2) | [docs](/dotnet/api/overview/azure/Security.KeyVault.Secrets-readme) | GitHub [4.2.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Secrets_4.2.0/sdk/keyvault/Azure.Security.KeyVault.Secrets/)
GitHub [4.3.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Security.KeyVault.Secrets_4.3.0-beta.2/sdk/keyvault/Azure.Security.KeyVault.Secrets/) | | 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-pre) | 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/) | From 33de384b0578c6f5d628fdcbececb29c12258de4 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Tue, 16 Nov 2021 12:43:09 -0800 Subject: [PATCH 20/37] fix build suggestions (#27109) --- .../strategies-migrating-in-production.md | 2 +- docs/core/deploying/trimming/trim-warnings/il2001.md | 1 - docs/core/deploying/trimming/trim-warnings/il2002.md | 1 - docs/core/deploying/trimming/trim-warnings/il2003.md | 1 - docs/core/deploying/trimming/trim-warnings/il2004.md | 1 - docs/core/deploying/trimming/trim-warnings/il2005.md | 1 - docs/core/deploying/trimming/trim-warnings/il2007.md | 1 - docs/core/deploying/trimming/trim-warnings/il2008.md | 1 - docs/core/deploying/trimming/trim-warnings/il2009.md | 1 - docs/core/deploying/trimming/trim-warnings/il2010.md | 1 - docs/core/deploying/trimming/trim-warnings/il2011.md | 1 - docs/core/deploying/trimming/trim-warnings/il2012.md | 1 - docs/core/deploying/trimming/trim-warnings/il2013.md | 1 - docs/core/deploying/trimming/trim-warnings/il2014.md | 1 - docs/core/deploying/trimming/trim-warnings/il2015.md | 1 - docs/core/deploying/trimming/trim-warnings/il2016.md | 1 - docs/core/deploying/trimming/trim-warnings/il2017.md | 1 - docs/core/deploying/trimming/trim-warnings/il2018.md | 1 - docs/core/deploying/trimming/trim-warnings/il2019.md | 1 - docs/core/deploying/trimming/trim-warnings/il2022.md | 1 - docs/core/deploying/trimming/trim-warnings/il2023.md | 1 - docs/core/deploying/trimming/trim-warnings/il2024.md | 1 - docs/core/deploying/trimming/trim-warnings/il2025.md | 1 - docs/core/deploying/trimming/trim-warnings/il2027.md | 1 - docs/core/deploying/trimming/trim-warnings/il2028.md | 1 - docs/core/deploying/trimming/trim-warnings/il2029.md | 1 - docs/core/deploying/trimming/trim-warnings/il2030.md | 1 - docs/core/deploying/trimming/trim-warnings/il2031.md | 1 - docs/core/deploying/trimming/trim-warnings/il2032.md | 1 - docs/core/deploying/trimming/trim-warnings/il2033.md | 1 - docs/core/deploying/trimming/trim-warnings/il2034.md | 1 - docs/core/deploying/trimming/trim-warnings/il2035.md | 1 - docs/core/deploying/trimming/trim-warnings/il2036.md | 1 - docs/core/deploying/trimming/trim-warnings/il2037.md | 1 - docs/core/deploying/trimming/trim-warnings/il2038.md | 1 - docs/core/deploying/trimming/trim-warnings/il2039.md | 1 - docs/core/deploying/trimming/trim-warnings/il2040.md | 1 - docs/core/deploying/trimming/trim-warnings/il2041.md | 1 - docs/core/deploying/trimming/trim-warnings/il2042.md | 1 - docs/core/deploying/trimming/trim-warnings/il2043.md | 1 - docs/core/deploying/trimming/trim-warnings/il2044.md | 1 - docs/core/deploying/trimming/trim-warnings/il2045.md | 1 - docs/core/deploying/trimming/trim-warnings/il2046.md | 1 - docs/core/deploying/trimming/trim-warnings/il2048.md | 1 - docs/core/deploying/trimming/trim-warnings/il2049.md | 1 - docs/core/deploying/trimming/trim-warnings/il2050.md | 1 - docs/core/deploying/trimming/trim-warnings/il2051.md | 1 - docs/core/deploying/trimming/trim-warnings/il2052.md | 1 - docs/core/deploying/trimming/trim-warnings/il2053.md | 1 - docs/core/deploying/trimming/trim-warnings/il2054.md | 1 - docs/core/deploying/trimming/trim-warnings/il2055.md | 1 - docs/core/deploying/trimming/trim-warnings/il2056.md | 1 - docs/core/deploying/trimming/trim-warnings/il2057.md | 1 - docs/core/deploying/trimming/trim-warnings/il2058.md | 1 - docs/core/deploying/trimming/trim-warnings/il2059.md | 1 - docs/core/deploying/trimming/trim-warnings/il2060.md | 1 - docs/fundamentals/code-analysis/quality-rules/il3002.md | 1 - 57 files changed, 1 insertion(+), 57 deletions(-) diff --git a/docs/architecture/porting-existing-aspnet-apps/strategies-migrating-in-production.md b/docs/architecture/porting-existing-aspnet-apps/strategies-migrating-in-production.md index fdc67051b113f..f2d7e53ac14f0 100644 --- a/docs/architecture/porting-existing-aspnet-apps/strategies-migrating-in-production.md +++ b/docs/architecture/porting-existing-aspnet-apps/strategies-migrating-in-production.md @@ -45,7 +45,7 @@ Eventually, the entire facade layer corresponds to the new, modern implementatio Multi-targeting is recommended for large apps that will be migrated over time and for teams applying the Strangler pattern approach. This approach can address `BindingRedirect` and package restoration challenges that surface from mixing [PackageReference](/nuget/consume-packages/package-references-in-project-files) and [packages.config](/nuget/reference/packages-config) restore styles. There are two options available for code that must run in both .NET Framework and .NET Core environments. -* Preprocessor [`#if` in C#](../../csharp/language-reference/preprocessor-directives.md#conditional-compilation) (or [`#If` in Visual Basic]([preprocessor `#if`](https://docs.microsoft.com/dotnet/visual-basic/reference/language-specification/preprocessing-directives#conditional-compilation))) directives allow you to implement different functionality or use different dependencies when run in .NET Framework versus .NET Core. +* Preprocessor [`#if` in C#](../../csharp/language-reference/preprocessor-directives.md#conditional-compilation) (or [`#If` in Visual Basic]([preprocessor `#if`](/dotnet/visual-basic/reference/language-specification/preprocessing-directives#conditional-compilation)) directives allow you to implement different functionality or use different dependencies when run in .NET Framework versus .NET Core. * Project files can use conditional [globbing patterns](../../core/project-sdk/overview.md#default-includes-and-excludes), such as `*.core.cs`, to include different sets of files based on which framework is being targeted. diff --git a/docs/core/deploying/trimming/trim-warnings/il2001.md b/docs/core/deploying/trimming/trim-warnings/il2001.md index 46e2eb0672e8b..02ba48cc96acd 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2001.md +++ b/docs/core/deploying/trimming/trim-warnings/il2001.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2001: TypePreserveNoFields" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2001" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2002.md b/docs/core/deploying/trimming/trim-warnings/il2002.md index 12a41f35ee3cb..62677ef59ce70 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2002.md +++ b/docs/core/deploying/trimming/trim-warnings/il2002.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2002: TypePreserveNoMethods" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2002" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2003.md b/docs/core/deploying/trimming/trim-warnings/il2003.md index 5ab5d9c31f57a..1a398ee1012ad 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2003.md +++ b/docs/core/deploying/trimming/trim-warnings/il2003.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2003: PreserveDependencyAssemblyNotFoun ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2003" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2004.md b/docs/core/deploying/trimming/trim-warnings/il2004.md index 0d9d0021d66d1..6e922441d6273 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2004.md +++ b/docs/core/deploying/trimming/trim-warnings/il2004.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2004: PreserveDependencyTypeNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2004" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2005.md b/docs/core/deploying/trimming/trim-warnings/il2005.md index 62bf1e96c5a6e..2e5cfc3fd28c6 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2005.md +++ b/docs/core/deploying/trimming/trim-warnings/il2005.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2005: PreserveDependencyMemberNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2005" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2007.md b/docs/core/deploying/trimming/trim-warnings/il2007.md index ae991e6e2c835..56e94e22536a4 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2007.md +++ b/docs/core/deploying/trimming/trim-warnings/il2007.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2007: DescriptorAssemblyNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2007" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2008.md b/docs/core/deploying/trimming/trim-warnings/il2008.md index 25671797b8c7a..137f2e80ce048 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2008.md +++ b/docs/core/deploying/trimming/trim-warnings/il2008.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2008: DescriptorTypeNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2008" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2009.md b/docs/core/deploying/trimming/trim-warnings/il2009.md index 8fa4a0dde6c4b..45793402b1aa8 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2009.md +++ b/docs/core/deploying/trimming/trim-warnings/il2009.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2009: DescriptorMethodNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2009" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2010.md b/docs/core/deploying/trimming/trim-warnings/il2010.md index ba86c786d5d50..a4299016b83c2 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2010.md +++ b/docs/core/deploying/trimming/trim-warnings/il2010.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2010: InvalidSubstitutionValue" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2010" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2011.md b/docs/core/deploying/trimming/trim-warnings/il2011.md index 6ebd37a7ec8c1..2b8a02c98837c 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2011.md +++ b/docs/core/deploying/trimming/trim-warnings/il2011.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2011: UnknownBodyModificationAction" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2011" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2012.md b/docs/core/deploying/trimming/trim-warnings/il2012.md index 5dc8479f89a8b..0e642a12999e2 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2012.md +++ b/docs/core/deploying/trimming/trim-warnings/il2012.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2012: SubstitutionFieldNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2012" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2013.md b/docs/core/deploying/trimming/trim-warnings/il2013.md index 4ac9b08f0b6ed..5eedf7679f509 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2013.md +++ b/docs/core/deploying/trimming/trim-warnings/il2013.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2013: SubstitutionNonStaticField" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2013" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2014.md b/docs/core/deploying/trimming/trim-warnings/il2014.md index 6689bc7a73312..42b400b0725dc 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2014.md +++ b/docs/core/deploying/trimming/trim-warnings/il2014.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2014: SubstitutionFieldMissingValue" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2014" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2015.md b/docs/core/deploying/trimming/trim-warnings/il2015.md index 6b593040f4205..2d22d3284e31e 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2015.md +++ b/docs/core/deploying/trimming/trim-warnings/il2015.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2015: SubstitutionFieldInvalidValue" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2015" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2016.md b/docs/core/deploying/trimming/trim-warnings/il2016.md index 50e3035870a29..a6dd6cec1f37f 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2016.md +++ b/docs/core/deploying/trimming/trim-warnings/il2016.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2016: DataFormatEventNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2016" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2017.md b/docs/core/deploying/trimming/trim-warnings/il2017.md index 1f4d792d23d14..709fa807b1df3 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2017.md +++ b/docs/core/deploying/trimming/trim-warnings/il2017.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2017: DataFormatPropertyNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2017" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2018.md b/docs/core/deploying/trimming/trim-warnings/il2018.md index 981ca68e1e2e4..9975ebfe52d05 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2018.md +++ b/docs/core/deploying/trimming/trim-warnings/il2018.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2018: DescriptorGetAccessorNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2018" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2019.md b/docs/core/deploying/trimming/trim-warnings/il2019.md index 66a56ef18540f..44430618b8d46 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2019.md +++ b/docs/core/deploying/trimming/trim-warnings/il2019.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2019: DescriptorSetAccessorNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2019" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2022.md b/docs/core/deploying/trimming/trim-warnings/il2022.md index b4556fa094e1b..010495af7f08d 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2022.md +++ b/docs/core/deploying/trimming/trim-warnings/il2022.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2022: CustomAttributeAnnotationsConstru ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2022" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2023.md b/docs/core/deploying/trimming/trim-warnings/il2023.md index d82d5fcdebd89..54242b98a7f0e 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2023.md +++ b/docs/core/deploying/trimming/trim-warnings/il2023.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2023: CustomAttributeAnnotationsMoreTha ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2023" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2024.md b/docs/core/deploying/trimming/trim-warnings/il2024.md index d1bf860fe51ed..825230e0f4e4a 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2024.md +++ b/docs/core/deploying/trimming/trim-warnings/il2024.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2024: CustomAttributeAnnotationsMoreTha ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2024" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2025.md b/docs/core/deploying/trimming/trim-warnings/il2025.md index 004945e56f139..cf3d97f69f626 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2025.md +++ b/docs/core/deploying/trimming/trim-warnings/il2025.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2025: DescriptorDuplicatePreserve" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2025" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2027.md b/docs/core/deploying/trimming/trim-warnings/il2027.md index ebbec2c194088..edfac386f00eb 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2027.md +++ b/docs/core/deploying/trimming/trim-warnings/il2027.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2027: TrimmerAttributeUsedMoreThanOnce" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2027" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2028.md b/docs/core/deploying/trimming/trim-warnings/il2028.md index 6c327b61cf3c9..9980d0e4f3aef 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2028.md +++ b/docs/core/deploying/trimming/trim-warnings/il2028.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2028: TrimmerAttributeParametersArityMi ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2028" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2029.md b/docs/core/deploying/trimming/trim-warnings/il2029.md index 08fb24080709b..4538a5c3330d0 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2029.md +++ b/docs/core/deploying/trimming/trim-warnings/il2029.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2029: CustomAttributeAnnotationsFullnam ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2029" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2030.md b/docs/core/deploying/trimming/trim-warnings/il2030.md index b63215c7ea5c6..ddd8f6abc79af 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2030.md +++ b/docs/core/deploying/trimming/trim-warnings/il2030.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2030: CustomAttributeAnnotationsAssembl ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2030" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2031.md b/docs/core/deploying/trimming/trim-warnings/il2031.md index 542e2c6c72a24..87f9ed49293b3 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2031.md +++ b/docs/core/deploying/trimming/trim-warnings/il2031.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2031: CustomAttributeAnnotationsFullnam ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2031" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2032.md b/docs/core/deploying/trimming/trim-warnings/il2032.md index 90c07e0a11393..e34a9b677ab8c 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2032.md +++ b/docs/core/deploying/trimming/trim-warnings/il2032.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2032: CreateInstanceUnrecognizedParamet ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2032" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2033.md b/docs/core/deploying/trimming/trim-warnings/il2033.md index e7d577b2aa222..a4194cb7754ac 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2033.md +++ b/docs/core/deploying/trimming/trim-warnings/il2033.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2033: PreserveDependencyAttributeDeprec ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2033" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2034.md b/docs/core/deploying/trimming/trim-warnings/il2034.md index d6da0efe65f1a..01c1f1fb72dd1 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2034.md +++ b/docs/core/deploying/trimming/trim-warnings/il2034.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2034: CouldNotAnalyzeDynamicDependency" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2034" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2035.md b/docs/core/deploying/trimming/trim-warnings/il2035.md index 9a08d99e90edb..666dbb3bcd619 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2035.md +++ b/docs/core/deploying/trimming/trim-warnings/il2035.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2035: DynamicDependencyUnresolvedAssemb ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2035" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2036.md b/docs/core/deploying/trimming/trim-warnings/il2036.md index b2a3b2cc2fda8..4029bf05d293d 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2036.md +++ b/docs/core/deploying/trimming/trim-warnings/il2036.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2036: DynamicDependencyUnresolvedType" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2036" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2037.md b/docs/core/deploying/trimming/trim-warnings/il2037.md index 3b0e765ef5f53..2e20e7e6d8b01 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2037.md +++ b/docs/core/deploying/trimming/trim-warnings/il2037.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2037: DynamicDependencyUnresolvedMember ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2037" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2038.md b/docs/core/deploying/trimming/trim-warnings/il2038.md index e877b82f7736c..4e658cc3fb684 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2038.md +++ b/docs/core/deploying/trimming/trim-warnings/il2038.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2038: SubstitutionResourceName" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2038" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2039.md b/docs/core/deploying/trimming/trim-warnings/il2039.md index 15ec9ffbf479a..a97c904e71c2f 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2039.md +++ b/docs/core/deploying/trimming/trim-warnings/il2039.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2039: SubstitutionResourceAction" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2039" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2040.md b/docs/core/deploying/trimming/trim-warnings/il2040.md index fe157e3a6dea7..dbbac97ada6d1 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2040.md +++ b/docs/core/deploying/trimming/trim-warnings/il2040.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2040: SubstitutionResourceNotFound" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2040" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2041.md b/docs/core/deploying/trimming/trim-warnings/il2041.md index 7184e093aac8e..ccfeff6d70591 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2041.md +++ b/docs/core/deploying/trimming/trim-warnings/il2041.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2041: DynamicallyAccessedMembersNotAllo ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2041" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2042.md b/docs/core/deploying/trimming/trim-warnings/il2042.md index d061d199ac7b9..c4efa4dadccf2 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2042.md +++ b/docs/core/deploying/trimming/trim-warnings/il2042.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2042: DynamicallyAccessedMembersNoUniqu ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2042" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2043.md b/docs/core/deploying/trimming/trim-warnings/il2043.md index 0eb8f220dc7da..e67bf609ee145 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2043.md +++ b/docs/core/deploying/trimming/trim-warnings/il2043.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2043: DynamicallyAccessedMembersPropert ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2043" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2044.md b/docs/core/deploying/trimming/trim-warnings/il2044.md index bafc6314730e9..3c87dc835b85b 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2044.md +++ b/docs/core/deploying/trimming/trim-warnings/il2044.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2044: DescriptorNamespaceWithNoTypes" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2044" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2045.md b/docs/core/deploying/trimming/trim-warnings/il2045.md index 7a3f5129a620a..ad72026d398c7 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2045.md +++ b/docs/core/deploying/trimming/trim-warnings/il2045.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2045: CustomAttributeAnnotationsRemovin ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2045" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2046.md b/docs/core/deploying/trimming/trim-warnings/il2046.md index dbbfdb85dc5e1..b412aeaa5cdb5 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2046.md +++ b/docs/core/deploying/trimming/trim-warnings/il2046.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2046: RequiresUnreferencedCodeAttribute ms.date: 08/27/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2046" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2048.md b/docs/core/deploying/trimming/trim-warnings/il2048.md index 27a51dfd4f6be..53eb1bc74bff0 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2048.md +++ b/docs/core/deploying/trimming/trim-warnings/il2048.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2048: RemoveAttributeInstancesOnMember" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2048" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2049.md b/docs/core/deploying/trimming/trim-warnings/il2049.md index 95e4545999ea2..b351577ec57a3 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2049.md +++ b/docs/core/deploying/trimming/trim-warnings/il2049.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2049: UnrecognizedInternalAttribute" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2049" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2050.md b/docs/core/deploying/trimming/trim-warnings/il2050.md index 05aaab74b56bb..341e00bac892d 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2050.md +++ b/docs/core/deploying/trimming/trim-warnings/il2050.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2050: COMCorrectness" ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2050" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2051.md b/docs/core/deploying/trimming/trim-warnings/il2051.md index 11462c1fbf7f7..193be74d4e608 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2051.md +++ b/docs/core/deploying/trimming/trim-warnings/il2051.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2051: CustomAttributeAnnotationsPropert ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2051" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2052.md b/docs/core/deploying/trimming/trim-warnings/il2052.md index ad0e2456f4947..1fee2ed58fa61 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2052.md +++ b/docs/core/deploying/trimming/trim-warnings/il2052.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2052: CustomAttributeAnnotationsPropert ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2052" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2053.md b/docs/core/deploying/trimming/trim-warnings/il2053.md index c8af9ff9f6ad7..380f32e711159 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2053.md +++ b/docs/core/deploying/trimming/trim-warnings/il2053.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2053: CustomAttributeAnnotationsPropert ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2053" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2054.md b/docs/core/deploying/trimming/trim-warnings/il2054.md index b6de7a10e17b8..69a597c66dda0 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2054.md +++ b/docs/core/deploying/trimming/trim-warnings/il2054.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2054: CustomAttributeAnnotationsInvalid ms.date: 08/25/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2054" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2055.md b/docs/core/deploying/trimming/trim-warnings/il2055.md index ec05dae4acd99..12a411143a179 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2055.md +++ b/docs/core/deploying/trimming/trim-warnings/il2055.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2055: MakeGenericTypeCall" ms.date: 07/23/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2055" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2056.md b/docs/core/deploying/trimming/trim-warnings/il2056.md index d9bf061979fc2..5545758b3f9b5 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2056.md +++ b/docs/core/deploying/trimming/trim-warnings/il2056.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2056: DynamicallyAccessedMembersPropert ms.date: 07/23/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2056" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2057.md b/docs/core/deploying/trimming/trim-warnings/il2057.md index 544c2cd35bdb2..b09940e6703b3 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2057.md +++ b/docs/core/deploying/trimming/trim-warnings/il2057.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2057: UnrecognizedParameterGetType" ms.date: 07/23/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2057" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2058.md b/docs/core/deploying/trimming/trim-warnings/il2058.md index 6005330a6a214..4d1159ce16fb2 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2058.md +++ b/docs/core/deploying/trimming/trim-warnings/il2058.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2058: AssemblyCreateInstanceParameters" ms.date: 07/23/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2058" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2059.md b/docs/core/deploying/trimming/trim-warnings/il2059.md index 0bb5d35ca14f2..84c6e97aca03f 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2059.md +++ b/docs/core/deploying/trimming/trim-warnings/il2059.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2059: UnrecognizedParameterRunClassCons ms.date: 07/23/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2059" --- diff --git a/docs/core/deploying/trimming/trim-warnings/il2060.md b/docs/core/deploying/trimming/trim-warnings/il2060.md index 943b252588c3d..ce65b6441c0b6 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2060.md +++ b/docs/core/deploying/trimming/trim-warnings/il2060.md @@ -4,7 +4,6 @@ description: "Learn about trim warning IL2060: MakeGenericMethodCall" ms.date: 07/23/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL2060" --- diff --git a/docs/fundamentals/code-analysis/quality-rules/il3002.md b/docs/fundamentals/code-analysis/quality-rules/il3002.md index 019c2bddbbb9b..70e4e3f4c2b2b 100644 --- a/docs/fundamentals/code-analysis/quality-rules/il3002.md +++ b/docs/fundamentals/code-analysis/quality-rules/il3002.md @@ -4,7 +4,6 @@ description: "Members annotated with 'RequiresAssemblyFilesAttribute' require as ms.date: 04/15/2021 ms.topic: reference author: mateoatr -ms.author: matorre f1_keywords: - "IL3002" - "RequiresAssemblyFiles" From 35b4b0ae445dff0d27ea43e3440039573fb0b799 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Tue, 16 Nov 2021 12:51:46 -0800 Subject: [PATCH 21/37] Add note about FTP (#27094) --- docs/core/compatibility/networking/6.0/webrequest-deprecated.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/core/compatibility/networking/6.0/webrequest-deprecated.md b/docs/core/compatibility/networking/6.0/webrequest-deprecated.md index 78225310c1995..1c627edfd1db3 100644 --- a/docs/core/compatibility/networking/6.0/webrequest-deprecated.md +++ b/docs/core/compatibility/networking/6.0/webrequest-deprecated.md @@ -21,6 +21,8 @@ Starting in .NET 6, the , class instead. +For FTP, since doesn't support it, we recommend using a third-party library. + ## Affected APIs - From 13db9bb53f620fe703b13fa5214f8ffa374ae5fb Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Tue, 16 Nov 2021 17:13:58 -0500 Subject: [PATCH 22/37] Add with-expressions to anonymous types (#27111) * Add with-expressions to anonymous types Fixes #26770 With-expressions can be used with anonymous types. * code review --- docs/csharp/fundamentals/types/anonymous-types.md | 4 ++++ .../types/snippets/anonymous-types/Program.cs | 11 +++++++++-- .../snippets/anonymous-types/anonymous-types.csproj | 4 +++- .../snippets/with-expression/BasicExample.cs | 10 ++++++++-- .../with-expression/ExampleWithReferenceType.cs | 5 +++-- .../snippets/with-expression/with-expression.csproj | 5 +++-- .../language-reference/operators/with-expression.md | 2 +- docs/csharp/whats-new/csharp-10.md | 2 +- 8 files changed, 32 insertions(+), 11 deletions(-) diff --git a/docs/csharp/fundamentals/types/anonymous-types.md b/docs/csharp/fundamentals/types/anonymous-types.md index 078c5cee5d89b..a5238cbd7f09e 100644 --- a/docs/csharp/fundamentals/types/anonymous-types.md +++ b/docs/csharp/fundamentals/types/anonymous-types.md @@ -44,6 +44,10 @@ Anonymous types are [`class`](../../language-reference/keywords/class.md) types If two or more anonymous object initializers in an assembly specify a sequence of properties that are in the same order and that have the same names and types, the compiler treats the objects as instances of the same type. They share the same compiler-generated type information. +Anonymous types support non-destructive mutation in the form of [with expressions](../../language-reference/operators/with-expression.md). This enables you to create a new instance of an anonymous type where one or more properties have new values: + +:::code language="csharp" source="snippets/anonymous-types/Program.cs" ID="snippet02"::: + You cannot declare a field, a property, an event, or the return type of a method as having an anonymous type. Similarly, you cannot declare a formal parameter of a method, property, constructor, or indexer as having an anonymous type. To pass an anonymous type, or a collection that contains anonymous types, as an argument to a method, you can declare the parameter as type `object`. However, using `object` for anonymous types defeats the purpose of strong typing. If you must store query results or pass them outside the method boundary, consider using an ordinary named struct or class instead of an anonymous type. Because the and methods on anonymous types are defined in terms of the `Equals` and `GetHashCode` methods of the properties, two instances of the same anonymous type are equal only if all their properties are equal. diff --git a/docs/csharp/fundamentals/types/snippets/anonymous-types/Program.cs b/docs/csharp/fundamentals/types/snippets/anonymous-types/Program.cs index 8dd1e8923532f..d24fef4bb0b80 100644 --- a/docs/csharp/fundamentals/types/snippets/anonymous-types/Program.cs +++ b/docs/csharp/fundamentals/types/snippets/anonymous-types/Program.cs @@ -6,7 +6,7 @@ namespace anonymous_types { class Product { - public string Color {get;set;} + public string? Color {get;set;} public decimal Price {get;set;} } class Anonymous @@ -16,7 +16,7 @@ static void Main() // don't show this unless you add a bunch more // properties to the type. otherwise it obviates the // need for the anonymous type - List products = new List() + List products = new () { new Product() { Color="Orange", Price=2.00M}, }; @@ -31,6 +31,13 @@ from prod in products Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price); } // + + // + var apple = new { Item = "apples", Price = 1.35 }; + var onSale = apple with { Price = 0.79 }; + Console.WriteLine(apple); + Console.WriteLine(onSale); + // } } } diff --git a/docs/csharp/fundamentals/types/snippets/anonymous-types/anonymous-types.csproj b/docs/csharp/fundamentals/types/snippets/anonymous-types/anonymous-types.csproj index 156fd1747df13..fd0406efdd61a 100644 --- a/docs/csharp/fundamentals/types/snippets/anonymous-types/anonymous-types.csproj +++ b/docs/csharp/fundamentals/types/snippets/anonymous-types/anonymous-types.csproj @@ -2,8 +2,10 @@ Exe - net5.0 + net6.0 anonymous_types + enable + enable diff --git a/docs/csharp/language-reference/operators/snippets/with-expression/BasicExample.cs b/docs/csharp/language-reference/operators/snippets/with-expression/BasicExample.cs index 28f7dcfd9c700..ccb35740632bb 100644 --- a/docs/csharp/language-reference/operators/snippets/with-expression/BasicExample.cs +++ b/docs/csharp/language-reference/operators/snippets/with-expression/BasicExample.cs @@ -1,4 +1,4 @@ -using System; +using System; public class WithExpressionBasicExample { @@ -20,5 +20,11 @@ public static void Main() Console.WriteLine($"{nameof(p3)}: {p3}"); // output: p3: NamedPoint { Name = C, X = 0, Y = 4 } Console.WriteLine($"{nameof(p1)}: {p1}"); // output: p1: NamedPoint { Name = A, X = 0, Y = 0 } + + var apples = new { Item = "Apples", Price = "1.19" }; + Console.WriteLine($"original apples: {apples}"); + var saleApples = apples with { Price = "0.79" }; + Console.WriteLine($"sale apples: {saleApples}"); + } -} \ No newline at end of file +} diff --git a/docs/csharp/language-reference/operators/snippets/with-expression/ExampleWithReferenceType.cs b/docs/csharp/language-reference/operators/snippets/with-expression/ExampleWithReferenceType.cs index c411fd06d768c..650141d8510ae 100644 --- a/docs/csharp/language-reference/operators/snippets/with-expression/ExampleWithReferenceType.cs +++ b/docs/csharp/language-reference/operators/snippets/with-expression/ExampleWithReferenceType.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; public class ExampleWithReferenceType @@ -19,5 +19,6 @@ public static void Main() original.Tags.Add("C"); Console.WriteLine($"Tags of {nameof(copy)}: {copy.PrintTags()}"); // output: Tags of copy: A, B, C + } -} \ No newline at end of file +} diff --git a/docs/csharp/language-reference/operators/snippets/with-expression/with-expression.csproj b/docs/csharp/language-reference/operators/snippets/with-expression/with-expression.csproj index bd910ae738662..b025ae3c58395 100644 --- a/docs/csharp/language-reference/operators/snippets/with-expression/with-expression.csproj +++ b/docs/csharp/language-reference/operators/snippets/with-expression/with-expression.csproj @@ -2,10 +2,11 @@ Exe - net5.0 - 9.0 + net6.0 with_expression with_expression.Program + enable + enable diff --git a/docs/csharp/language-reference/operators/with-expression.md b/docs/csharp/language-reference/operators/with-expression.md index dffc47a74bb28..2eadd41bc50a9 100644 --- a/docs/csharp/language-reference/operators/with-expression.md +++ b/docs/csharp/language-reference/operators/with-expression.md @@ -16,7 +16,7 @@ Available in C# 9.0 and later, a `with` expression produces a copy of its operan As the preceding example shows, you use [object initializer](../../programming-guide/classes-and-structs/object-and-collection-initializers.md) syntax to specify what members to modify and their new values. -In C# 9.0, a left-hand operand of a `with` expression must be of a [record type](../builtin-types/record.md). Beginning with C# 10, a left-hand operand of a `with` expression can also be of a [structure type](../builtin-types/struct.md). +In C# 9.0, a left-hand operand of a `with` expression must be of a [record type](../builtin-types/record.md). Beginning with C# 10, a left-hand operand of a `with` expression can also be of a [structure type](../builtin-types/struct.md) or an [anonymous type](../../fundamentals/types/anonymous-types.md). The result of a `with` expression has the same run-time type as the expression's operand, as the following example shows: diff --git a/docs/csharp/whats-new/csharp-10.md b/docs/csharp/whats-new/csharp-10.md index 10637b4c368be..d27f18784c3ea 100644 --- a/docs/csharp/whats-new/csharp-10.md +++ b/docs/csharp/whats-new/csharp-10.md @@ -37,7 +37,7 @@ You can declare value type records using the [`record struct` or `readonly recor C# 10 introduces the following improvements related to structure types: - You can declare an instance parameterless constructor in a structure type and initialize an instance field or property at its declaration. For more information, see the [Parameterless constructors and field initializers](../language-reference/builtin-types/struct.md#parameterless-constructors-and-field-initializers) section of the [Structure types](../language-reference/builtin-types/struct.md) article. -- A left-hand operand of the [`with` expression](../language-reference/operators/with-expression.md) can be of any structure type. +- A left-hand operand of the [`with` expression](../language-reference/operators/with-expression.md) can be of any structure type or an anonymous (reference) type. ## Interpolated string handler From 7d154398524a65e3d6da5c56aadbd3afa7b43289 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Nov 2021 08:11:50 -0600 Subject: [PATCH 23/37] Bump Humanizer (#27124) Bumps [Humanizer](https://github.com/Humanizr/Humanizer) from 2.11.10 to 2.13.14. - [Release notes](https://github.com/Humanizr/Humanizer/releases) - [Changelog](https://github.com/Humanizr/Humanizer/blob/main/release_notes.md) - [Commits](https://github.com/Humanizr/Humanizer/compare/v2.11.10...v2.13.14) --- updated-dependencies: - dependency-name: Humanizer dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../csharp/FrenchPlugin/FrenchPlugin.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/core/tutorials/creating-app-with-plugin-support/csharp/FrenchPlugin/FrenchPlugin.csproj b/samples/snippets/core/tutorials/creating-app-with-plugin-support/csharp/FrenchPlugin/FrenchPlugin.csproj index 3cd35a236f49d..5b065d7b6283e 100644 --- a/samples/snippets/core/tutorials/creating-app-with-plugin-support/csharp/FrenchPlugin/FrenchPlugin.csproj +++ b/samples/snippets/core/tutorials/creating-app-with-plugin-support/csharp/FrenchPlugin/FrenchPlugin.csproj @@ -6,7 +6,7 @@
- + From 27f81379558d21db0486cf38efa6b7e1e0ca5e7f Mon Sep 17 00:00:00 2001 From: wuyuansushen <43259764+wuyuansushen@users.noreply.github.com> Date: Wed, 17 Nov 2021 22:12:28 +0800 Subject: [PATCH 24/37] Fix Dispose(bool) method overload in ConjunctiveDisposable pattern (#27118) * Update ExampleAsyncDisposable.cs * Update ExampleConjunctiveDisposable.cs --- .../snippets/dispose-async/ExampleConjunctiveDisposable.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/standard/garbage-collection/snippets/dispose-async/ExampleConjunctiveDisposable.cs b/docs/standard/garbage-collection/snippets/dispose-async/ExampleConjunctiveDisposable.cs index e0f2b0ef11f81..b77ba8255e648 100644 --- a/docs/standard/garbage-collection/snippets/dispose-async/ExampleConjunctiveDisposable.cs +++ b/docs/standard/garbage-collection/snippets/dispose-async/ExampleConjunctiveDisposable.cs @@ -29,10 +29,9 @@ protected virtual void Dispose(bool disposing) { _disposableResource?.Dispose(); (_asyncDisposableResource as IDisposable)?.Dispose(); + _disposableResource = null; + _asyncDisposableResource = null; } - - _disposableResource = null; - _asyncDisposableResource = null; } protected virtual async ValueTask DisposeAsyncCore() From 657431b81de878e78d7a69d15428c279c39876bd Mon Sep 17 00:00:00 2001 From: Jeff Handley Date: Wed, 17 Nov 2021 06:15:25 -0800 Subject: [PATCH 25/37] Add documentation for CA2255 (new in .NET 6) (#27096) * Add documentation for CA2255 (new in .NET 6) * Address pr feedback --- docs/fundamentals/code-analysis/overview.md | 2 +- .../code-analysis/quality-rules/ca2255.md | 40 +++++++++++++++++++ .../code-analysis/quality-rules/index.md | 1 + .../quality-rules/usage-warnings.md | 1 + docs/fundamentals/toc.yml | 2 + 5 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 docs/fundamentals/code-analysis/quality-rules/ca2255.md diff --git a/docs/fundamentals/code-analysis/overview.md b/docs/fundamentals/code-analysis/overview.md index 568fe21f12205..ac7914a23a3a6 100644 --- a/docs/fundamentals/code-analysis/overview.md +++ b/docs/fundamentals/code-analysis/overview.md @@ -45,7 +45,7 @@ The following rules are enabled, by default, in .NET 6. | [CA2200](quality-rules/ca2200.md) | Usage | Warning | Rethrow to preserve stack details | | [CA2252](quality-rules/ca2252.md) | Usage | Error | Opt in to preview features | | [CA2247](quality-rules/ca2247.md) | Usage | Warning | Argument passed to `TaskCompletionSource` constructor should be enum instead of | -| CA2255 | Usage | Warning | The `ModuleInitializer` attribute should not be used in libraries | +| [CA2255](quality-rules/ca2255.md) | Usage | Warning | The `ModuleInitializer` attribute should not be used in libraries | | CA2256 | Usage | Warning | All members declared in parent interfaces must have an implementation in a `DynamicInterfaceCastableImplementation`-attributed interface | | CA2257 | Usage | Warning | Members defined on an interface with the `DynamicInterfaceCastableImplementationAttribute` should be `static` | | CA2258 | Usage | Warning | Providing a `DynamicInterfaceCastableImplementation` interface in Visual Basic is unsupported | diff --git a/docs/fundamentals/code-analysis/quality-rules/ca2255.md b/docs/fundamentals/code-analysis/quality-rules/ca2255.md new file mode 100644 index 0000000000000..87e2acaf1c821 --- /dev/null +++ b/docs/fundamentals/code-analysis/quality-rules/ca2255.md @@ -0,0 +1,40 @@ +--- +title: "CA2255: The 'ModuleInitializer' attribute should not be used in libraries" +description: "Learn about code analysis rule CA2255: The 'ModuleInitializer' attribute should not be used in libraries" +ms.date: 11/15/2021 +ms.topic: reference +f1_keywords: +- CA2255 +- ModuleInitializerAttributeShouldNotBeUsedInLibraries +helpviewer_keywords: +- ModuleInitializerAttributeShouldNotBeUsedInLibraries +- CA2255 +author: jeffhandley +--- +# CA2255: The `ModuleInitializer` attribute should not be used in libraries + +| | Value | +|-|-| +| **Rule ID** |CA2255| +| **Category** |[Usage](usage-warnings.md)| +| **Fix is breaking or non-breaking** |Non-breaking| + +## Cause + +Applying to a method within a Class Library. + +## Rule description + +Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. If library code declares a method with the , it can interfere with application initialization and also lead to limitations in that application's trimming abilities. Library code should therefore not utilize the attribute. + +## How to fix violations + +Instead of using methods with the , a library should expose methods that can be used to initialize any components within the library, and allow the application to invoke the method during application initialization. + +## When to suppress warnings + +It is safe to suppress warnings from this rule if a solution uses a Class Library for code factoring purposes, and the method is not part of a shared or distributed library or package. + +## See also + +- [Usage warnings](usage-warnings.md) diff --git a/docs/fundamentals/code-analysis/quality-rules/index.md b/docs/fundamentals/code-analysis/quality-rules/index.md index eec2d987fea53..ad6e45c1452e8 100644 --- a/docs/fundamentals/code-analysis/quality-rules/index.md +++ b/docs/fundamentals/code-analysis/quality-rules/index.md @@ -187,6 +187,7 @@ The following table lists code quality analysis rules. > | [CA2250: Use `ThrowIfCancellationRequested`](ca2250.md) | `ThrowIfCancellationRequested` automatically checks whether the token has been canceled, and throws an `OperationCanceledException` if it has. | > | [CA2251: Use `String.Equals` over `String.Compare`](ca2251.md) | It is both clearer and likely faster to use `String.Equals` instead of comparing the result of `String.Compare` to zero. | > | [CA2252: Opt in to preview features](ca2252.md) | Opt in to preview features before using preview APIs. | +> | [CA2255: The `ModuleInitializer` attribute should not be used in libraries](ca2255.md) | Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. | > | [CA2300: Do not use insecure deserializer BinaryFormatter](ca2300.md) | Insecure deserializers are vulnerable when deserializing untrusted data. An attacker could modify the serialized data to include unexpected types to inject objects with malicious side effects. | > | [CA2301: Do not call BinaryFormatter.Deserialize without first setting BinaryFormatter.Binder](ca2301.md) | Insecure deserializers are vulnerable when deserializing untrusted data. An attacker could modify the serialized data to include unexpected types to inject objects with malicious side effects. | > | [CA2302: Ensure BinaryFormatter.Binder is set before calling BinaryFormatter.Deserialize](ca2302.md) | Insecure deserializers are vulnerable when deserializing untrusted data. An attacker could modify the serialized data to include unexpected types to inject objects with malicious side effects. | diff --git a/docs/fundamentals/code-analysis/quality-rules/usage-warnings.md b/docs/fundamentals/code-analysis/quality-rules/usage-warnings.md index 3d65ed08ce7dd..2fe754465c34a 100644 --- a/docs/fundamentals/code-analysis/quality-rules/usage-warnings.md +++ b/docs/fundamentals/code-analysis/quality-rules/usage-warnings.md @@ -55,3 +55,4 @@ Usage rules support proper usage of .NET. |[CA2250: Use `ThrowIfCancellationRequested`](ca2250.md) | `ThrowIfCancellationRequested` automatically checks whether the token has been canceled, and throws an `OperationCanceledException` if it has.| |[CA2251: Use `String.Equals` over `String.Compare`](ca2251.md)|It is both clearer and likely faster to use `String.Equals` instead of comparing the result of `String.Compare` to zero.| |[CA2252: Opt in to preview features](ca2252.md)|Opt in to preview features before using preview APIs.| +|[CA2255: The `ModuleInitializer` attribute should not be used in libraries](ca2255.md) | Module initializers are intended to be used by application code to ensure an application's components are initialized before the application code begins executing. | diff --git a/docs/fundamentals/toc.yml b/docs/fundamentals/toc.yml index 0f93d62d706a9..7348cd7757183 100644 --- a/docs/fundamentals/toc.yml +++ b/docs/fundamentals/toc.yml @@ -1310,6 +1310,8 @@ items: href: code-analysis/quality-rules/ca2251.md - name: CA2252 href: code-analysis/quality-rules/ca2252.md + - name: CA2255 + href: code-analysis/quality-rules/ca2255.md - name: Code style rules items: - name: Overview From ff039e33e6c0339a700aa92e8a0341378e160d29 Mon Sep 17 00:00:00 2001 From: Jeff Handley Date: Wed, 17 Nov 2021 06:16:27 -0800 Subject: [PATCH 26/37] Remove backticks from page metadata (#27114) --- .../casting-rcw-to-inspectable-interface-throws-exception.md | 4 ++-- docs/fundamentals/code-analysis/quality-rules/ca1846.md | 4 ++-- docs/fundamentals/code-analysis/quality-rules/ca1850.md | 4 ++-- docs/fundamentals/code-analysis/quality-rules/ca2018.md | 4 ++-- docs/fundamentals/code-analysis/quality-rules/ca2250.md | 4 ++-- docs/fundamentals/code-analysis/quality-rules/ca2251.md | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/core/compatibility/interop/5.0/casting-rcw-to-inspectable-interface-throws-exception.md b/docs/core/compatibility/interop/5.0/casting-rcw-to-inspectable-interface-throws-exception.md index b03feb5a2f723..7babac80c10aa 100644 --- a/docs/core/compatibility/interop/5.0/casting-rcw-to-inspectable-interface-throws-exception.md +++ b/docs/core/compatibility/interop/5.0/casting-rcw-to-inspectable-interface-throws-exception.md @@ -1,6 +1,6 @@ --- -title: "Breaking change: Casting RCW to `InterfaceIsIInspectable` throws exception" -description: Learn about the interop breaking change in .NET 5 where casting an RCW to an `InterfaceIsIInspectable` interface throws a PlatformNotSupportedException. +title: "Breaking change: Casting RCW to InterfaceIsIInspectable throws exception" +description: Learn about the interop breaking change in .NET 5 where casting an RCW to an InterfaceIsIInspectable interface throws a PlatformNotSupportedException. ms.date: 09/13/2020 --- # Casting RCW to an `InterfaceIsIInspectable` interface throws PlatformNotSupportedException diff --git a/docs/fundamentals/code-analysis/quality-rules/ca1846.md b/docs/fundamentals/code-analysis/quality-rules/ca1846.md index 9bb87a58eeb14..790a646034c1c 100644 --- a/docs/fundamentals/code-analysis/quality-rules/ca1846.md +++ b/docs/fundamentals/code-analysis/quality-rules/ca1846.md @@ -1,6 +1,6 @@ --- -title: "CA1846: Prefer `AsSpan` over `Substring`" -description: "Learn about code analysis rule CA1846: Prefer `AsSpan` over `Substring`" +title: "CA1846: Prefer AsSpan over Substring" +description: "Learn about code analysis rule CA1846: Prefer AsSpan over Substring" ms.date: 05/21/2021 ms.topic: reference f1_keywords: diff --git a/docs/fundamentals/code-analysis/quality-rules/ca1850.md b/docs/fundamentals/code-analysis/quality-rules/ca1850.md index 9c3dd55b00aa1..f97b024dbec92 100644 --- a/docs/fundamentals/code-analysis/quality-rules/ca1850.md +++ b/docs/fundamentals/code-analysis/quality-rules/ca1850.md @@ -1,6 +1,6 @@ --- -title: "CA1850: Prefer static `HashData` method over `ComputeHash`" -description: "It is more efficient to use the static `HashData` method over creating and managing a HashAlgorithm instance to call `ComputeHash`" +title: "CA1850: Prefer static HashData method over ComputeHash" +description: "It is more efficient to use the static HashData method over creating and managing a HashAlgorithm instance to call ComputeHash" ms.date: 10/23/2021 ms.topic: reference f1_keywords: diff --git a/docs/fundamentals/code-analysis/quality-rules/ca2018.md b/docs/fundamentals/code-analysis/quality-rules/ca2018.md index 570b223cc96b1..67d34bb57d572 100644 --- a/docs/fundamentals/code-analysis/quality-rules/ca2018.md +++ b/docs/fundamentals/code-analysis/quality-rules/ca2018.md @@ -1,6 +1,6 @@ --- -title: "CA2018: The `count` argument to `Buffer.BlockCopy` should specify the number of bytes to copy" -description: "Learn about code analysis rule CA2018: The `count` argument to `Buffer.BlockCopy` should specify the number of bytes to copy" +title: "CA2018: The count argument to Buffer.BlockCopy should specify the number of bytes to copy" +description: "Learn about code analysis rule CA2018: The count argument to Buffer.BlockCopy should specify the number of bytes to copy" ms.date: 08/17/2021 ms.topic: reference f1_keywords: diff --git a/docs/fundamentals/code-analysis/quality-rules/ca2250.md b/docs/fundamentals/code-analysis/quality-rules/ca2250.md index c094aa1a516e2..07ea12e213be9 100644 --- a/docs/fundamentals/code-analysis/quality-rules/ca2250.md +++ b/docs/fundamentals/code-analysis/quality-rules/ca2250.md @@ -1,6 +1,6 @@ --- -title: "CA2250: Use `ThrowIfCancellationRequested`" -description: "Learn about code analysis rule CA2250: Use `ThrowIfCancellationRequested`" +title: "CA2250: Use ThrowIfCancellationRequested" +description: "Learn about code analysis rule CA2250: Use ThrowIfCancellationRequested" ms.date: 05/21/2021 ms.topic: reference f1_keywords: diff --git a/docs/fundamentals/code-analysis/quality-rules/ca2251.md b/docs/fundamentals/code-analysis/quality-rules/ca2251.md index 74a04c458ab84..358361f507729 100644 --- a/docs/fundamentals/code-analysis/quality-rules/ca2251.md +++ b/docs/fundamentals/code-analysis/quality-rules/ca2251.md @@ -1,6 +1,6 @@ --- -title: "CA2251: Use `String.Equals` over `String.Compare`" -description: "Learn about code analysis rule CA2251: Use `String.Equals` over `String.Compare`" +title: "CA2251: Use String.Equals over String.Compare" +description: "Learn about code analysis rule CA2251: Use String.Equals over String.Compare" ms.date: 05/31/2021 ms.topic: reference f1_keywords: From 919394707140f5e9bb728a5e3ecd4be6ccb1f358 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Wed, 17 Nov 2021 06:16:48 -0800 Subject: [PATCH 27/37] Update package index with latest published versions (#27115) --- docs/azure/includes/dotnet-all.md | 12 ++++++------ docs/azure/includes/dotnet-new.md | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index 49ecdc971b2f8..cacb535281b53 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -50,7 +50,7 @@ | Purview Catalog | NuGet [1.0.0-beta.2](https://www.nuget.org/packages/Azure.Analytics.Purview.Catalog/1.0.0-beta.2) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Catalog-readme-pre) | GitHub [1.0.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Catalog_1.0.0-beta.2/sdk/purview/Azure.Analytics.Purview.Catalog/) | | Purview Scanning | NuGet [1.0.0-beta.2](https://www.nuget.org/packages/Azure.Analytics.Purview.Scanning/1.0.0-beta.2) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Scanning-readme-pre) | GitHub [1.0.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Scanning_1.0.0-beta.2/sdk/purview/Azure.Analytics.Purview.Scanning/) | | Question Answering | NuGet [1.0.0](https://www.nuget.org/packages/Azure.AI.Language.QuestionAnswering/1.0.0) | [docs](/dotnet/api/overview/azure/AI.Language.QuestionAnswering-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.Language.QuestionAnswering_1.0.0/sdk/cognitivelanguage/Azure.AI.Language.QuestionAnswering/) | -| Schema Registry | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Data.SchemaRegistry/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.SchemaRegistry_1.0.0/sdk/schemaregistry/Azure.Data.SchemaRegistry/) | +| Schema Registry | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Data.SchemaRegistry/1.0.0) | [docs](/dotnet/api/overview/azure/Data.SchemaRegistry-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.SchemaRegistry_1.0.0/sdk/schemaregistry/Azure.Data.SchemaRegistry/) | | Schema Registry - Avro | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro-readme-pre) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro_1.0.0-beta.4/sdk/schemaregistry/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro/) | | Service Bus | NuGet [7.5.0](https://www.nuget.org/packages/Azure.Messaging.ServiceBus/7.5.0) | [docs](/dotnet/api/overview/azure/Messaging.ServiceBus-readme) | GitHub [7.5.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.ServiceBus_7.5.0/sdk/servicebus/Azure.Messaging.ServiceBus/) | | Storage - Blobs | NuGet [12.10.0](https://www.nuget.org/packages/Azure.Storage.Blobs/12.10.0)
NuGet [12.11.0-beta.1](https://www.nuget.org/packages/Azure.Storage.Blobs/12.11.0-beta.1) | [docs](/dotnet/api/overview/azure/Storage.Blobs-readme) | GitHub [12.10.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Storage.Blobs_12.10.0/sdk/storage/Azure.Storage.Blobs/)
GitHub [12.11.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Storage.Blobs_12.11.0-beta.1/sdk/storage/Azure.Storage.Blobs/) | @@ -67,12 +67,12 @@ | Synapse - Spark | NuGet [1.0.0-preview.8](https://www.nuget.org/packages/Azure.Analytics.Synapse.Spark/1.0.0-preview.8) | [docs](/dotnet/api/overview/azure/Analytics.Synapse.Spark-readme-pre) | GitHub [1.0.0-preview.8](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Synapse.Spark_1.0.0-preview.8/sdk/synapse/Azure.Analytics.Synapse.Spark/) | | Tables | NuGet [12.3.0](https://www.nuget.org/packages/Azure.Data.Tables/12.3.0) | [docs](/dotnet/api/overview/azure/Data.Tables-readme) | GitHub [12.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.Tables_12.3.0/sdk/tables/Azure.Data.Tables/) | | Text Analytics | NuGet [5.1.0](https://www.nuget.org/packages/Azure.AI.TextAnalytics/5.1.0)
NuGet [5.2.0-beta.2](https://www.nuget.org/packages/Azure.AI.TextAnalytics/5.2.0-beta.2) | [docs](/dotnet/api/overview/azure/AI.TextAnalytics-readme) | GitHub [5.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.TextAnalytics_5.1.0/sdk/textanalytics/Azure.AI.TextAnalytics/)
GitHub [5.2.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.TextAnalytics_5.2.0-beta.2/sdk/textanalytics/Azure.AI.TextAnalytics/) | -| Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Messaging.WebPubSub/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.WebPubSub_1.0.0/sdk/webpubsub/Azure.Messaging.WebPubSub/) | +| Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Messaging.WebPubSub/1.0.0) | [docs](/dotnet/api/overview/azure/Messaging.WebPubSub-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.WebPubSub_1.0.0/sdk/webpubsub/Azure.Messaging.WebPubSub/) | | WebJobs Extensions - Event Grid | NuGet [3.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.EventGrid/3.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.EventGrid-readme) | GitHub [3.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.EventGrid_3.0.0/sdk/eventgrid/Microsoft.Azure.WebJobs.Extensions.EventGrid/) | | WebJobs Extensions - Event Hubs | NuGet [5.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.EventHubs/5.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.EventHubs-readme) | GitHub [5.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.EventHubs_5.0.0/sdk/eventhub/Microsoft.Azure.WebJobs.Extensions.EventHubs/) | | WebJobs Extensions - Service Bus | NuGet [5.1.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.ServiceBus/5.1.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.ServiceBus-readme) | GitHub [5.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.ServiceBus_5.1.0/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/) | | WebJobs Extensions - Storage | NuGet [5.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Storage/5.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.Storage-readme) | GitHub [5.0.0](https://github.com/Azure/azure-webjobs-sdk/tree/master/src/Microsoft.Azure.WebJobs.Extensions.Storage) | -| WebJobs Extensions - Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.WebPubSub/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.WebPubSub_1.0.0/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/) | +| WebJobs Extensions - Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.WebPubSub/1.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.WebPubSub-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.WebPubSub_1.0.0/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/) | | Resource Management - App Configuration | NuGet [1.0.0-preview.1](https://www.nuget.org/packages/Azure.ResourceManager.AppConfiguration/1.0.0-preview.1) | [docs](/dotnet/api/overview/azure/ResourceManager.AppConfiguration-readme-pre) | GitHub [1.0.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.AppConfiguration_1.0.0-preview.1/sdk/appconfiguration/Azure.ResourceManager.AppConfiguration/) | | Resource Management - Communication | NuGet [1.0.0](https://www.nuget.org/packages/Azure.ResourceManager.Communication/1.0.0) | [docs](/dotnet/api/overview/azure/ResourceManager.Communication-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Communication_1.0.0/sdk/communication/Azure.ResourceManager.Communication/) | | Resource Management - Compute | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.ResourceManager.Compute/1.0.0-beta.3) | [docs](/dotnet/api/overview/azure/ResourceManager.Compute-readme-pre) | GitHub [1.0.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Compute_1.0.0-beta.3/sdk/compute/Azure.ResourceManager.Compute/) | @@ -322,7 +322,7 @@ | QnA Maker | NuGet [2.0.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker/2.0.1)
NuGet [3.0.0-preview.1](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker/3.0.0-preview.1) | | GitHub [2.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker_2.0.1/sdk/cognitiveservices/Knowledge.QnAMaker) | | Question Answering | NuGet [1.0.0](https://www.nuget.org/packages/Azure.AI.Language.QuestionAnswering/1.0.0) | [docs](/dotnet/api/overview/azure/AI.Language.QuestionAnswering-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.Language.QuestionAnswering_1.0.0/sdk/cognitivelanguage/Azure.AI.Language.QuestionAnswering/) | | Relay | NuGet [2.0.15596](https://www.nuget.org/packages/Microsoft.Azure.Relay/2.0.15596)
NuGet [3.0.0-preview](https://www.nuget.org/packages/Microsoft.Azure.Relay/3.0.0-preview) | [docs](/dotnet/api/overview/azure/service-bus-relay) | GitHub [2.0.15596](https://github.com/Azure/azure-relay-dotnet/tree/2.0.1) | -| Schema Registry | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Data.SchemaRegistry/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.SchemaRegistry_1.0.0/sdk/schemaregistry/Azure.Data.SchemaRegistry/) | +| Schema Registry | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Data.SchemaRegistry/1.0.0) | [docs](/dotnet/api/overview/azure/Data.SchemaRegistry-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.SchemaRegistry_1.0.0/sdk/schemaregistry/Azure.Data.SchemaRegistry/) | | Schema Registry - Avro | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro-readme-pre) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro_1.0.0-beta.4/sdk/schemaregistry/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro/) | | Search | NuGet [10.1.0](https://www.nuget.org/packages/Microsoft.Azure.Search/10.1.0) | | GitHub [10.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Search_10.1.0/sdk/search/Microsoft.Azure.Search/) | | 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/) | @@ -375,7 +375,7 @@ | Wastorage - Redist | NuGet [2.0.0](https://www.nuget.org/packages/wastorage.redist/2.0.0) | | | | Web - Redis Output Cache Provider | NuGet [3.0.1](https://www.nuget.org/packages/Microsoft.Web.RedisOutputCacheProvider/3.0.1) | | GitHub [3.0.1](https://github.com/Azure/aspnet-redis-providers/tree/NuGet-Release/RedisOutputCacheProvider-3.0.1/src/OutputCacheProvider) | | Web - Redis Session State Provider | NuGet [4.0.1](https://www.nuget.org/packages/Microsoft.Web.RedisSessionStateProvider/4.0.1) | | GitHub [4.0.1](https://github.com/Azure/aspnet-redis-providers/tree/NuGet-Release/RedisSessionStateProvider-4.0.1/src/RedisSessionStateProvider) | -| Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Messaging.WebPubSub/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.WebPubSub_1.0.0/sdk/webpubsub/Azure.Messaging.WebPubSub/) | +| Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Messaging.WebPubSub/1.0.0) | [docs](/dotnet/api/overview/azure/Messaging.WebPubSub-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.WebPubSub_1.0.0/sdk/webpubsub/Azure.Messaging.WebPubSub/) | | Web Search | NuGet [2.0.0](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Search.WebSearch/2.0.0) | | | | WebJobs | NuGet [3.0.30](https://www.nuget.org/packages/Microsoft.Azure.WebJobs/3.0.30) | | GitHub [3.0.30](https://github.com/Azure/azure-webjobs-sdk/tree/v3.0.18/src/Microsoft.Azure.WebJobs) | | WebJobs - Core | NuGet [3.0.30](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Core/3.0.30) | | GitHub [3.0.30](https://github.com/Azure/azure-webjobs-sdk/tree/v3.0.18) | @@ -418,7 +418,7 @@ | WebJobs Extensions - Storage Blobs | NuGet [5.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Storage.Blobs/5.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.Storage.Blobs-readme) | | | WebJobs Extensions - Storage Queues | NuGet [5.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Storage.Queues/5.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.Storage.Queues-readme) | | | WebJobs Extensions - Twilio | NuGet [3.0.2](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Twilio/3.0.2) | | GitHub [3.0.2](https://github.com/Azure/azure-webjobs-sdk-extensions/tree/v3.0.0/src/WebJobs.Extensions.Twilio) | -| WebJobs Extensions - Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.WebPubSub/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.WebPubSub_1.0.0/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/) | +| WebJobs Extensions - Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.WebPubSub/1.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.WebPubSub-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.WebPubSub_1.0.0/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/) | | WebJobs Extensions - WebHooks | NuGet [1.0.0-beta4](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.WebHooks/1.0.0-beta4) | | GitHub [1.0.0-beta4](https://github.com/Azure/azure-webjobs-sdk-extensions) | | WebSites - DataProtection | NuGet [0.1.78-alpha](https://www.nuget.org/packages/Microsoft.Azure.WebSites.DataProtection/0.1.78-alpha) | | | | WindowsAzure Common | NuGet [1.4.1](https://www.nuget.org/packages/Microsoft.WindowsAzure.Common/1.4.1) | | | diff --git a/docs/azure/includes/dotnet-new.md b/docs/azure/includes/dotnet-new.md index 139fb92ca0904..b6ae9d96dc114 100644 --- a/docs/azure/includes/dotnet-new.md +++ b/docs/azure/includes/dotnet-new.md @@ -50,7 +50,7 @@ | Purview Catalog | NuGet [1.0.0-beta.2](https://www.nuget.org/packages/Azure.Analytics.Purview.Catalog/1.0.0-beta.2) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Catalog-readme-pre) | GitHub [1.0.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Catalog_1.0.0-beta.2/sdk/purview/Azure.Analytics.Purview.Catalog/) | | Purview Scanning | NuGet [1.0.0-beta.2](https://www.nuget.org/packages/Azure.Analytics.Purview.Scanning/1.0.0-beta.2) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Scanning-readme-pre) | GitHub [1.0.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Scanning_1.0.0-beta.2/sdk/purview/Azure.Analytics.Purview.Scanning/) | | Question Answering | NuGet [1.0.0](https://www.nuget.org/packages/Azure.AI.Language.QuestionAnswering/1.0.0) | [docs](/dotnet/api/overview/azure/AI.Language.QuestionAnswering-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.Language.QuestionAnswering_1.0.0/sdk/cognitivelanguage/Azure.AI.Language.QuestionAnswering/) | -| Schema Registry | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Data.SchemaRegistry/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.SchemaRegistry_1.0.0/sdk/schemaregistry/Azure.Data.SchemaRegistry/) | +| Schema Registry | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Data.SchemaRegistry/1.0.0) | [docs](/dotnet/api/overview/azure/Data.SchemaRegistry-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.SchemaRegistry_1.0.0/sdk/schemaregistry/Azure.Data.SchemaRegistry/) | | Schema Registry - Avro | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro-readme-pre) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro_1.0.0-beta.4/sdk/schemaregistry/Microsoft.Azure.Data.SchemaRegistry.ApacheAvro/) | | Service Bus | NuGet [7.5.0](https://www.nuget.org/packages/Azure.Messaging.ServiceBus/7.5.0) | [docs](/dotnet/api/overview/azure/Messaging.ServiceBus-readme) | GitHub [7.5.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.ServiceBus_7.5.0/sdk/servicebus/Azure.Messaging.ServiceBus/) | | Storage - Blobs | NuGet [12.10.0](https://www.nuget.org/packages/Azure.Storage.Blobs/12.10.0)
NuGet [12.11.0-beta.1](https://www.nuget.org/packages/Azure.Storage.Blobs/12.11.0-beta.1) | [docs](/dotnet/api/overview/azure/Storage.Blobs-readme) | GitHub [12.10.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Storage.Blobs_12.10.0/sdk/storage/Azure.Storage.Blobs/)
GitHub [12.11.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Storage.Blobs_12.11.0-beta.1/sdk/storage/Azure.Storage.Blobs/) | @@ -67,12 +67,12 @@ | Synapse - Spark | NuGet [1.0.0-preview.8](https://www.nuget.org/packages/Azure.Analytics.Synapse.Spark/1.0.0-preview.8) | [docs](/dotnet/api/overview/azure/Analytics.Synapse.Spark-readme-pre) | GitHub [1.0.0-preview.8](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Synapse.Spark_1.0.0-preview.8/sdk/synapse/Azure.Analytics.Synapse.Spark/) | | Tables | NuGet [12.3.0](https://www.nuget.org/packages/Azure.Data.Tables/12.3.0) | [docs](/dotnet/api/overview/azure/Data.Tables-readme) | GitHub [12.3.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Data.Tables_12.3.0/sdk/tables/Azure.Data.Tables/) | | Text Analytics | NuGet [5.1.0](https://www.nuget.org/packages/Azure.AI.TextAnalytics/5.1.0)
NuGet [5.2.0-beta.2](https://www.nuget.org/packages/Azure.AI.TextAnalytics/5.2.0-beta.2) | [docs](/dotnet/api/overview/azure/AI.TextAnalytics-readme) | GitHub [5.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.TextAnalytics_5.1.0/sdk/textanalytics/Azure.AI.TextAnalytics/)
GitHub [5.2.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.TextAnalytics_5.2.0-beta.2/sdk/textanalytics/Azure.AI.TextAnalytics/) | -| Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Messaging.WebPubSub/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.WebPubSub_1.0.0/sdk/webpubsub/Azure.Messaging.WebPubSub/) | +| Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Messaging.WebPubSub/1.0.0) | [docs](/dotnet/api/overview/azure/Messaging.WebPubSub-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.WebPubSub_1.0.0/sdk/webpubsub/Azure.Messaging.WebPubSub/) | | WebJobs Extensions - Event Grid | NuGet [3.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.EventGrid/3.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.EventGrid-readme) | GitHub [3.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.EventGrid_3.0.0/sdk/eventgrid/Microsoft.Azure.WebJobs.Extensions.EventGrid/) | | WebJobs Extensions - Event Hubs | NuGet [5.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.EventHubs/5.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.EventHubs-readme) | GitHub [5.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.EventHubs_5.0.0/sdk/eventhub/Microsoft.Azure.WebJobs.Extensions.EventHubs/) | | WebJobs Extensions - Service Bus | NuGet [5.1.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.ServiceBus/5.1.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.ServiceBus-readme) | GitHub [5.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.ServiceBus_5.1.0/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/) | | WebJobs Extensions - Storage | NuGet [5.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Storage/5.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.Storage-readme) | GitHub [5.0.0](https://github.com/Azure/azure-webjobs-sdk/tree/master/src/Microsoft.Azure.WebJobs.Extensions.Storage) | -| WebJobs Extensions - Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.WebPubSub/1.0.0) | | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.WebPubSub_1.0.0/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/) | +| WebJobs Extensions - Web PubSub | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.WebPubSub/1.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.WebJobs.Extensions.WebPubSub-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.WebJobs.Extensions.WebPubSub_1.0.0/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/) | | Resource Management - App Configuration | NuGet [1.0.0-preview.1](https://www.nuget.org/packages/Azure.ResourceManager.AppConfiguration/1.0.0-preview.1) | [docs](/dotnet/api/overview/azure/ResourceManager.AppConfiguration-readme-pre) | GitHub [1.0.0-preview.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.AppConfiguration_1.0.0-preview.1/sdk/appconfiguration/Azure.ResourceManager.AppConfiguration/) | | Resource Management - Communication | NuGet [1.0.0](https://www.nuget.org/packages/Azure.ResourceManager.Communication/1.0.0) | [docs](/dotnet/api/overview/azure/ResourceManager.Communication-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Communication_1.0.0/sdk/communication/Azure.ResourceManager.Communication/) | | Resource Management - Compute | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.ResourceManager.Compute/1.0.0-beta.3) | [docs](/dotnet/api/overview/azure/ResourceManager.Compute-readme-pre) | GitHub [1.0.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Compute_1.0.0-beta.3/sdk/compute/Azure.ResourceManager.Compute/) | From 1bf94fab1f812ee8fdba854403564a7d5839ae5d Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Wed, 17 Nov 2021 09:19:15 -0800 Subject: [PATCH 28/37] acrolinx (#27117) --- .../docker-app-development-workflow.md | 6 +++--- .../work-with-data-in-asp-net-core-apps.md | 10 +++++----- .../modernize-desktop/whats-new-dotnet.md | 6 +++--- .../example-migration-eshop.md | 6 +++--- docs/core/diagnostics/trace-perfcollect-lttng.md | 4 ++-- docs/fsharp/get-started/get-started-vscode.md | 2 +- .../computation-expressions.md | 6 +++--- docs/machine-learning/resources/metrics.md | 6 +++--- .../tutorials/sentiment-analysis.md | 12 ++++++------ .../garbage-collection/large-object-heap.md | 16 ++++++++-------- 10 files changed, 37 insertions(+), 37 deletions(-) diff --git a/docs/architecture/microservices/docker-application-development-process/docker-app-development-workflow.md b/docs/architecture/microservices/docker-application-development-process/docker-app-development-workflow.md index 004ab1c58ac11..fafe49dd7c4d1 100644 --- a/docs/architecture/microservices/docker-application-development-process/docker-app-development-workflow.md +++ b/docs/architecture/microservices/docker-application-development-process/docker-app-development-workflow.md @@ -21,7 +21,7 @@ This section describes the *inner-loop* development workflow for Docker containe An application is composed of your own services plus additional libraries (dependencies). The following are the basic steps you usually take when building a Docker application, as illustrated in Figure 5-1. -:::image type="complex" source="./media/docker-app-development-workflow/life-cycle-containerized-apps-docker-cli.png" alt-text="Diagram showing the 7 steps it takes to create a containerized app."::: +:::image type="complex" source="./media/docker-app-development-workflow/life-cycle-containerized-apps-docker-cli.png" alt-text="Diagram showing the seven steps it takes to create a containerized app."::: The development process for Docker apps: 1 - Code your App, 2 - Write Dockerfile/s, 3 - Create images defined at Dockerfile/s, 4 - (optional) Compose services in the docker-compose.yml file, 5 - Run container or docker-compose app, 6 - Test your app or microservices, 7 - Push to repo and repeat. :::image-end::: @@ -407,7 +407,7 @@ Besides adding a Dockerfile to a project, as we mentioned before, Visual Studio When you add container orchestrator support, as shown in Figure 5-7, for the first time, Visual Studio creates the Dockerfile for the project and creates a new (service section) project in your solution with several global `docker-compose*.yml` files, and then adds the project to those files. You can then open the docker-compose.yml files and update them with additional features. -You have to repeat this operation for every project you want to include in the docker-compose.yml file. +Repeat this operation for every project you want to include in the docker-compose.yml file. At the time of this writing, Visual Studio supports **Docker Compose** and **Kubernetes/Helm** orchestrators. @@ -508,7 +508,7 @@ This step will vary depending on what your application is doing. In a simple .NE If localhost is not pointing to the Docker host IP (by default, when using Docker CE, it should), to navigate to your service, use the IP address of your machine's network card. -Note that this URL in the browser uses port 80 for the particular container example being discussed. However, internally the requests are being redirected to port 5000, because that was how it was deployed with the docker run command, as explained in a previous step. +This URL in the browser uses port 80 for the particular container example being discussed. However, internally the requests are being redirected to port 5000, because that was how it was deployed with the docker run command, as explained in a previous step. You can also test the application using curl from the terminal, as shown in Figure 5-14. In a Docker installation on Windows, the default Docker Host IP is always 10.0.75.1 in addition to your machine's actual IP address. diff --git a/docs/architecture/modern-web-apps-azure/work-with-data-in-asp-net-core-apps.md b/docs/architecture/modern-web-apps-azure/work-with-data-in-asp-net-core-apps.md index c6e6e80732bc8..dbbbdf48583b3 100644 --- a/docs/architecture/modern-web-apps-azure/work-with-data-in-asp-net-core-apps.md +++ b/docs/architecture/modern-web-apps-azure/work-with-data-in-asp-net-core-apps.md @@ -12,7 +12,7 @@ no-loc: [Blazor, WebAssembly] > > Tim Berners-Lee -Data access is an important part of almost any software application. ASP.NET Core supports a variety of data access options, including Entity Framework Core (and Entity Framework 6 as well), and can work with any .NET data access framework. The choice of which data access framework to use depends on the application's needs. Abstracting these choices from the ApplicationCore and UI projects, and encapsulating implementation details in Infrastructure, helps to produce loosely coupled, testable software. +Data access is an important part of almost any software application. ASP.NET Core supports various data access options, including Entity Framework Core (and Entity Framework 6 as well), and can work with any .NET data access framework. The choice of which data access framework to use depends on the application's needs. Abstracting these choices from the ApplicationCore and UI projects, and encapsulating implementation details in Infrastructure, helps to produce loosely coupled, testable software. ## Entity Framework Core (for relational databases) @@ -186,7 +186,7 @@ private void ConfigureBasket(EntityTypeBuilder builder) } ``` -Another way in which you can improve your domain model is through the use of value objects for types that lack identity and are only distinguished by their properties. Using such types as properties of your entities can help keep logic specific to the value object where it belongs, and can avoid duplicate logic between multiple entities that use the same concept. In Entity Framework Core, you can persist value objects in the same table as their owning entity by configuring the type as an owned entity, like so: +Another way in which you can improve your domain model is by using value objects for types that lack identity and are only distinguished by their properties. Using such types as properties of your entities can help keep logic specific to the value object where it belongs, and can avoid duplicate logic between multiple entities that use the same concept. In Entity Framework Core, you can persist value objects in the same table as their owning entity by configuring the type as an owned entity, like so: ```csharp private void ConfigureOrder(EntityTypeBuilder builder) @@ -277,7 +277,7 @@ The first DbContext is the \_catalogContext and the second DbContext is within t While EF Core is a great choice for managing persistence, and for the most part encapsulates database details from application developers, it isn't the only choice. Another popular open-source alternative is [Dapper](https://github.com/StackExchange/Dapper), a so-called micro-ORM. A micro-ORM is a lightweight, less full-featured tool for mapping objects to data structures. In the case of Dapper, its design goals focus on performance, rather than fully encapsulating the underlying queries it uses to retrieve and update data. Because it doesn't abstract SQL from the developer, Dapper is "closer to the metal" and lets developers write the exact queries they want to use for a given data access operation. -EF Core has two significant features it provides which separate it from Dapper but also add to its performance overhead. The first is the translation from LINQ expressions into SQL. These translations are cached, but even so there is overhead in performing them the first time. The second is change tracking on entities (so that efficient update statements can be generated). This behavior can be turned off for specific queries by using the extension. EF Core also generates SQL queries that usually are very efficient and in any case perfectly acceptable from a performance standpoint, but if you need fine control over the precise query to be executed, you can pass in custom SQL (or execute a stored procedure) using EF Core, too. In this case, Dapper still outperforms EF Core, but only slightly. Julie Lerman presents some performance data in her May 2016 MSDN article [Dapper, Entity Framework, and Hybrid Apps](/archive/msdn-magazine/2016/may/data-points-dapper-entity-framework-and-hybrid-apps). Additional performance benchmark data for a variety of data access methods can be found on [the Dapper site](https://github.com/StackExchange/Dapper). +EF Core has two significant features it provides which separate it from Dapper but also add to its performance overhead. The first is the translation from LINQ expressions into SQL. These translations are cached, but even so there is overhead in performing them the first time. The second is change tracking on entities (so that efficient update statements can be generated). This behavior can be turned off for specific queries by using the extension. EF Core also generates SQL queries that usually are very efficient and in any case perfectly acceptable from a performance standpoint, but if you need fine control over the precise query to be executed, you can pass in custom SQL (or execute a stored procedure) using EF Core, too. In this case, Dapper still outperforms EF Core, but only slightly. Julie Lerman presents some performance data in her May 2016 MSDN article [Dapper, Entity Framework, and Hybrid Apps](/archive/msdn-magazine/2016/may/data-points-dapper-entity-framework-and-hybrid-apps). Additional performance benchmark data for various data access methods can be found on [the Dapper site](https://github.com/StackExchange/Dapper). To see how the syntax for Dapper varies from EF Core, consider these two versions of the same method for retrieving a list of items: @@ -297,7 +297,7 @@ public async Task> GetCatalogTypesWithDapper() } ``` -If you need to build more complex object graphs with Dapper, you need to write the associated queries yourself (as opposed to adding an Include as you would in EF Core). This functionality is supported through a variety of syntaxes, including a feature called Multi Mapping that lets you map individual rows to multiple mapped objects. For example, given a class Post with a property Owner of type User, the following SQL would return all of the necessary data: +If you need to build more complex object graphs with Dapper, you need to write the associated queries yourself (as opposed to adding an Include as you would in EF Core). This functionality is supported through various syntaxes, including a feature called Multi Mapping that lets you map individual rows to multiple mapped objects. For example, given a class Post with a property Owner of type User, the following SQL would return all of the necessary data: ```sql select * from #Posts p @@ -354,7 +354,7 @@ The Azure Cosmos DB query language is a simple yet powerful interface for queryi ## Other persistence options -In addition to relational and NoSQL storage options, ASP.NET Core applications can use Azure Storage to store a variety of data formats and files in a cloud-based, scalable fashion. Azure Storage is massively scalable, so you can start out storing small amounts of data and scale up to storing hundreds or terabytes if your application requires it. Azure Storage supports four kinds of data: +In addition to relational and NoSQL storage options, ASP.NET Core applications can use Azure Storage to store various data formats and files in a cloud-based, scalable fashion. Azure Storage is massively scalable, so you can start out storing small amounts of data and scale up to storing hundreds or terabytes if your application requires it. Azure Storage supports four kinds of data: - Blob Storage for unstructured text or binary storage, also referred to as object storage. diff --git a/docs/architecture/modernize-desktop/whats-new-dotnet.md b/docs/architecture/modernize-desktop/whats-new-dotnet.md index fdd74e40acda9..f34391b7a397f 100644 --- a/docs/architecture/modernize-desktop/whats-new-dotnet.md +++ b/docs/architecture/modernize-desktop/whats-new-dotnet.md @@ -55,10 +55,10 @@ Starting with .NET Core 3.0, besides the existing support for web and cloud, the .NET 5 is the next step forward with .NET Core. .NET 5 aims to improve .NET in a few key ways: - Produce a single .NET runtime and framework that can be used everywhere and that has uniform runtime behaviors and developer experiences. -- Expand the capabilities of .NET by taking the best of .NET Core, .NET Framework, Xamarin and Mono. +- Expand the capabilities of .NET by taking the best of .NET Core, .NET Framework, Xamarin, and Mono. - Build that product out of a single code-base that developers (Microsoft and the community) can work on and expand together and that improves all scenarios. -This new release and direction are a game-changer for .NET. With .NET 5, your code and project files will look and feel the same no matter which type of app you're building. You’ll have access to the same runtime, APIs, and language capabilities with each app. This includes new [performance improvements](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/) that get committed to the runtime, practically daily. For more details refer [What's new in .NET 5](../../core/whats-new/dotnet-5.md). +This new release and direction are a game-changer for .NET. With .NET 5, your code and project files will look and feel the same no matter which type of app you're building. You’ll have access to the same runtime, APIs, and language capabilities with each app. This includes new [performance improvements](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/) that get committed to the runtime, practically daily. For more details, see [What's new in .NET 5](../../core/whats-new/dotnet-5.md). ![All domains of .NET 5](./media/whats-new-dotnet-core/all-domains-of-dotnet5.png) @@ -125,7 +125,7 @@ To make it easier to create XAML Islands for Windows Forms and WPF developers, t ### Access to all Windows 10 APIs -Windows 10 has a great amount of API available for developers to work with. These APIs give access to a wide variety of functionality like Authentication, Bluetooth, Appointments, and Contacts. Now these APIs are exposed through .NET Core and give Windows developers the chance to create powerful desktops apps leveraging the capabilities present on Windows 10. +Windows 10 has a great amount of API available for developers to work with. These APIs give access to a wide variety of functionality like Authentication, Bluetooth, Appointments, and Contacts. Now these APIs are exposed through .NET Core and give Windows developers the chance to create powerful desktops apps using the capabilities present on Windows 10. ### Side-by-side support and self-contained EXEs diff --git a/docs/architecture/porting-existing-aspnet-apps/example-migration-eshop.md b/docs/architecture/porting-existing-aspnet-apps/example-migration-eshop.md index bdd25b60af894..31a544065c144 100644 --- a/docs/architecture/porting-existing-aspnet-apps/example-migration-eshop.md +++ b/docs/architecture/porting-existing-aspnet-apps/example-migration-eshop.md @@ -168,7 +168,7 @@ That leaves the *Controllers* folder and its two `Controller` classes. After cop > `Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'` -To resolve this error add a NuGet package reference to C#: +To resolve this error, add a NuGet package reference to C#: ```xml @@ -493,7 +493,7 @@ For now, the setting for `useMockData` is set to `true`. This setting will be re #### Migrate app settings -ASP.NET Core uses a new [configuration system](/aspnet/core/fundamentals/configuration/?preserve-view=true&view=aspnetcore-2.2), which by default leverages an *appsettings.json* file. By using `CreateDefaultBuilder` in *Program.cs*, the default configuration is already set up in the app. To access configuration, classes just need to request it in their constructor. The `Startup` class is no exception. To start accessing configuration in `Startup` and the rest of the app, request an instance of `IConfiguration` from its constructor: +ASP.NET Core uses a new [configuration system](/aspnet/core/fundamentals/configuration/?preserve-view=true&view=aspnetcore-2.2), which by default uses an *appsettings.json* file. By using `CreateDefaultBuilder` in *Program.cs*, the default configuration is already set up in the app. To access configuration, classes just need to request it in their constructor. The `Startup` class is no exception. To start accessing configuration in `Startup` and the rest of the app, request an instance of `IConfiguration` from its constructor: ```csharp public Startup(IConfiguration configuration) @@ -550,7 +550,7 @@ The app's migration is nearly complete. The only remaining task is data access c ## Data access considerations -ASP.NET Core apps running on .NET Framework can continue to leverage Entity Framework (EF). If performing an incremental migration, getting the app working with EF 6 before trying to port its data access to use EF Core may be worthwhile. In this way, any problems with the app's migration can be identified and addressed before another block of migration effort is begun. +ASP.NET Core apps running on .NET Framework can continue to use Entity Framework (EF). If performing an incremental migration, getting the app working with EF 6 before trying to port its data access to use EF Core may be worthwhile. In this way, any problems with the app's migration can be identified and addressed before another block of migration effort is begun. As it happens, configuring EF 6 in the eShop sample migration doesn't require any special work, since this work was performed in the Autofac `ApplicationModule`. The only problem is that currently the `CatalogDBContext` class tries to read its connection string from *web.config*. To address this, the connection details need to be added to *appsettings.json*. Then the connection string must be passed into `CatalogDBContext` when it's created. diff --git a/docs/core/diagnostics/trace-perfcollect-lttng.md b/docs/core/diagnostics/trace-perfcollect-lttng.md index 7e3d07c8ac105..f465e49d6492c 100644 --- a/docs/core/diagnostics/trace-perfcollect-lttng.md +++ b/docs/core/diagnostics/trace-perfcollect-lttng.md @@ -11,7 +11,7 @@ ms.date: 10/23/2020 When performance problems are encountered on Linux, collecting a trace with `perfcollect` can be used to gather detailed information about what was happening on the machine at the time of the performance problem. -`perfcollect` is a bash script that leverages [Linux Trace Toolkit: next generation (LTTng)](https://lttng.org) to collect events written from the runtime or any [EventSource](xref:System.Diagnostics.Tracing.EventListener), as well as [perf](https://perf.wiki.kernel.org/) to collect CPU samples of the target process. +`perfcollect` is a bash script that uses [Linux Trace Toolkit: next generation (LTTng)](https://lttng.org) to collect events written from the runtime or any [EventSource](xref:System.Diagnostics.Tracing.EventListener), as well as [perf](https://perf.wiki.kernel.org/) to collect CPU samples of the target process. ## Prepare your machine @@ -279,4 +279,4 @@ Collect more verbose GC collection events with JIT, Loader, and Exception events * `perfcollect collect -gcwithheap` -Collect the most verbose GC collection events which tracks the heap survival and movements as well. This gives in-depth analysis of the GC behavior but will incur high performance cost as each GC can take more than two times longer. It is recommended you understand the performance implication of using this trace option when tracing in production environments. +Collect the most verbose GC collection events, which tracks the heap survival and movements as well. This gives in-depth analysis of the GC behavior but will incur high performance cost as each GC can take more than two times longer. It is recommended you understand the performance implication of using this trace option when tracing in production environments. diff --git a/docs/fsharp/get-started/get-started-vscode.md b/docs/fsharp/get-started/get-started-vscode.md index cd62a0235a19e..edc611a95fc33 100644 --- a/docs/fsharp/get-started/get-started-vscode.md +++ b/docs/fsharp/get-started/get-started-vscode.md @@ -152,7 +152,7 @@ Here are a few ways you can troubleshoot certain problems that you might run int 1. If Ionide is broken on your machine and none of the above has fixed your problem, try removing the `ionide-fsharp` directory on your machine and reinstall the plugin suite. 1. If a project failed to load (the F# Solution Explorer will show this), right-click on that project and click **See details** to get more diagnostic info. -Ionide is an open source project built and maintained by members of the F# community. Please report issues and feel free to contribute at the [ionide-vscode-fsharp GitHub repository](https://github.com/ionide/ionide-vscode-fsharp). +Ionide is an open-source project built and maintained by members of the F# community. Report issues and feel free to contribute at the [ionide-vscode-fsharp GitHub repository](https://github.com/ionide/ionide-vscode-fsharp). You can also ask for further help from the Ionide developers and F# community in the [Ionide Gitter channel](https://gitter.im/ionide/ionide-project). diff --git a/docs/fsharp/language-reference/computation-expressions.md b/docs/fsharp/language-reference/computation-expressions.md index 7e4d779dd4e36..c32715130c6ff 100644 --- a/docs/fsharp/language-reference/computation-expressions.md +++ b/docs/fsharp/language-reference/computation-expressions.md @@ -32,7 +32,7 @@ All computation expressions have the following form: builder-expr { cexper } ``` -where `builder-expr` is the name of a builder type that defines the computation expression, and `cexper` is the expression body of the computation expression. For example, `async` computation expression code can look like this: +In this form, `builder-expr` is the name of a builder type that defines the computation expression, and `cexper` is the expression body of the computation expression. For example, `async` computation expression code can look like this: ```fsharp let fetchAndDownload url = @@ -248,7 +248,7 @@ The following table describes methods that can be used in a workflow builder cla Many of the methods in a builder class use and return an `M<'T>` construct, which is typically a separately defined type that characterizes the kind of computations being combined, for example, `Async<'T>` for async expressions and `Seq<'T>` for sequence workflows. The signatures of these methods enable them to be combined and nested with each other, so that the workflow object returned from one construct can be passed to the next. -Many functions use the result of `Delay` as an argument: `Run`, `While`, `TryWith`, `TryFinally` and `Combine`. The `Delayed<'T>` type is the return type of `Delay` and consequently the parameter to these functions. `Delayed<'T>` can be an arbitrary type that does not need to be related to `M<'T>`; commonly `M<'T>` or `(unit -> M<'T>)` are used. The default implementation is `M<'T>`. See [here](https://fsharpforfunandprofit.com/posts/computation-expressions-builder-part3/#understanding-the-type-constraints) for a more in-depth look. +Many functions use the result of `Delay` as an argument: `Run`, `While`, `TryWith`, `TryFinally`, and `Combine`. The `Delayed<'T>` type is the return type of `Delay` and consequently the parameter to these functions. `Delayed<'T>` can be an arbitrary type that does not need to be related to `M<'T>`; commonly `M<'T>` or `(unit -> M<'T>)` are used. The default implementation is `M<'T>`. See [here](https://fsharpforfunandprofit.com/posts/computation-expressions-builder-part3/#understanding-the-type-constraints) for a more in-depth look. The compiler, when it parses a computation expression, converts the expression into a series of nested function calls by using the methods in the preceding table and the code in the computation expression. The nested expression is of the following form: @@ -433,7 +433,7 @@ Custom operations can be overloaded. For more information, see [F# RFC FS-1056 - F# computation expressions that suspend execution can be compiled to highly efficient state machines through careful use of a low-level feature called *resumable code*. Resumable code is documented in [F# RFC FS-1087](https://github.com/fsharp/fslang-design/blob/main/FSharp-6.0/FS-1087-resumable-code.md) and used for [Task Expressions](task-expressions.md). -F# computation expressions that are synchronous (that is, they don't suspend execution) can alternatively be compiled to efficient state machines through the use of [inline functions](functions/inline-functions.md) including the `InlineIfLambda` attribute. Examples are given in [F# RFC FS-1098](https://github.com/fsharp/fslang-design/blob/main/FSharp-6.0/FS-1098-inline-if-lambda.md). +F# computation expressions that are synchronous (that is, they don't suspend execution) can alternatively be compiled to efficient state machines by using [inline functions](functions/inline-functions.md) including the `InlineIfLambda` attribute. Examples are given in [F# RFC FS-1098](https://github.com/fsharp/fslang-design/blob/main/FSharp-6.0/FS-1098-inline-if-lambda.md). List expressions, array expressions, and sequence expressions are given special treatment by the F# compiler to ensure generation of high-performance code. diff --git a/docs/machine-learning/resources/metrics.md b/docs/machine-learning/resources/metrics.md index 7da6fe0e645ad..47dc6703cffb8 100644 --- a/docs/machine-learning/resources/metrics.md +++ b/docs/machine-learning/resources/metrics.md @@ -17,7 +17,7 @@ For example, for the classification task, the model is evaluated by measuring ho |-----------|-----------------------|-----------| | **Accuracy** | [Accuracy](https://en.wikipedia.org/wiki/Accuracy_and_precision#In_binary_classification) is the proportion of correct predictions with a test data set. It is the ratio of number of correct predictions to the total number of input samples. It works well if there are similar number of samples belonging to each class.| **The closer to 1.00, the better**. But exactly 1.00 indicates an issue (commonly: label/target leakage, over-fitting, or testing with training data). When the test data is unbalanced (where most of the instances belong to one of the classes), the dataset is small, or scores approach 0.00 or 1.00, then accuracy doesn't really capture the effectiveness of a classifier and you need to check additional metrics. | | **AUC** | [aucROC](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) or *Area under the curve* measures the area under the curve created by sweeping the true positive rate vs. the false positive rate. | **The closer to 1.00, the better**. It should be greater than 0.50 for a model to be acceptable. A model with AUC of 0.50 or less is worthless. | -| **AUCPR** | aucPR or *Area under the curve of a Precision-Recall curve*: Useful measure of success of prediction when the classes are imbalanced (highly skewed datasets). | **The closer to 1.00, the better**. High scores close to 1.00 show that the classifier is returning accurate results (high precision), as well as returning a majority of all positive results (high recall). | +| **AUCPR** | aucPR or *Area under the curve of a Precision-Recall curve*: Useful measure of success of prediction when the classes are imbalanced (highly skewed datasets). | **The closer to 1.00, the better**. High scores close to 1.00 show that the classifier is returning accurate results (high precision), and returning a majority of all positive results (high recall). | | **F1-score** | [F1 score](https://en.wikipedia.org/wiki/F1_score) also known as *balanced F-score or F-measure*. It's the harmonic mean of the precision and recall. F1 Score is helpful when you want to seek a balance between Precision and Recall.| **The closer to 1.00, the better**. An F1 score reaches its best value at 1.00 and worst score at 0.00. It tells you how precise your classifier is. | For further details on binary classification metrics read the following articles: @@ -39,8 +39,8 @@ Micro-accuracy is generally better aligned with the business needs of ML predict Example, for a support ticket classification task: (maps incoming tickets to support teams) -- Micro-accuracy -- how often does an incoming ticket get classified to the right team? -- Macro-accuracy -- for an average team, how often is an incoming ticket correct for their team? +- Micro-accuracy—how often does an incoming ticket get classified to the right team? +- Macro-accuracy—for an average team, how often is an incoming ticket correct for their team? Macro-accuracy overweights small teams in this example; a small team that gets only 10 tickets per year counts as much as a large team with 10k tickets per year. Micro-accuracy in this case correlates better with the business need of, "how much time/money can the company save by automating my ticket routing process". diff --git a/docs/machine-learning/tutorials/sentiment-analysis.md b/docs/machine-learning/tutorials/sentiment-analysis.md index 4f33bb1975662..bb4565179a9cb 100644 --- a/docs/machine-learning/tutorials/sentiment-analysis.md +++ b/docs/machine-learning/tutorials/sentiment-analysis.md @@ -59,25 +59,25 @@ You can find the source code for this tutorial at the [dotnet/samples](https://g 1. Add the following additional `using` statements to the top of the *Program.cs* file: - [!code-csharp[AddUsings](./snippets/sentiment-analysis/csharp/Program.cs#AddUsings "Add necessary usings")] + [!code-csharp[AddUsings](./snippets/sentiment-analysis/csharp/Program.cs#AddUsings "Add necessary usings")] 1. Add the following code to the line right below the `using` statements, to create a field to hold the recently downloaded dataset file path: - [!code-csharp[Declare global variables](./snippets/sentiment-analysis/csharp/Program.cs#DeclareGlobalVariables "Declare global variables")] + [!code-csharp[Declare global variables](./snippets/sentiment-analysis/csharp/Program.cs#DeclareGlobalVariables "Declare global variables")] 1. Next, create classes for your input data and predictions. Add a new class to your project: - - In **Solution Explorer**, right-click the project, and then select **Add** > **New Item**. + - In **Solution Explorer**, right-click the project, and then select **Add** > **New Item**. - - In the **Add New Item** dialog box, select **Class** and change the **Name** field to *SentimentData.cs*. Then, select the **Add** button. + - In the **Add New Item** dialog box, select **Class** and change the **Name** field to *SentimentData.cs*. Then, select the **Add** button. 1. The *SentimentData.cs* file opens in the code editor. Add the following `using` statement to the top of *SentimentData.cs*: - [!code-csharp[AddUsings](./snippets/sentiment-analysis/csharp/SentimentData.cs#AddUsings "Add necessary usings")] + [!code-csharp[AddUsings](./snippets/sentiment-analysis/csharp/SentimentData.cs#AddUsings "Add necessary usings")] 1. Remove the existing class definition and add the following code, which has two classes `SentimentData` and `SentimentPrediction`, to the *SentimentData.cs* file: - [!code-csharp[DeclareTypes](./snippets/sentiment-analysis/csharp/SentimentData.cs#DeclareTypes "Declare data record types")] + [!code-csharp[DeclareTypes](./snippets/sentiment-analysis/csharp/SentimentData.cs#DeclareTypes "Declare data record types")] ### How the data was prepared diff --git a/docs/standard/garbage-collection/large-object-heap.md b/docs/standard/garbage-collection/large-object-heap.md index 568dbaed4e1dd..d7c1398c9c9c0 100644 --- a/docs/standard/garbage-collection/large-object-heap.md +++ b/docs/standard/garbage-collection/large-object-heap.md @@ -21,7 +21,7 @@ If an object is greater than or equal to 85,000 bytes in size, it's considered a To understand what this means, it's useful to examine some fundamentals about the garbage collector. -The garbage collector is a generational collector. It has three generations: generation 0, generation 1, and generation 2. The reason for having 3 generations is that, in a well-tuned app, most objects die in gen0. For example, in a server app, the allocations associated with each request should die after the request is finished. The in-flight allocation requests will make it into gen1 and die there. Essentially, gen1 acts as a buffer between young object areas and long-lived object areas. +The garbage collector is a generational collector. It has three generations: generation 0, generation 1, and generation 2. The reason for having three generations is that, in a well-tuned app, most objects die in gen0. For example, in a server app, the allocations associated with each request should die after the request is finished. The in-flight allocation requests will make it into gen1 and die there. Essentially, gen1 acts as a buffer between young object areas and long-lived object areas. Newly allocated objects form a new generation of objects and are implicitly generation 0 collections. However, if they are large objects, they go on the large object heap (LOH), which is sometimes referred to as generation 3. Generation 3 is a physical generation that's logically collected as part of generation 2. @@ -43,7 +43,7 @@ Figure 1 illustrates a scenario where the GC forms generation 1 after the first ![Figure 1: A gen 0 GC and a gen 1 GC](media/loh/loh-figure-1.jpg)\ Figure 1: A generation 0 and a generation 1 GC. -Figure 2 shows that after a generation 2 GC which saw that `Obj1` and `Obj2` are dead, the GC forms contiguous free space out of memory that used to be occupied by `Obj1` and `Obj2`, which then was used to satisfy an allocation request for `Obj4`. The space after the last object, `Obj3`, to end of the segment can also be used to satisfy allocation requests. +Figure 2 shows that after a generation 2 GC that saw that `Obj1` and `Obj2` are dead, the GC forms contiguous free space out of memory that used to be occupied by `Obj1` and `Obj2`, which then was used to satisfy an allocation request for `Obj4`. The space after the last object, `Obj3`, to end of the segment can also be used to satisfy allocation requests. ![Figure 2: After a gen 2 GC](media/loh/loh-figure-2.jpg)\ Figure 2: After a generation 2 GC @@ -81,11 +81,11 @@ Allocations on the large object heap impact performance in the following ways. - Allocation cost. - The CLR makes the guarantee that the memory for every new object it gives out is cleared. This means the allocation cost of a large object is completely dominated by memory clearing (unless it triggers a GC). If it takes 2 cycles to clear one byte, it takes 170,000 cycles to clear the smallest large object. Clearing the memory of a 16MB object on a 2GHz machine takes approximately 16ms. That's a rather large cost. + The CLR makes the guarantee that the memory for every new object it gives out is cleared. This means the allocation cost of a large object is dominated by memory clearing (unless it triggers a GC). If it takes two cycles to clear one byte, it takes 170,000 cycles to clear the smallest large object. Clearing the memory of a 16-MB object on a 2-GHz machine takes approximately 16 ms. That's a rather large cost. - Collection cost. - Because the LOH and generation 2 are collected together, if either one's threshold is exceeded, a generation 2 collection is triggered. If a generation 2 collection is triggered because of the LOH, generation 2 won't necessarily be much smaller after the GC. If there's not much data on generation 2, this has minimal impact. But if generation 2 is large, it can cause performance problems if many generation 2 GCs are triggered. If many large objects are allocated on a very temporary basis and you have a large SOH, you could be spending too much time doing GCs. In addition, the allocation cost can really add up if you keep allocating and letting go of really large objects. + Because the LOH and generation 2 are collected together, if either one's threshold is exceeded, a generation 2 collection is triggered. If a generation 2 collection is triggered because of the LOH, generation 2 won't necessarily be much smaller after the GC. If there's not much data on generation 2, this has minimal impact. But if generation 2 is large, it can cause performance problems if many generation 2 GCs are triggered. If many large objects are allocated on a temporary basis and you have a large SOH, you could be spending too much time doing GCs. In addition, the allocation cost can really add up if you keep allocating and letting go of really large objects. - Array elements with reference types. @@ -125,7 +125,7 @@ Before you collect performance data for a specific area, you should already have 2. Exhausted other areas that you know of without finding anything that could explain the performance problem you saw. -See the blog [Understand the problem before you try to find a solution](https://devblogs.microsoft.com/dotnet/understand-the-problem-before-you-try-to-find-a-solution/) for more information on the fundamentals of memory and the CPU. +For more information on the fundamentals of memory and the CPU, see the blog [Understand the problem before you try to find a solution](https://devblogs.microsoft.com/dotnet/understand-the-problem-before-you-try-to-find-a-solution/). You can use the following tools to collect data on LOH performance: @@ -188,7 +188,7 @@ You can collect additional ETW events that tell you who allocated these large ob perfview /GCOnly /AcceptEULA /nogui collect ``` -collects an AllocationTick event which is fired approximately every 100k worth of allocations. In other words, an event is fired each time a large object is allocated. You can then look at one of the GC Heap Alloc views which show you the callstacks that allocated large objects: +collects an AllocationTick event, which is fired approximately every 100k worth of allocations. In other words, an event is fired each time a large object is allocated. You can then look at one of the GC Heap Alloc views, which show you the callstacks that allocated large objects: ![Screenshot that shows a garbage collector heap view.](media/large-object-heap/garbage-collector-heap.png) Figure 6: A GC Heap Alloc view @@ -301,9 +301,9 @@ To verify whether the LOH is causing VM fragmentation, you can set a breakpoint bp kernel32!virtualalloc "j (dwo(@esp+8)>800000) 'kb';'g'" ``` -This command breaks into the debugger and shows the call stack only if [VirtualAlloc](/windows/desktop/api/memoryapi/nf-memoryapi-virtualalloc) is called with an allocation size greater than 8MB (0x800000). +This command breaks into the debugger and shows the call stack only if [VirtualAlloc](/windows/desktop/api/memoryapi/nf-memoryapi-virtualalloc) is called with an allocation size greater than 8 MB (0x800000). -CLR 2.0 added a feature called *VM Hoarding* that can be useful for scenarios where segments (including on the large and small object heaps) are frequently acquired and released. To specify VM Hoarding, you specify a startup flag called `STARTUP_HOARD_GC_VM` via the hosting API. Instead of releasing empty segments back to the OS, the CLR decommits the memory on these segments and puts them on a standby list. (Note that the CLR doesn't do this for segments that are too large.) The CLR later uses those segments to satisfy new segment requests. The next time that your app needs a new segment, the CLR uses one from this standby list if it can find one that's big enough. +CLR 2.0 added a feature called *VM Hoarding* that can be useful for scenarios where segments (including on the large and small object heaps) are frequently acquired and released. To specify VM Hoarding, you specify a startup flag called `STARTUP_HOARD_GC_VM` via the hosting API. Instead of releasing empty segments back to the OS, the CLR decommits the memory on these segments and puts them on a standby list. (Note that the CLR doesn't do this for segments that are too large.) The CLR later uses those segments to satisfy new segment requests. The next time that your app needs a new segment, the CLR uses one from this standby list if it can find one that's large enough. VM hoarding is also useful for applications that want to hold onto the segments that they already acquired, such as some server apps that are the dominant apps running on the system, to avoid out-of-memory exceptions. From b3ebcba24c95da621921be3eabce51747b4760f0 Mon Sep 17 00:00:00 2001 From: Scott Addie <10702007+scottaddie@users.noreply.github.com> Date: Wed, 17 Nov 2021 12:26:23 -0600 Subject: [PATCH 29/37] Restore the Azure for .NET devs tile (#27128) --- docs/index.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/index.yml b/docs/index.yml index 07580f14c415a..569de2984f72e 100644 --- a/docs/index.yml +++ b/docs/index.yml @@ -47,6 +47,10 @@ highlightedContent: - title: "What's new in .NET docs" itemType: whats-new url: whats-new/index.yml + # Card + - title: "Azure for .NET developers" + itemType: overview + url: azure/index.yml # conceptualContent section (optional) conceptualContent: From 719a11a1946aa27ea98a07de4eba017eccdc8601 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 17 Nov 2021 13:40:58 -0600 Subject: [PATCH 30/37] Update rabbitmq-event-bus-development-test-environment.md (#27134) Fixes #27130 --- .../rabbitmq-event-bus-development-test-environment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/microservices/multi-container-microservice-net-applications/rabbitmq-event-bus-development-test-environment.md b/docs/architecture/microservices/multi-container-microservice-net-applications/rabbitmq-event-bus-development-test-environment.md index a7a9a52ed1d03..5158834e4e065 100644 --- a/docs/architecture/microservices/multi-container-microservice-net-applications/rabbitmq-event-bus-development-test-environment.md +++ b/docs/architecture/microservices/multi-container-microservice-net-applications/rabbitmq-event-bus-development-test-environment.md @@ -102,7 +102,7 @@ Each event type has a related channel to get events from RabbitMQ. You can then The Subscribe method accepts an IIntegrationEventHandler object, which is like a callback method in the current microservice, plus its related IntegrationEvent object. The code then adds that event handler to the list of event handlers that each integration event type can have per client microservice. If the client code has not already been subscribed to the event, the code creates a channel for the event type so it can receive events in a push style from RabbitMQ when that event is published from any other service. -As mentioned above, the event bus implemented in eShopOnContainers has only and educational purpose, since it only handles the main scenarios, so it's not ready for production. +As mentioned above, the event bus implemented in eShopOnContainers has only an educational purpose, since it only handles the main scenarios, so it's not ready for production. For production scenarios check the additional resources below, specific for RabbitMQ, and the [Implementing event-based communication between microservices](./integration-event-based-microservice-communications.md#additional-resources) section. From c6b969b5ef8354312e4d32339070562beb044482 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Thu, 18 Nov 2021 06:35:27 -0800 Subject: [PATCH 31/37] Fix typo (#27141) --- docs/standard/garbage-collection/background-gc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/standard/garbage-collection/background-gc.md b/docs/standard/garbage-collection/background-gc.md index 6bba116e819d5..6815b19d139c2 100644 --- a/docs/standard/garbage-collection/background-gc.md +++ b/docs/standard/garbage-collection/background-gc.md @@ -8,7 +8,7 @@ helpviewer_keywords: --- # Background garbage collection -In background garbage collection (GC), ephemeral generations (0 and 1) are collected as needed while the collection of generation 2 is in progress. Background garbage collection is performed on one or more dedicated threads, depending on whether it's background or server GC, and applies only to generation 2 collections. +In background garbage collection (GC), ephemeral generations (0 and 1) are collected as needed while the collection of generation 2 is in progress. Background garbage collection is performed on one or more dedicated threads, depending on whether it's workstation or server GC, and applies only to generation 2 collections. Background garbage collection is enabled by default. It can be enabled or disabled with the [gcConcurrent](../../framework/configure-apps/file-schema/runtime/gcconcurrent-element.md) configuration setting in .NET Framework apps or the [System.GC.Concurrent](../../core/run-time-config/garbage-collector.md#background-gc) setting in .NET Core and .NET 5 and later apps. From 69956d17fa59531d7ccbb648d66cced11a05abc3 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Thu, 18 Nov 2021 06:36:30 -0800 Subject: [PATCH 32/37] Acrolinx 11/17 (#27131) * acrolinx * fix link --- .../strategies-migrating-in-production.md | 2 +- docs/core/deploying/trimming/trim-warnings/il2007.md | 7 ++----- docs/core/deploying/trimming/trim-warnings/il2023.md | 10 ++++------ docs/core/deploying/trimming/trim-warnings/il2029.md | 10 ++++------ 4 files changed, 11 insertions(+), 18 deletions(-) diff --git a/docs/architecture/porting-existing-aspnet-apps/strategies-migrating-in-production.md b/docs/architecture/porting-existing-aspnet-apps/strategies-migrating-in-production.md index f2d7e53ac14f0..296df439e079b 100644 --- a/docs/architecture/porting-existing-aspnet-apps/strategies-migrating-in-production.md +++ b/docs/architecture/porting-existing-aspnet-apps/strategies-migrating-in-production.md @@ -45,7 +45,7 @@ Eventually, the entire facade layer corresponds to the new, modern implementatio Multi-targeting is recommended for large apps that will be migrated over time and for teams applying the Strangler pattern approach. This approach can address `BindingRedirect` and package restoration challenges that surface from mixing [PackageReference](/nuget/consume-packages/package-references-in-project-files) and [packages.config](/nuget/reference/packages-config) restore styles. There are two options available for code that must run in both .NET Framework and .NET Core environments. -* Preprocessor [`#if` in C#](../../csharp/language-reference/preprocessor-directives.md#conditional-compilation) (or [`#If` in Visual Basic]([preprocessor `#if`](/dotnet/visual-basic/reference/language-specification/preprocessing-directives#conditional-compilation)) directives allow you to implement different functionality or use different dependencies when run in .NET Framework versus .NET Core. +* Preprocessor directives ([#if in C#](../../csharp/language-reference/preprocessor-directives.md#conditional-compilation) or [#If in Visual Basic](/dotnet/visual-basic/reference/language-specification/preprocessing-directives#conditional-compilation)) allow you to implement different functionality or use different dependencies when run in .NET Framework versus .NET Core. * Project files can use conditional [globbing patterns](../../core/project-sdk/overview.md#default-includes-and-excludes), such as `*.core.cs`, to include different sets of files based on which framework is being targeted. diff --git a/docs/core/deploying/trimming/trim-warnings/il2007.md b/docs/core/deploying/trimming/trim-warnings/il2007.md index 56e94e22536a4..a0e6abe96e4f8 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2007.md +++ b/docs/core/deploying/trimming/trim-warnings/il2007.md @@ -15,12 +15,9 @@ An assembly specified in a descriptor file could not be resolved. ## Rule description -[Descriptor files](https://github.com/mono/linker/blob/main/docs/data-formats.md) are -used to instruct the trimmer to always keep certain items in an assembly, regardless of -whether the trimmer could find any references to them. +[Descriptor files](https://github.com/mono/linker/blob/main/docs/data-formats.md) are used to instruct the trimmer to always keep certain items in an assembly, regardless of whether the trimmer could find any references to them. -The assembly specified in the descriptor file by its full name could not be found in any -of the assemblies seen by the trimmer. +The assembly specified in the descriptor file by its full name could not be found in any of the assemblies seen by the trimmer. ## Example diff --git a/docs/core/deploying/trimming/trim-warnings/il2023.md b/docs/core/deploying/trimming/trim-warnings/il2023.md index 54242b98a7f0e..af539f54ca57a 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2023.md +++ b/docs/core/deploying/trimming/trim-warnings/il2023.md @@ -18,13 +18,11 @@ element when putting an attribute on the return parameter of a method. [Custom attribute annotation files](https://github.com/mono/linker/blob/main/docs/data-formats.md#custom-attributes-annotations-format) are used to instruct the trimmer to behave as if the specified item has a given -attribute. Attribute annotations can only be used to add attributes which have effect on -the trimmer behavior, all other attributes will be ignored. Attributes added via -attribute annotations only influence the trimmer behavior and they are never added to the -output assembly. +attribute. Attribute annotations can only be used to add attributes that have effect on +the trimmer behavior. All other attributes are ignored. Attributes added via +attribute annotations only influence the trimmer behavior, and they are never added to the output assembly. -A `method` element has more than one `return` element specified. Trimmer only allows one -attribute annotation on the retun type of a given method. +A `method` element has more than one `return` element specified. Trimmer only allows one attribute annotation on the return type of a given method. ## Example diff --git a/docs/core/deploying/trimming/trim-warnings/il2029.md b/docs/core/deploying/trimming/trim-warnings/il2029.md index 4538a5c3330d0..e1dfa0c60e9ef 100644 --- a/docs/core/deploying/trimming/trim-warnings/il2029.md +++ b/docs/core/deploying/trimming/trim-warnings/il2029.md @@ -18,13 +18,11 @@ argument `fullname` or its value is an empty string. [Custom attribute annotation files](https://github.com/mono/linker/blob/main/docs/data-formats.md#custom-attributes-annotations-format) are used to instruct the trimmer to behave as if the specified item has a given -attribute. Attribute annotations can only be used to add attributes which have effect on -the trimmer behavior, all other attributes will be ignored. Attributes added via -attribute annotations only influence the trimmer behavior and they are never added to the -output assembly. +attribute. Attribute annotations can only be used to add attributes that have effect on +the trimmer behavior. All other attributes are ignored. Attributes added via +attribute annotations only influence the trimmer behavior, and they're never added to the output assembly. -All `attribute` elements must have the required `fullname` argument and its value cannot -be an empty string. +All `attribute` elements must have the required `fullname` argument and its value cannot be an empty string. ## Example From 8ddcaee244536b7b69dab3a6a41bba52d3ff2554 Mon Sep 17 00:00:00 2001 From: Steve Smith Date: Fri, 19 Nov 2021 11:17:03 -0500 Subject: [PATCH 33/37] Blazor Hot Reload (#27166) * Blazor Hot Reload section * fixing hot to Hot * Apply suggestions from code review Co-authored-by: David Pine Co-authored-by: David Pine --- .../media/project-structure/hot-reload-1.png | Bin 0 -> 24294 bytes .../media/project-structure/hot-reload-2.png | Bin 0 -> 11670 bytes .../media/project-structure/hot-reload-3.png | Bin 0 -> 24591 bytes .../project-structure.md | 18 ++++++++++++++++-- 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 docs/architecture/blazor-for-web-forms-developers/media/project-structure/hot-reload-1.png create mode 100644 docs/architecture/blazor-for-web-forms-developers/media/project-structure/hot-reload-2.png create mode 100644 docs/architecture/blazor-for-web-forms-developers/media/project-structure/hot-reload-3.png diff --git a/docs/architecture/blazor-for-web-forms-developers/media/project-structure/hot-reload-1.png b/docs/architecture/blazor-for-web-forms-developers/media/project-structure/hot-reload-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe71996dccebdf9be72b4d43097b1e3eb2c382e GIT binary patch literal 24294 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
    65RXF@ZB|O7QlQiY-L?q6 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 IN*DzEAF^06z5oCK literal 0 HcmV?d00001 diff --git a/docs/architecture/blazor-for-web-forms-developers/media/project-structure/hot-reload-2.png b/docs/architecture/blazor-for-web-forms-developers/media/project-structure/hot-reload-2.png new file mode 100644 index 0000000000000000000000000000000000000000..830877b649cfbb55cca77751ac9be1ebee145542 GIT binary patch literal 11670 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 hj#C7HZ!+E6=X-t2oKuIdG>NebzOQqy=F5 in Visual Studio to run with the debugger attached, or Ctrl + F5 to run without the debugger attached. To run the Blazor WebAssembly app, choose one of the following approaches: @@ -246,6 +246,20 @@ To run the Blazor WebAssembly app, choose one of the following approaches: Blazor WebAssembly apps can be debugged in both browser and Visual Studio.See [Debug ASP.NET Core Blazor WebAssembly](/aspnet/core/blazor/debug) for details. +Both Blazor Server and Blazor WebAssembly apps support Hot Reload in Visual Studio. Hot Reload is a feature that automatically updates changes made to a Blazor app live, in the browser. You can toggle whether Hot Reload is enabled from its icon in the toolbar: + +![Visual Studio 2022: Hot Reload menu item and icon.](media/project-structure/hot-reload-1.png) + +Selecting the caret beside the icon reveals additional options. You can toggle Hot Reload on or off, restart the application, and toggle whether Hot Reload should occur whenever a file is saved. + +![Visual Studio 2022: Hot Reload menu item with expanded options.](media/project-structure/hot-reload-2.png) + +You can also access additional configuration options. The configuration dialog lets you specify whether Hot Reload should be enabled when debugging (along with Edit and Continue), when starting without debugging, or when a file is saved. + +![Visual Studio 2022: Hot Reload configuration options from the "Tools > Options > Debugging > .NET/C++ Hot Reload" dialog.](media/project-structure/hot-reload-3.png) + +The "developer inner loop" has been greatly streamlined with Hot Reload. Using Hot Reload, a Blazor developer would typically need to restart and rerun the app after every change, navigating to the appropriate part of the app as required. With Hot Reload, changes can be made to the running app without the need to restart in most cases. Hot Reload even retains the state of pages, so there's no need to have to re-enter form values or otherwise get the app back where you need it. + >[!div class="step-by-step"] >[Previous](hosting-models.md) >[Next](app-startup.md) From 071304307b786179964e2851e5a3977db29eb4a6 Mon Sep 17 00:00:00 2001 From: Steve Smith Date: Thu, 2 Dec 2021 14:40:06 -0500 Subject: [PATCH 34/37] update vs images (#27375) --- .../security/individual-user-accounts.png | Bin 47191 -> 24576 bytes .../media/security/migration-files.png | Bin 19470 -> 20288 bytes .../security-authentication-authorization.md | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/architecture/blazor-for-web-forms-developers/media/security/individual-user-accounts.png b/docs/architecture/blazor-for-web-forms-developers/media/security/individual-user-accounts.png index 06153806e0a58f5b6be32fe3eeeed041ebba3f23..fbd3ed1c0674053c52a3fe9b5054955158c06f26 100644 GIT binary patch literal 24576 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 Zb+NQ$WcIT6exPXMzb|+%{kv0F{t0PUS$zNi literal 47191 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 diff --git a/docs/architecture/blazor-for-web-forms-developers/media/security/migration-files.png b/docs/architecture/blazor-for-web-forms-developers/media/security/migration-files.png index e01754b2e57972ff5bf0cb56cf0be371aaf7c128..9bbe02908e5edb1d75d1cd9fba68fe2f6cd6281a 100644 GIT binary patch literal 20288 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 literal 19470 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