Modifiche di runtime per la migrazione a .NET Framework 4.7.x

Questo articolo elenca i problemi di compatibilità delle app introdotti in .NET Framework 4.7, 4.7.1 e 4.7.2.

.NET Framework 4.7

JIT

Generazione di codice non corretto per il passaggio e il confronto di valori UInt16

Dettagli

A causa di modifiche introdotte in .NET Framework 4.7, in alcuni casi il codice generato dal compilatore JIT nelle applicazioni in esecuzione in .NET Framework 4.7 confrontano in modo non corretto due valori T:System.UInt16. Per altre informazioni, vedere Issue #11508: Silent bad codegen when passing and comparing ushort args (Problema n. 11508: Generazione automatica di codice non valido quando si passano e confrontano argomenti ushort) su GitHub.com.

Suggerimento

Se si verificano problemi nel confronto di valori senza segno a 16 bit in .NET Framework 4.7, eseguire l'aggiornamento a .NET Framework 4.7.1.

Nome valore
Ambito Edge
Versione 4.7
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

WPF (Windows Presentation Foundation)

Arresto anomalo del sistema nel selettore quando si rimuove un elemento da una raccolta INCC personalizzata

Dettagli

Un'eccezione T:System.InvalidOperationException può verificarsi negli scenari seguenti:

  • ItemsSource per un T:System.Windows.Controls.Primitives.Selector è una raccolta con un'implementazione personalizzata di T:System.Collections.Specialized.INotifyCollectionChanged.
  • L'elemento selezionato viene rimosso dalla raccolta.
  • T:System.Collections.Specialized.NotifyCollectionChangedEventArgs ha P:System.Collections.Specialized.NotifyCollectionChangedEventArgs.OldStartingIndex = -1 (indica una posizione sconosciuta).

Lo stack di chiamate dell'eccezione inizia at System.Windows.Threading.Dispatcher.VerifyAccess() at System.Windows.DependencyObject.GetValue(DependencyProperty dp) at System.Windows.Controls.Primitives.Selector.GetIsSelected(DependencyObject element). Questa eccezione può verificarsi in .NET Framework 4.5 se l'applicazione ha più di un thread Dispatcher. In .NET Framework 4.7 l'eccezione può verificarsi anche in applicazioni con un singolo thread di Dispatcher.

Il problema è stato corretto in .NET Framework 4.7.1.

Suggerimento

Effettuare l'aggiornamento a .NET Framework 4.7.1.

Nome valore
Ambito Secondarie
Versione 4.7
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

DataGridCellsPanel.BringIndexIntoView genera ArgumentOutOfRangeException

Dettagli

ScrollIntoView(Object) funziona in modo asincrono quando è abilitata la virtualizzazione delle colonne la cui larghezza tuttavia non è stata ancora determinata. Se le colonne vengono rimosse prima dell'operazione asincrona, può verificarsi un evento System.ArgumentOutOfRangeException.

Suggerimento

Una delle operazioni seguenti:

  • Effettuare l'aggiornamento a .NET Framework 4.7.
  • Installare la patch più recente per la manutenzione di .NET Framework 4.6.2.
  • Evitare di rimuovere colonne fino al completamento della risposta asincrona a ScrollIntoView(Object).
Nome valore
Ambito Edge
Versione 4.6.2
Tipo esecuzione

API interessate

ObjectDisposedException generata dal controllo ortografico WPF

Dettagli

Può verificarsi l'arresto anomalo di applicazioni WPF con un System.ObjectDisposedException generato dal controllo ortografico. Questo problema è risolto in .NET Framework 4.7 WPF, dove l'eccezione viene gestita in modo normale e pertanto si evitano effetti avversi sulle applicazioni. Si noti che potranno essere rilevate eccezioni first-chance occasionali nelle applicazioni in esecuzione in un debugger.

Suggerimento

Effettuare l'aggiornamento a .NET Framework 4.7

Nome valore
Ambito Edge
Versione 4.6.1
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

Il ridimensionamento di una griglia può causare la mancata risposta dell'applicazione

Dettagli

Durante il layout di T:System.Windows.Controls.Grid può verificarsi un ciclo infinito nelle circostanze seguenti:

  • Le definizioni di riga contengono due *-righe che dichiarano entrambe un valore MinHeight e MaxHeight.
  • Il contenuto delle righe *-rows non supera il valore MaxHeight corrispondente.
  • L'altezza disponibile della griglia viene superata dal primo MinHeight (più qualsiasi altra riga fissa o automatica).
  • L'app è destinata a .NET Framework 4.7 o acconsente esplicitamente all'algoritmo di allocazione 4.7 impostando Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false.

