-
Notifications
You must be signed in to change notification settings - Fork 6.1k
What's new for 4.7.2 #4857
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
What's new for 4.7.2 #4857
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks great @rpetrusha. Left a few comments for you to take care of. Links are still broken but I have PR in place for 4.7.2.
docs/framework/whats-new/index.md
Outdated
|
|
||
| **New overloads of RSA.Create and DSA.Create** | ||
|
|
||
| The <xref:System.Security.Cryptography.DSA.Create(System.Security.Cryptography.DSAParamteters)?displayProperty=nameWithType> and <xref:System.Security.Cryptography.RSA.Create(System.Security.Cryptography.RSAParamteters)?displayProperty=nameWithType> methods let you supply key parameters when instantiated a new <xref:System.Security.Cryptography.DSA> or <xref:System.Security.Cryptography.RSA> key. They allow you to replace code like the following: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
DSAParamteters -> DSAParameters? (same for RSA)
docs/framework/whats-new/index.md
Outdated
| - [public static HashSet<TSource> ToHashSet<TSource>(this IEnumerable<TSource> source);](xref:System.Linq.Enumerable.ToHashSet%2A) | ||
| - [public static HashSet<TSource> ToHashSet<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer);](xref:System.Linq.Enumerable.ToHashSet%2A) | ||
| - New <xref:System.Collections.Generic.HashSet%601> constructors that let you set the collection's capacity, which yields a performance benefit when you know the size of the <xref:System.Collections.Generic.HashSet%601> in advance: | ||
| - [public HashSet(int capacity)](xref:System.Collections.Generic.HashSet%601.#ctor(System.Int32)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you need to encode # in xref links
docs/framework/whats-new/index.md
Outdated
| <a name="net472" /> | ||
| #### Networking | ||
|
|
||
| **Implementation of HttpClientHandler p0roperties** |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p0roperties -> properties
docs/framework/whats-new/index.md
Outdated
| For Windows Forms application, the previous workaround of setting DPI awareness in the application configuration file rather than the application manifest is no longer necessary for ClickOnce deployment to succeed. | ||
|
|
||
| <a name="v471"></a> | ||
| ### What's new in the .NET Framework 4.7.1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
docs/framework/whats-new/index.md
Outdated
|
|
||
| **Support for Azure Active Directory Universal Authentication and Multi-Factor authentication** | ||
|
|
||
| Growing compliance and security demands require that many customers use multi-factor authentication (MFA). In addition, current best practices discourage including user passwords directly in connection strings. To support these changes, the .NET Framework 4.7.2 extends [SQLClient connection strings](xref:System.Data.SqlClient.ConnectionSTring) by adding a new value, "Active Directory Interactive", for the existing "Authentication" keyword to support MFA and [Azure AD Authentication](/azure/sql-database/sql-database-aad-authentication-configure). The new interactive method supports native and federated Azure AD users as well as Azure AD guest users. When this method is used, the MFA authentiation imposed by Azure AD is supported for SQL databases. In addition, the authentication process requests a user password to adhere to security best practices. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
authentiation -> authentication
docs/framework/whats-new/index.md
Outdated
| using (RSA rsa = RSA.Create()) | ||
| { | ||
| rsa.ImportParameters(rsaParameters); | ||
| // Other code to execute using the rsa instance. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
uppercase the algorithm name?
| // Other code to execute using the rsa instance. | ||
| } | ||
| ``` | ||
| ```vb |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: it's good to separate code blocks from text by using new lines. It renders fine but it's easier to read here.
|
|
||
| **Support for ephemeral keys** | ||
|
|
||
| PFX import can optionally load private keys directly from memory, bypassing the hard drive. When the new <xref:System.Security.Cryptography.X509Certificates.X509KeyStorageFlags.EphemeralKeySet?displayProperty=nameWithType> flag is specified in an <xref:System.Security.Cryptography.X509Certificates.X509Certificate2> constructor or one of the overloads of the <xref:System.Security.Cryptography.X509Certificates.X509Certificate2.Import%2A?displayProperty=nameWithType> method, the private keys will be loaded as ephemeral keys. This prevents the keys from being visible on the disk. However: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
define PFX?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think I'll leave it undefined, @mairaw.
docs/framework/whats-new/index.md
Outdated
| End Using | ||
| ``` | ||
|
|
||
| The <xref:System.Security.Cryptography.DSA.Create(System.Int32)?displayProperty=nameWithType> and <xref:System.Security.Cryptography.RSA.Create(System.Int32)?displayProperty=nameWithType> methods let you generate new <xref:System.Security.Cryptography.DSA> or <xref:System.Security.Cryptography.RSA> keys with a specific keysize. For example: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
keysize -> key size
docs/framework/whats-new/index.md
Outdated
|
|
||
| Starting with the .NET Framework 4.7.2, a diagnostic assistant can locate the owners of a given <xref:Windows.UI.Xaml.ResourceDictionary>. (The feature is for use by diagnostic assistants and not by production applications.) Whenever a change is made to a <xref:Windows.UI.Xaml.ResourceDictionary>, WPF automatically finds all [DynamicResource](../wpf/advanced/dynamicresource-markup-extension.md) references that might be affected by the change. | ||
|
|
||
| A diagnostic assistant such as Visual Studio’s “Edit-and-Continue” facility may want extend this to handle [StaticResource](../wpf/advanced/staticresource-markup-extension.md) references. The first step in this process is to find the owners of the dictionary; that is, to find all the objects whose `Resources` property refers to the dictionary (either directly, or indirectly via the <xref:System.Windows.ResourceDictionary.MergedDictionaries?displayProperty=nameWithType> property). Three new static methods implemented on the <xref:System.Windows.Diagnostics.ResourceDictionaryDiagnostics?displayProperty=nameWithType> class, one for each of the base types that has a `Resources` property,support this step: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: add space after last comma
docs/framework/whats-new/index.md
Outdated
| # What's new in the .NET Framework | ||
| <a name="introduction"></a>This article summarizes key new features and improvements in the following versions of the .NET Framework: | ||
|
|
||
| [.NET Framework 4.7.2](#v472) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing double space at the end of the line for correct formatting.
docs/framework/whats-new/index.md
Outdated
| ``` | ||
| with code like this: | ||
| ```csharp | ||
| // Before .NET Framework 4.7.2 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this should be either "After .NET Framework 4.7.2" or something like "With .NET Framework 4.7.2". The same for VB code below.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for catching this, @svick.
docs/framework/whats-new/index.md
Outdated
|
|
||
| **Rfc2898DeriveBytes constructors accept a hash algorithm name** | ||
|
|
||
| The <xref:System.Security.Cryptography.Rfc2898DeriveBytes> class has three new constructors with a <xref:System.Security.Cryptography.HashAlgorithmName> parameter that identifies the HMAC algorithm to use when deriving keys. Instead of using SHA-1, developers should use SHA-2-based HMAC, as shown in the following example: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The relationship between SHA-2 mentioned here and HashAlgorithmName.SHA256 in the code below might not be clear. Maybe include a very short note about that? E.g.:
developers should use SHA-2-based HMAC like SHA-256
docs/framework/whats-new/index.md
Outdated
| - [public static HashSet<TSource> ToHashSet<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer);](xref:System.Linq.Enumerable.ToHashSet%2A) | ||
| - New <xref:System.Collections.Generic.HashSet%601> constructors that let you set the collection's capacity, which yields a performance benefit when you know the size of the <xref:System.Collections.Generic.HashSet%601> in advance: | ||
| - [public HashSet(int capacity)](xref:System.Collections.Generic.HashSet%601.#ctor(System.Int32)) | ||
| - [public HashSet(int capacity, IEqualityComparer<T> comparer)](xref:System.Collections.Generic.HashSet%601.#ctor(System.Int32,System.Collections.Generic.IEqualityComparer%7B%600%7D)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The formatting of the list of overloads above is not consistent: some start with a `, some end with a ;, some don't. Probably the best option is to use code formatting with `, so that generics are visible.
docs/framework/whats-new/index.md
Outdated
|
|
||
| - `TryGetValue` methods, which extend the try pattern used in other collection types to these two types. The methods are: | ||
| - [`public bool HashSet.TryGetValue(T equalValue, out T actualValue);](xref:System.Collections.Generic.SortedSet%601.TryGetValue%2A) | ||
| - [`public bool SortedSet.TryGetValue(T equalValue, out T actualValue);](xref:System.Collections.Generic.SortedSEt%601.TryGetValue%2A) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it would be better to display generics here: e.g. HashSet.TryGetValue → HashSet<T>.TryGetValue.
docs/framework/whats-new/index.md
Outdated
|
|
||
| - [public static IEnumerable<FrameworkContentElement> GetFrameworkContentElementOwners(ResourceDictionary dictionary);](xref:System.Windows.Diagnostics.ResourceDictionaryDiagnostics.GetFrameworkContentElementOwners%2A) | ||
|
|
||
| - [public static IEnumerable<Application> GetApplicationOwners(ResourceDictionary dictionary);](xref:System.Windows.Diagnostics.ResourceDictionaryDiagnostics.GetApplicationOwners%2A) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Similar to before, one of the members starts with `, when I think all should start and end with it.
| public ResourceDictionary ResourceDictionary { get; private set; } | ||
|
|
||
| public object ResourceKey { get; private set; } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If this is meant to show just the public API, then I think all the private set; are not necessary. You can just make the properties appear as if they were get-only auto-properties.
docs/framework/whats-new/index.md
Outdated
| } | ||
| ``` | ||
|
|
||
| The event is not raised (and its `add` method is ignored) unless <xref:System.Windows.Diagnostics.VisualDiagnostics> is enabled and the [`ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO`](xref:System.Windows.Diagnostics.VisualDiagnostics.GetXamlSourceInfo%2A) environment variable is set. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it's more correct to call add an accessor, not a method.
docs/framework/whats-new/index.md
Outdated
| ```xml | ||
| <windowsSettings> | ||
| <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> | ||
| </windowsSettings> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: inconsistent indentation
docs/framework/whats-new/index.md
Outdated
| <a name="clickonce472" /> | ||
| #### ClickOnce | ||
|
|
||
| HDPI-aware applications for Windows Forms, Windows Presentation Foundation (WPF), and Visual Studio Tools for Office (VSTO) can all be deployed by using ClickOnce. If the following entry is found in teh application manifest, deployment will succeed under .NET Framework 4.7.2: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo: teh
|
Thanks for the thorough review and the comments, @svick! I'll address them in the next round of revisions. |

What's new for 4.7.2
Fixes #4793
Internal review URL
//cc @preetikr