Il ciclo si verifica anche con più di due righe o nel caso analogo per le colonne. Il problema è stato corretto in .NET Framework 4.7.1.

Suggerimento

Effettuare l'aggiornamento a .NET Framework 4.7.1. In alternativa, se non è necessario l'algoritmo di allocazione della versione 4.7 è possibile usare l'impostazione di configurazione seguente:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
Nome valore
Ambito Edge
Versione 4.7
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

Viene impostato lo sfondo trasparente per RibbonGroup nelle build localizzate

Dettagli

Lo sfondo di System.Windows.Controls.Ribbon.RibbonGroup nelle build localizzate viene sempre disegnato con il pennello trasparente, causando un'esperienza insoddisfacente per l'interfaccia utente. Questo problema è stato risolto nella correzione di WPF per .NET Framework 4.7 con l'aggiornamento delle risorse localizzate per System.Windows.Controls.Ribbon.RibbonGroup, che a sua volta garantisce che sia selezionato il pennello corretto.

Suggerimento

Effettuare l'aggiornamento a .NET Framework 4.7

Nome valore
Ambito Edge
Versione 4.6.2
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

Aggiornamento dello stack di stampa WPF

Dettagli

Le API di stampa di WPF che usano System.Printing.PrintQueue ora chiamano l'API di gestione del pacchetto dei documenti di stampa di Windows invece dell'API di stampa XPS, ora deprecata. La modifica è stata apportata per ottimizzare la funzionalità. Né gli utenti né gli sviluppatori dovrebbero riscontrare modifiche nel comportamento o nell'uso dell'API. Il nuovo stack di stampa viene abilitato per impostazione predefinita durante l'esecuzione in Windows 10 Creators Update. Il vecchio stack di stampa continua a funzionare come in precedenza nelle versioni precedenti di Windows.

Suggerimento

Per usare lo stack precedente in Windows 10 Creators Update, impostare il valore UseXpsOMPrinting REG_DWORD della chiave del Registro di sistema HKEY_CURRENT_USER\Software\Microsoft\.NETFramework\Windows Presentation Foundation\Printing su 1.

Nome valore
Ambito Edge
Versione 4.7
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

Windows Workflow Foundation (WF)

Il flusso di lavoro ora genera l'eccezione originale anziché NullReferenceException in alcuni casi

Dettagli

In .NET Framework 4.6.2 e versioni precedenti, quando il metodo Execute di un'attività flusso di lavoro genera un'eccezione con un valore null per la proprietà Message, il runtime del flusso di lavoro System.Activities genera un System.NullReferenceException, occultando l'eccezione originale. In .NET Framework 4.7 viene generata l'eccezione occultata in precedenza.

Suggerimento

Se il codice si basa sulla gestione di System.NullReferenceException, modificarlo per intercettare le eccezioni che potrebbero essere generate da attività personalizzate.

Nome valore
Ambito Secondarie
Versione 4.7
Tipo esecuzione

API interessate

La persistenza SQL del flusso di lavoro aggiunge cluster della chiave primaria e non consente i valori null in alcune colonne

Dettagli

A partire da .NET Framework 4.7 le tabelle create per SQL Workflow Instance Store (SWIS) dallo script SqlWorkflowInstanceStoreSchema.sql usano chiavi primarie cluster. Per questo motivo le identità non supportano i valori null. Questa modifica non altera il funzionamento di SWIS. Gli aggiornamenti sono stati apportati per supportare la replica transazionale di SQL Server.

Suggerimento

Per l'applicazione di questa modifica è necessario applicare il file con estensione sql SqlWorkflowInstanceStoreSchemaUpgrade.sql alle installazioni esistenti. Le nuove installazioni del database dispongono automaticamente della modifica.

Nome valore
Ambito Edge
Versione 4.7
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

.NET Framework 4.7.1

JIT

Generazione di codice non corretto per il passaggio e il confronto di valori UInt16

Dettagli

A causa di modifiche introdotte in .NET Framework 4.7, in alcuni casi il codice generato dal compilatore JIT nelle applicazioni in esecuzione in .NET Framework 4.7 confrontano in modo non corretto due valori T:System.UInt16. Per altre informazioni, vedere Issue #11508: Silent bad codegen when passing and comparing ushort args (Problema n. 11508: Generazione automatica di codice non valido quando si passano e confrontano argomenti ushort) su GitHub.com.

Suggerimento

Se si verificano problemi nel confronto di valori senza segno a 16 bit in .NET Framework 4.7, eseguire l'aggiornamento a .NET Framework 4.7.1.

Nome valore
Ambito Edge
Versione 4.7
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

Sicurezza

RSACng e DSACng possono essere di nuovo usati in scenari di attendibilità parziale

Dettagli

In alcuni casi, CngLightup (usato in diverse API di crittografia di livello superiore, ad esempio System.Security.Cryptography.Xml.EncryptedXml) e System.Security.Cryptography.RSACng si basano sull'attendibilità totale. Questi casi includono i P/Invoke senza l'asserzione delle autorizzazioni SecurityPermissionFlag.UnmanagedCode e i percorsi di codice in cui System.Security.Cryptography.CngKey include richieste di autorizzazione per SecurityPermissionFlag.UnmanagedCode. A partire da .NET Framework 4.6.2, CngLightup viene usato per passare a System.Security.Cryptography.RSACng, quando possibile. Di conseguenza, le app con attendibilità parziale che usano System.Security.Cryptography.Xml.EncryptedXml hanno iniziato a restituire errori e a generare eccezioni SecurityException. Questa modifica aggiunge le asserzioni necessarie in modo che tutte le funzioni che usano CngLightup abbiano le autorizzazioni richieste.

Suggerimento

Se questa modifica apportata in .NET Framework 4.6.2 ha avuto un impatto negativo sulle app con attendibilità parziale, eseguire l'aggiornamento a .NET Framework 4.7.1.

Nome valore
Ambito Edge
Versione 4.6.2
Tipo esecuzione

API interessate

Windows Communication Foundation (WCF)

L'oggetto AddressHeaderCollection di WCF ora genera un'eccezione ArgumentException se un elemento addressHeader è Null

Dettagli

A partire da .NET Framework 4.7.1 il costruttore AddressHeaderCollection(IEnumerable<AddressHeader>) genera un'eccezione ArgumentException se uno degli elementi è null. In .NET Framework 4.7 e versioni precedenti non viene generata alcuna eccezione.

Suggerimento

Se si verificano problemi di compatibilità con questa modifica in .NET Framework 4.7.1 o versione successiva, è possibile rifiutarlo esplicitamente aggiungendo la riga seguente alla <runtime> sezione del file app.config:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableAddressHeaderCollectionValidation=true" />
  </runtime>
</configuration>
Nome valore
Ambito Secondarie
Versione 4.7.1
Tipo esecuzione

API interessate

Il valore predefinito MsmqSecureHashAlgorithm di WCF è ora SHA256

Dettagli

A partire da .NET Framework 4.7.1 l'algoritmo di firma del messaggio predefinito in WCF per i messaggi Msmq è SHA256. In .NET Framework 4.7 e versioni precedenti l'algoritmo di firma del messaggio predefinito è SHA1.

Suggerimento

Se si verificano problemi di compatibilità con questa modifica in .NET Framework 4.7.1 o versione successiva, è possibile rifiutare esplicitamente la modifica aggiungendo la riga seguente alla <runtime> sezione del file app.config:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.ServiceModel.UseSha1InMsmqEncryptionAlgorithm=true" />
  </runtime>
</configuration>
Nome valore
Ambito Secondarie
Versione 4.7.1
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

PipeConnection.GetHashAlgorithm in WCF ora usa SHA256

Dettagli

A partire da .NET Framework 4.7.1, Windows Communication Foundation usa un hash SHA256 per generare nomi casuali per le named pipe. In .NET Framework 4.7 e versioni precedenti veniva usato l'hash SHA1.

Suggerimento

Se si verificano problemi di compatibilità con questa modifica in .NET Framework 4.7.1 o versione successiva, è possibile rifiutarla esplicitamente aggiungendo la riga seguente alla sezione <runtime> del file app.config:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.ServiceModel.UseSha1InPipeConnectionGetHashAlgorithm=true" />
  </runtime>
</configuration>
Nome valore
Ambito Secondarie
Versione 4.7.1
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

WPF (Windows Presentation Foundation)

Popup concatenati con StaysOpen=False

Dettagli

Un popup con StaysOpen=False deve chiudersi quando si fa clic all'esterno del popup. Due o più popup concatenati, ad esempio un popup che ne contiene un altro, causavano molti problemi, tra cui:

  • Apertura di due livelli, clic all'esterno di P2, ma all'interno di P1. Non accade nulla.
  • Apertura di due livelli, clic all'esterno di P1. Entrambi i popup vengono chiusi.
  • Apertura e chiusura di due livelli. Riapertura di P2. Non accade nulla.
  • Apertura di tre livelli. Non puoi. Non accade nulla o i primi due livelli si chiudono, a seconda del punto in cui si fa clic.

Questi casi (e altre varianti) ora funzionano come previsto.

Nome valore
Ambito Edge
Versione 4.7.1
Tipo esecuzione

API interessate

Arresto anomalo del sistema nel selettore quando si rimuove un elemento da una raccolta INCC personalizzata

Dettagli

Un'eccezione T:System.InvalidOperationException può verificarsi negli scenari seguenti:

  • ItemsSource per un T:System.Windows.Controls.Primitives.Selector è una raccolta con un'implementazione personalizzata di T:System.Collections.Specialized.INotifyCollectionChanged.
  • L'elemento selezionato viene rimosso dalla raccolta.
  • T:System.Collections.Specialized.NotifyCollectionChangedEventArgs ha P:System.Collections.Specialized.NotifyCollectionChangedEventArgs.OldStartingIndex = -1 (indica una posizione sconosciuta).

Lo stack di chiamate dell'eccezione inizia at System.Windows.Threading.Dispatcher.VerifyAccess() at System.Windows.DependencyObject.GetValue(DependencyProperty dp) at System.Windows.Controls.Primitives.Selector.GetIsSelected(DependencyObject element). Questa eccezione può verificarsi in .NET Framework 4.5 se l'applicazione ha più di un thread Dispatcher. In .NET Framework 4.7 l'eccezione può verificarsi anche in applicazioni con un singolo thread di Dispatcher.

Il problema è stato corretto in .NET Framework 4.7.1.

Suggerimento

Effettuare l'aggiornamento a .NET Framework 4.7.1.

Nome valore
Ambito Secondarie
Versione 4.7
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

Il ridimensionamento di una griglia può causare la mancata risposta dell'applicazione

Dettagli

Durante il layout di T:System.Windows.Controls.Grid può verificarsi un ciclo infinito nelle circostanze seguenti:

  • Le definizioni di riga contengono due *-righe che dichiarano entrambe un valore MinHeight e MaxHeight.
  • Il contenuto delle righe *-rows non supera il valore MaxHeight corrispondente.
  • L'altezza disponibile della griglia viene superata dal primo MinHeight (più qualsiasi altra riga fissa o automatica).
  • L'app è destinata a .NET Framework 4.7 o acconsente esplicitamente all'algoritmo di allocazione 4.7 impostando Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false.

Il ciclo si verifica anche con più di due righe o nel caso analogo per le colonne. Il problema è stato corretto in .NET Framework 4.7.1.

Suggerimento

Effettuare l'aggiornamento a .NET Framework 4.7.1. In alternativa, se non è necessario l'algoritmo di allocazione della versione 4.7 è possibile usare l'impostazione di configurazione seguente:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
Nome valore
Ambito Edge
Versione 4.7
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

.NET Framework 4.7.2

Core

Consentire Unicode negli URI simili a condivisioni UNC

Dettagli

In System.Uri, la costruzione dell'URI di un file contenente sia un nome condivisione URI che caratteri Unicode non ha più come risultato un URI con stato interno non valido. Il comportamento cambia solo se tutte le condizioni seguenti sono vere:

  • Lo schema dell'URI è file: ed è seguito da almeno quattro barre.
  • Il nome host inizia con un carattere di sottolineatura o con un altro simbolo non riservato.
  • L'URI contiene caratteri Unicode.

Suggerimento

Le applicazioni che utilizzano URI contenenti Unicode in modo coerente avrebbero presumibilmente potuto usare questo comportamento per impedire riferimenti a condivisioni UNC. Tali applicazioni devono invece usare IsUnc.

Nome valore
Ambito Edge
Versione 4.7.2
Tipo esecuzione

API interessate

Supporto della notazione URI relativa speciale quando è presente Unicode

Dettagli

Uri non genererà più un'eccezione NullReferenceException quando si chiama TryCreate su determinati URI relativi contenenti Unicode. La riproduzione più semplice di è riportata di NullReferenceException seguito, con le due istruzioni equivalenti:

bool success = Uri.TryCreate("http:%C3%A8", UriKind.RelativeOrAbsolute, out Uri href);
bool success = Uri.TryCreate("http:è", UriKind.RelativeOrAbsolute, out Uri href);

Per riprodurre NullReferenceException, gli elementi seguenti devono essere true:

  • L'URI deve essere specificato come relativo anteponendolo con 'http:' e non seguendolo con '//'.
  • L'URI deve contenere Unicode codificato in percentuale o simboli non riservati.

Suggerimento

Gli utenti che si basano su questo comportamento per impedire l'uso di URI relativi devono invece specificare UriKind.Absolute al momento della creazione di un URI.

Nome valore
Ambito Edge
Versione 4.7.2
Tipo esecuzione

API interessate

esecuzione

Miglioramento della convalida dei certificati attendibili della catena WCF per l'autenticazione del certificato Net.Tcp

Dettagli

.NET Framework 4.7.2 migliora la convalida dei certificati attendibili della catena quando si usa l'autenticazione del certificato con sicurezza del trasporto con WCF. Con questo miglioramento, i certificati client usati per eseguire l'autenticazione a un server devono essere configurati per l'autenticazione client. Analogamente, i certificati server per l'autenticazione di un server devono essere configurati per l'autenticazione server. Con questa modifica, se il certificato radice è disabilitato, la convalida della catena di certificati non riesce. La stessa modifica è stata apportata anche a .NET Framework 3.5 e versioni successive tramite rollup della sicurezza di Windows. Altre informazioni sono disponibili qui. Questa modifica è attivata per impostazione predefinita e può essere disattivata tramite un'impostazione di configurazione.

Suggerimento

  • Verificare se la certificazione per client e server è dotata dell'OID EKU necessario. In caso contrario, aggiornare la certificazione.

  • Verificare se il certificato radice è valido. In caso contrario, aggiornare il certificato radice.

  • Se non è possibile aggiornare il certificato, è possibile aggirare temporaneamente la modifica di rilievo con l'impostazione di configurazione seguente. Tuttavia, rifiutare esplicitamente la modifica lascerà il sistema vulnerabile al problema di sicurezza.

    <appSettings>
      <add key="wcf:useLegacyCertificateUsagePolicy" value="true" />
    </appSettings>
    
Nome valore
Ambito Secondarie
Versione 4.7.2
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

Applicazioni Web

L'impostazione dell'app "dataAnnotations:dataTypeAttribute:disableRegEx" è attivata per impostazione predefinita in .NET Framework 4.7.2

Dettagli

In .NET Framework 4.6.1 è stata introdotta un'impostazione dell'app (dataAnnotations:dataTypeAttribute:disableRegEx) che consente agli utenti di disattivare l'uso delle espressioni regolari negli attributi del tipo di dati (ad esempio System.ComponentModel.DataAnnotations.EmailAddressAttribute, System.ComponentModel.DataAnnotations.UrlAttribute e System.ComponentModel.DataAnnotations.PhoneAttribute). In questo modo si riducono le vulnerabilità di sicurezza, ad esempio evitando la possibilità di un attacco Denial of Service tramite espressioni regolari specifiche.
In .NET Framework 4.6.1 questa impostazione dell'app per disattivare l'uso di RegEx era false per impostazione predefinita. A partire da .NET Framework 4.7.2, questa opzione di configurazione è impostata su true per impostazione predefinita per ridurre ulteriormente la vulnerabilità sicura per le applicazioni Web destinate a .NET Framework 4.7.2 e versioni successive.

Suggerimento

Se si nota che le espressioni regolari nell'applicazione Web non funzionano dopo l'aggiornamento a .NET Framework 4.7.2, è possibile assegnare all'impostazione dataAnnotations:dataTypeAttribute:disableRegEx il valore false per ripristinare il comportamento precedente.

<configuration>
<appSettings>
...
<add key="dataAnnotations:dataTypeAttribute:disableRegEx" value="false"/>
...
</appSettings>
</configuration>
Nome valore
Ambito Secondarie
Versione 4.7.2
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.

WPF (Windows Presentation Foundation)

Miglioramento del comportamento dei suggerimenti tasto di scelta in WPF

Dettagli

Il comportamento dei suggerimenti tasto di scelta è stato modificato in modo che fosse alla pari con il comportamento in Microsoft Word e in Esplora risorse. Controllando se lo stato dei suggerimenti tasto di scelta corrisponde o meno ad Abilitato in caso di pressione di un SystemKey (in particolare Key o F11), WPF gestisce i tasti dei suggerimenti tasto di scelta in modo appropriato. I suggerimenti tasto di scelta ora chiudono un menu anche se è stato aperto tramite mouse.

Suggerimento

N/D

Nome valore
Ambito Edge
Versione 4.7.2
Tipo esecuzione

API interessate

Non rilevabile tramite l'analisi api.