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

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

.NET Framework 4.7

ASP.NET

HttpRuntime.AppDomainAppPath genera un'eccezione NullReferenceException

Dettagli

In .NET Framework 4.6.2, il runtime genera una T:System.NullReferenceException durante il recupero di un valore P:System.Web.HttpRuntime.AppDomainAppPath che include caratteri Null. In .NET Framework 4.6.1 e versioni precedenti, il runtime genera una T:System.ArgumentNullException.

Suggerimento

È possibile eseguire una delle operazioni seguenti per rispondere a questa modifica:

  • Se l'applicazione è in esecuzione in .NET Framework 4.6.2, gestire T:System.NullReferenceException.
  • Eseguire l'aggiornamento a .NET Framework 4.7, che consente di ripristinare il comportamento precedente e genera un'eccezione T:System.ArgumentNullException.
Nome valore
Scope Edge
Versione 4.6.2
Type Ridestinazione

API interessate

Limitazione delle richieste simultanee per sessione

Dettagli

In .NET Framework 4.6.2 e versioni precedenti, ASP.NET esegue le richieste in sequenza con lo stesso Sessionid e in ASP.NET Sessionid viene sempre generato usando un cookie per impostazione predefinita. Se una pagina richiede molto tempo a rispondere, ridurrà in modo significativo le prestazioni del server semplicemente premendo F5 nel browser. Nella correzione è stato aggiunto un contatore per tenere traccia delle richieste in coda e terminare le richieste quando superano il limite specificato. Il valore predefinito è 50. Se si raggiunge il limite, verrà registrato un avviso nel registro eventi e potrebbe essere registrata una risposta HTTP 500 nel log di IIS.

Suggerimento

Per ripristinare il comportamento precedente, è possibile aggiungere l'impostazione seguente al file web. config per rifiutare esplicitamente il nuovo comportamento.

<appSettings>
    <add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
Nome valore
Scope Edge
Versione 4.7
Type Ridestinazione

Rete

Il valore predefinito di ServicePointManager.SecurityProtocol è SecurityProtocolType.System.Default

Dettagli

A partire dalle app destinate a .NET Framework 4.7, il valore predefinito della proprietà ServicePointManager.SecurityProtocol è SecurityProtocolType.SystemDefault. Questa modifica consente alle API di rete di .NET Framework basate su SslStream (ad esempio FTP, HTTPS e SMTP) di ereditare i protocolli di sicurezza predefiniti dal sistema operativo anziché usare i valori hardcoded definiti da .NET Framework. Il valore predefinito varia a seconda del sistema operativo e di eventuali configurazioni personalizzate eseguite dall'amministratore di sistema. Per informazioni sul protocollo SChannel predefinito in ogni versione del sistema operativo Windows, vedere Protocolli in TLS/SSL (SSP Schannel).

Per le applicazioni destinate a una versione precedente di .NET Framework, il valore predefinito della proprietà ServicePointManager.SecurityProtocol dipende dalla versione di .NET Framework di destinazione. Per altre informazioni, vedere la sezione Servizi di rete in Modifiche di reindirizzamento per la migrazione da .NET Framework 4.5.2 a 4.6.

Suggerimento

Questa modifica influisce sulle app destinate a .NET Framework 4.7 o versioni successive. Se si preferisce usare un protocollo definito anziché affidarsi a un'impostazione predefinita del sistema, è possibile impostare in modo esplicito il valore della proprietà ServicePointManager.SecurityProtocol. Se questa modifica non è accettabile, è possibile rifiutarla esplicitamente aggiungendo un'impostazione di configurazione alla sezione <runtime> del file di configurazione dell'applicazione. L'esempio seguente mostra sia la sezione <runtime> che l'opzione per il rifiuto esplicito Switch.System.Net.DontEnableSystemDefaultTlsVersions:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
Nome valore
Scope Secondarie
Versione 4.7
Type Ridestinazione

API interessate

SslStream supporta avvisi TLS

Dettagli

Dopo un handshake TLS non riuscito, verrà generata una System.IO.IOException con eccezione System.ComponentModel.Win32Exception interna dalla prima operazione di lettura/scrittura di I/O. Il codice System.ComponentModel.Win32Exception.NativeErrorCode per System.ComponentModel.Win32Exception può essere mappato all'avviso TLS della parte remota usando i codici di errore Schannel per gli avvisi TLS e SSL. Per altre informazioni, vedere RFC 2246: Sezione 7.2.2 Avvisi di errore.
Il comportamento in .NET Framework 4.6.2 e versioni precedenti corrisponde al timeout del canale di trasporto (in genere una connessione TCP) durante la scrittura o la lettura se l'altra entità non è riuscita a effettuare l'handshake e subito dopo ha rifiutato la connessione.

Suggerimento

Le applicazioni che chiamano API I/O di rete, ad esempio Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32), devono gestire IOException o System.TimeoutException.
La funzionalità relativa agli avvisi TLS è abilitata per impostazione predefinita a partire da .NET Framework 4.7. Nelle applicazioni destinate alle versioni di .NET Framework da 4.0 a 4.6.2 e in esecuzione in un sistema .NET Framework 4.7 o superiore, la funzionalità è disabilitata per mantenere la compatibilità.
L'API di configurazione seguente è disponibile per abilitare o disabilitare la funzionalità per le applicazioni .NET Framework 4.6 e versioni successive in esecuzione in .NET Framework 4.7 o versioni successive.

  • A livello di codice: Deve essere la prima operazione eseguita dall'applicazione perché ServicePointManager verrà inizializzato una sola volta:

    AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true);
    
    // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2.
    AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);
    
  • AppConfig:

    <runtime>
      <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/>
      <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. -->
    </runtime>
    
  • Chiave del Registro di sistema (globale del computer): Impostare il valore su false per abilitare la funzionalità in .NET Framework 4.6 - 4.6.2.

    Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    - Type: String
    - Value: "true"
    
Nome valore
Scope Edge
Versione 4.7
Type Ridestinazione

API interessate

Sicurezza

CspParameters.ParentWindowHandle prevede ora un valore HWND

Dettagli

Il valore ParentWindowHandle, introdotto in .NET Framework 2.0, consente a un'applicazione di registrare il valore di un handle di finestra padre in modo che qualsiasi interfaccia utente necessaria per accedere alla chiave (ad esempio, una finestra di dialogo di richiesta di PIN o di consenso) venga aperta come finestra figlio modale nella finestra specificata. A partire dalle app destinate a .NET Framework 4.7, un'applicazione Windows Forms può impostare la proprietà ParentWindowHandle con codice simile al seguente:

cspParameters.ParentWindowHandle = form.Handle;

Nelle versioni precedenti di .NET Framework il valore previsto era una proprietà System.IntPtr che rappresentava la posizione in memoria in cui risiedeva il valore HWND. L'impostazione di questa proprietà su form.Handle in Windows 7 e versioni precedenti non aveva alcun effetto, mentre in Windows 8 e versioni successive il risultato è “System.Security.Cryptography.CryptographicException: Parametro non corretto.”

Suggerimento

Le applicazioni destinate a .NET Framework 4.7 o versioni successive che desiderano registrare una relazione della finestra padre sono invitate a usare la forma semplificata:

cspParameters.ParentWindowHandle = form.Handle;

Gli utenti che hanno identificato che il valore corretto da passare era l'indirizzo della posizione di memoria contenente il valore form.Handle possono rifiutare esplicitamente la modifica funzionale impostando l'opzione di AppContext Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle su true:

  • Impostando a livello di codice le opzioni di compatibilità in AppContext, come spiegato qui.
  • Aggiungendo la riga seguente alla sezione <runtime> del file app.config:
<runtime>
 <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>

Al contrario, gli utenti che acconsentono esplicitamente al nuovo comportamento per il runtime di .NET Framework 4.7, quando l'applicazione viene caricata in versioni precedenti di .NET Framework possono impostare l'opzione AppContext su false.

Nome valore
Scope Secondarie
Versione 4.7
Type Ridestinazione

API interessate

SslStream supporta avvisi TLS

Dettagli

Dopo un handshake TLS non riuscito, verrà generata una System.IO.IOException con eccezione System.ComponentModel.Win32Exception interna dalla prima operazione di lettura/scrittura di I/O. Il codice System.ComponentModel.Win32Exception.NativeErrorCode per System.ComponentModel.Win32Exception può essere mappato all'avviso TLS della parte remota usando i codici di errore Schannel per gli avvisi TLS e SSL. Per altre informazioni, vedere RFC 2246: Sezione 7.2.2 Avvisi di errore.
Il comportamento in .NET Framework 4.6.2 e versioni precedenti corrisponde al timeout del canale di trasporto (in genere una connessione TCP) durante la scrittura o la lettura se l'altra entità non è riuscita a effettuare l'handshake e subito dopo ha rifiutato la connessione.

Suggerimento

Le applicazioni che chiamano API I/O di rete, ad esempio Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32), devono gestire IOException o System.TimeoutException.
La funzionalità relativa agli avvisi TLS è abilitata per impostazione predefinita a partire da .NET Framework 4.7. Nelle applicazioni destinate alle versioni di .NET Framework da 4.0 a 4.6.2 e in esecuzione in un sistema .NET Framework 4.7 o superiore, la funzionalità è disabilitata per mantenere la compatibilità.
L'API di configurazione seguente è disponibile per abilitare o disabilitare la funzionalità per le applicazioni .NET Framework 4.6 e versioni successive in esecuzione in .NET Framework 4.7 o versioni successive.

  • A livello di codice: Deve essere la prima operazione eseguita dall'applicazione perché ServicePointManager verrà inizializzato una sola volta:

    AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true);
    
    // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2.
    AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);
    
  • AppConfig:

    <runtime>
      <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/>
      <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. -->
    </runtime>
    
  • Chiave del Registro di sistema (globale del computer): Impostare il valore su false per abilitare la funzionalità in .NET Framework 4.6 - 4.6.2.

    Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    - Type: String
    - Value: "true"
    
Nome valore
Scope Edge
Versione 4.7
Type Ridestinazione

API interessate

Windows Communication Foundation (WCF)

La serializzazione dei caratteri di controllo con DataContractJsonSerializer è ora compatibile con ECMAScript V6 e V8

Dettagli

In .NET Framework 4.6.2 e versioni precedenti, System.Runtime.Serialization.Json.DataContractJsonSerializer non serializza alcuni caratteri di controllo speciali, ad esempio \b, \f e \t, in modo compatibile con gli standard ECMAScript V6 e V8. A partire da .NET Framework 4.7, la serializzazione di questi caratteri di controllo è compatibile con ECMAScript V6 e V8.

Suggerimento

Questa funzionalità è abilitata per impostazione predefinita per le app destinate a .NET Framework 4.7. Se questo comportamento non è opportuno, è possibile rifiutare esplicitamente questa funzionalità aggiungendo la riga seguente alla sezione <runtime> del file app.config o web.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
Nome valore
Scope Edge
Versione 4.7
Type Ridestinazione

API interessate

La sicurezza dei messaggi di WCF è ora in grado di usare TLS1.1 e TLS1.2

Dettagli

A partire da .NET Framework 4.7 i clienti possono configurare TLS1.1 o TLS1.2 nella sicurezza dei messaggi di WCF oltre a SSL3.0 e TLS1.0 usando le impostazioni di configurazione delle applicazioni.

Suggerimento

In .NET Framework 4.7 il supporto per TLS1.1 e TLS1.2 nella sicurezza dei messaggi di WCF è disattivato per impostazione predefinita. Per attivarlo, aggiungendo la riga seguente alla sezione <runtime> del file app.config o web.config:

<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
Nome valore
Scope Edge
Versione 4.7
Type Ridestinazione

Windows Presentation Foundation (WPF)

Le chiamate a System.Windows.Input.PenContext.Disable nei sistemi abilitati per il tocco possono generare ArgumentException

Dettagli

In alcuni casi, le chiamate al metodo System.Windows.Intput.PenContext.Disable interno nei sistemi abilitati per il tocco possono generare una T:System.ArgumentException non gestita a causa della reentrancy.

Suggerimento

Questo problema è stato risolto in .NET Framework 4.7. Per evitare l'eccezione, eseguire l'aggiornamento a una versione di .NET Framework a partire da .NET Framework 4.7.

Nome valore
Scope Edge
Versione 4.6.1
Type Ridestinazione

NullReferenceException nel codice di gestione delle eccezioni da ImageSourceConverter.ConvertFrom

Dettagli

Un errore nel codice di gestione delle eccezioni per ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) ha causato la generazione di un oggetto System.NullReferenceException non corretto anziché dell'eccezione prevista (System.IO.DirectoryNotFoundException o System.IO.FileNotFoundException). Questa modifica corregge tale errore e quindi il metodo ora genera l'eccezione appropriata.

Per impostazione predefinita, tutte le applicazioni destinate a .NET Framework 4.6.2 e versioni precedenti continuano a generare System.NullReferenceException per la compatibilità. Gli sviluppatori di applicazioni destinate a.NET Framework 4.7 e versioni precedenti visualizzano le eccezioni corrette.

Suggerimento

Gli sviluppatori che preferiscono tornare al recupero di System.NullReferenceException quando usano .NET Framework 4.7 o versione successiva come destinazione possono aggiungere o unire il codice seguente al file App.config della propria applicazione:

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
Nome valore
Scope Edge
Versione 4.7
Type Ridestinazione

API interessate

Allocazione di spazio della griglia di WPF per le colonne a stella

Dettagli

A partire da .NET Framework 4.7, WPF sostituisce l'algoritmo usato dal controllo Grid per allocare spazio alle colonne a stella (colonne *). Questo modifica la larghezza effettiva assegnata alle colonne * in diversi casi:

  • Quando una o più colonne * hanno anche una larghezza minima o massima che esegue l'override dell'allocazione proporzionale per tale colonna. (La larghezza minima può derivare da una dichiarazione esplicita MinWidth o da un minimo implicito ottenuto dal contenuto della colonna. La larghezza massima può essere definita solo in modo esplicito da una dichiarazione MaxWidth.)
  • Quando una o più colonne * dichiarano un peso * estremamente elevato, maggiore di 10^298.
  • Quando i pesi * sono diversi al punto da determinare un'instabilità a virgola mobile (overflow, underflow, perdita di precisione).
  • Quando è abilitato l'arrotondamento del layout e il DPI effettivamente visualizzato è sufficientemente elevato. Nei primi due casi, le larghezze generate dal nuovo algoritmo possono essere notevolmente diverse da quelle generate dal vecchio algoritmo; nell'ultimo caso, la differenza sarà di uno o due pixel al massimo.

Il nuovo algoritmo consente di risolvere diversi bug presenti nell'algoritmo precedente:

  • L'allocazione totale alle colonne può superare la larghezza della griglia. Ciò può verificarsi quando si alloca spazio a una colonna la cui quota proporzionale è minore rispetto alle dimensioni minime. L'algoritmo alloca le dimensioni minime, riducendo lo spazio disponibile per le altre colonne. Se non sono presenti colonne * da allocare, l'allocazione totale potrebbe essere troppo grande.

  • L'allocazione totale può non raggiungere la larghezza della griglia. Questo è il doppio problema di #1, che si verifica quando si effettua l'allocazione a una colonna la cui quota proporzionale è maggiore rispetto alle sue dimensioni massime, senza alcuna colonna * per sfruttare la flessibilità.

  • Due colonne * possono ricevere le allocazioni in modo non proporzionale ai loro pesi *. Questa è una versione più lieve di #1/#2, che si verifica durante l'allocazione alle colonne * A, B e C (in questo ordine), dove la quota proporzionale di B viola il suo vincolo min o max. Come in precedenza, lo spazio disponibile alla colonna C si riduce e questa ottiene un'allocazione proporzionale inferiore o superiore rispetto ad A.

  • Le colonne con pesi estremamente alti (> 10^298) vengono considerate tutte come se avessero un peso di 10^298. Le differenze proporzionali tra di esse (e tra le colonne con pesi leggermente inferiori) non vengono rispettate.

  • Le colonne con pesi infiniti non vengono gestite correttamente. (In realtà non è possibile impostare un peso su infinito, ma si tratta di una limitazione artificiale. Il codice di allocazione stava tentando di gestirlo, ma in un processo non valido.)

  • Diversi problemi minori mentre si evita l'overflow, l'underflow, la perdita di precisione e altri problemi analoghi della virgola mobile.

  • Le modifiche per l'arrotondamento del layout con un DPI sufficientemente elevato non sono corrette. Il nuovo algoritmo produce risultati che soddisfano i criteri seguenti:

    • La larghezza effettiva assegnata a una colonna * non è mai minore della larghezza minima né maggiore della larghezza massima.
    • A ogni colonna * a cui non è assegnata la larghezza minima o massima è assegnata una larghezza proporzionale al relativo peso *. Per essere precisi, se si dichiara che due colonne hanno rispettivamente una larghezza x* e y* e se nessuna delle colonne riceve la larghezza minima o massima, le larghezze effettive v e w assegnate alle colonne hanno la stessa proporzione: v / w == x / y.
    • La larghezza totale allocata alle colonne * “proporzionali” è uguale allo spazio disponibile dopo l'allocazione alle colonne vincolate (colonne fisse, automatiche e * alle quali viene allocata la rispettiva larghezza minima o massima). Questo valore può essere pari a zero, ad esempio se la somma delle larghezze minime è superiore alla larghezza disponibile della griglia.
    • Tutte queste istruzioni devono essere interpretate in base al layout "ideale". Quando l'arrotondamento del layout è attivo, le larghezze effettive possono differire dalle larghezze ideali per un massimo di un pixel.

Nota

Quanto detto sulle colonne e sulle relative larghezze in questo articolo si applica anche a righe e altezza.

Suggerimento

Per impostazione predefinita, le app che usano versioni di .NET Framework successive alla versione 4.7 visualizzeranno il nuovo algoritmo, mentre le applicazioni che usano .NET Framework 4.6.2 o versioni precedenti visualizzeranno l'algoritmo precedente.

Per ignorare l'impostazione predefinita, usare l'impostazione di configurazione seguente:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>

Con il valore true è possibile selezionare l'algoritmo precedente, mentre false consente di selezionare il nuovo algoritmo.

Nome valore
Scope Secondarie
Versione 4.7
Type Ridestinazione

Stack per input tocco WPF basato sul puntatore

Dettagli

Questa modifica aggiunge la possibilità di attivare uno stack facoltativo per l'input tocco/stilo WPF basato su WM_POINTER. Gli sviluppatori che non attivano in modo esplicito questo supporto non dovrebbero riscontrare alcuna modifica nel comportamento dell'input tocco/stilo WPF. Problemi noti correnti relativi allo stack facoltativo per l'input tocco/stilo basato su WM_POINTER:

  • Nessun supporto per l'input penna in tempo reale.
  • Anche se i plug-in dello stilo e dell'input penna continuano a funzionare, essi vengono elaborati nel thread dell'interfaccia utente, il che può comportare un peggioramento delle prestazioni.
  • Modifiche del comportamento dovute alla promozione da eventi di tocco/stilo agli eventi del mouse
  • La modifica potrebbe avere un comportamento diverso
  • L'opzione Trascina selezione non dà la risposta appropriata per l'input tocco
  • Questa operazione non influisce sull'input dello stilo
  • L'opzione Trascina selezione non può essere avviata per gli eventi di tocco/stilo
  • Questo può potenzialmente arrestare la risposta dell'applicazione fino a quando non viene rilevato l'input del mouse.
  • Gli sviluppatori dovranno quindi avviare l'opzione di trascinamento della selezione dagli eventi del mouse.

Suggerimento

Gli sviluppatori che desiderano abilitare questo stack possono aggiungere o unire quanto segue al file App.config dell'applicazione:

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.EnablePointerSupport=true"/>
</runtime>
</configuration>

Se si rimuove questo elemento o se ne imposta il valore su False si disattiva lo stack facoltativo. Si noti che lo stack è disponibile solo in Windows 10 Creators Update e versioni successive.

Nome valore
Scope Edge
Versione 4.7
Type Ridestinazione

Windows Workflow Foundation (WF)

Checksum del flusso di lavoro modificati da MD5 a SHA1

Dettagli

Per supportare il debug con Visual Studio, il runtime del flusso di lavoro genera un checksum per un'istanza del flusso di lavoro usando un algoritmo hash. In .NET Framework 4.6.2 e versioni precedenti, l'hash del checksum del flusso di lavoro usava l'algoritmo MD5, che causava problemi nei sistemi abilitati per FIPS. A partire da .NET Framework 4.7 l'algoritmo è SHA1. Se il codice ha mantenuto i checksum, questi non saranno compatibili.

Suggerimento

Se il codice non riesce a caricare le istanze del flusso di lavoro a causa di un errore di checksum, provare a impostare lo switch AppContext“Switch.System.Activities.UseMD5ForWFDebugger” su true. Nel codice:

System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true);

O nella configurazione:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
  </runtime>
</configuration>
Nome valore
Scope Secondarie
Versione 4.7
Type Ridestinazione

.NET Framework 4.7.1

ASP.NET

Miglioramenti di accessibilità ASP.NET in .NET Framework 4.7.1

Dettagli

A partire da .NET Framework 4.7.1, in ASP.NET è stato migliorato il funzionamento dei controlli Web ASP.NET con tecnologia di accessibilità in Visual Studio per supportare al meglio i clienti ASP.NET. Sono incluse le modifiche seguenti:

  • Modifiche per implementare criteri di accessibilità dell'interfaccia utente mancanti nei controlli, come la finestra di dialogo Aggiungi campo nella procedura guidata Visualizzazione dettagli o la finestra di dialogo Configura ListView nella procedura guidata ListView.
  • Modifiche per migliorare la visualizzazione nella modalità a contrasto elevato, ad esempio l'Editor campi del pager di dati.
  • Modifiche per migliorare la navigazione tramite tastiera per controlli, come la finestra di dialogo Campi nella procedura guidata Modifica campi del pager del controllo DataPager, la finestra di dialogo Configura ObjectContext o la finestra di dialogo Configura selezione dati della procedura guidata Configura origine dati.

Suggerimento

Come accettare o rifiutare queste modifiche Per poter usufruire di queste modifiche nella finestra di progettazione di Visual Studio, l'applicazione deve essere eseguita in .NET Framework 4.7.1 o versione successiva. L'applicazione Web può trarre vantaggio da queste modifiche in uno dei modi seguenti:

  • Installare Visual Studio 2017 15.3 o versione successiva, che supporta le nuove funzionalità di accessibilità con l'opzione di AppContext seguente per impostazione predefinita.
  • Rifiutare i comportamenti di accessibilità legacy aggiungendo l'Switch.UseLegacyAccessibilityFeaturesopzione di AppContext alla sezione <runtime> del file di configurazione devenv.config e impostandola su false, come illustrato nell'esempio seguente.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
...
<!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false'  -->
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
...
</runtime>
</configuration>

Le applicazioni che usano .NET Framework 4.7.1 o versione successiva e che vogliono mantenere il comportamento di accessibilità legacy possono scegliere di usare le funzionalità di accessibilità legacy impostando in modo esplicito questa opzione di AppContext su true.

Nome valore
Scope Secondarie
Versione 4.7.1
Type Ridestinazione

Memoria centrale

Eccezioni di thread in background SerialPort

Dettagli

I thread in background creati con flussi SerialPort non terminano più il processo quando vengono generate eccezioni del sistema operativo.
Nelle applicazioni destinate a .NET Framework 4.7 e versioni precedenti, un processo viene terminato quando viene generata un'eccezione del sistema operativo in un thread in background creato con un flusso SerialPort.
Nelle applicazioni destinate a .NET Framework 4.7.1 o versioni successive, i thread in background attendono gli eventi del sistema operativo relativi alla porta seriale attiva e possono arrestarsi in modo anomalo in alcuni casi, ad esempio in caso di rimozione improvvisa della porta seriale.

Suggerimento

Per le app destinate a .NET Framework 4.7.1, è possibile rifiutare esplicitamente la gestione delle eccezioni, nel caso non sia opportuna, aggiungendo il codice seguente alla sezione <runtime> del file app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=true" />
</runtime>

Per le app destinate alle versioni precedenti di .NET Framework, ma eseguite in .NET Framework 4.7.1 o versioni successive è possibile acconsentire esplicitamente alla gestione delle eccezioni aggiungendo il codice seguente alla sezione <runtime> del file app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
Nome valore
Scope Secondarie
Versione 4.7.1
Type Ridestinazione

API interessate

ServiceBase non propaga le eccezioni OnStart

Dettagli

In .NET Framework 4.7 e versioni precedenti, le eccezioni generate all'avvio di servizi non vengono propagate al chiamante di ServiceBase.Run.

A partire dalle applicazioni destinate a .NET Framework 4.7.1, il runtime propaga le eccezioni a ServiceBase.Run per i servizi il cui avvio non riesce.

Suggerimento

All'avvio del servizio, se si verifica un'eccezione, tale eccezione verrà propagata. Questo dovrebbe aiutare a diagnosticare casi in cui l'avvio di un servizio non riesce.

Se questo comportamento non è accettabile, è possibile rifiutarlo esplicitamente aggiungendo l'elemento AppContextSwitchOverrides seguente alla sezione runtime del file di configurazione dell'applicazione:

<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=true" />

Se l'applicazione è destinata a una versione precedente alla 4.7.1 ma si vuole avere a disposizione questo comportamento, aggiungere l'elemento AppContextSwitchOverrides seguente alla sezione runtime del file di configurazione dell'applicazione:

<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Nome valore
Scope Secondarie
Versione 4.7.1
Type Ridestinazione

API interessate

Sicurezza

Algoritmi predefiniti SignedXML e SignedXMS modificati in SHA256

Dettagli

In .NET Framework 4.7 e versioni precedenti l'impostazione predefinita per SignedXML e SignedCMS era SHA1 per alcune operazioni. A partire da .NET Framework 4.7.1, per queste operazioni SHA256 è abilitato per impostazione predefinita. Questa modifica è necessaria perché SHA1 non è più considerato sicuro.

Suggerimento

Esistono due nuovi valori di cambio di contesto per controllare se per impostazione predefinita viene usato SHA1 (non sicuro) o SHA256:

  • Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms
  • Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms Per le applicazioni destinate a .NET Framework 4.7.1 e versioni successive, se si preferisce non usare SHA256, è possibile ripristinare il valore predefinito SHA1 aggiungendo la seguente opzione di configurazione alla sezione runtime del file di configurazione dell'app:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />

Per le applicazioni destinate a .NET Framework 4.7.1 e versioni precedenti, è possibile scegliere esplicitamente questa modifica aggiungendo la seguente opzione di configurazione alla sezione runtime del file di configurazione dell'app:

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
Nome valore
Scope Secondarie
Versione 4.7.1
Type Ridestinazione

API interessate

SignedXml.GetPublicKey restituisce RSACng per net462 (o lightup) senza reindirizzamento della modifica

Dettagli

A partire da .NET Framework 4.6.2, il tipo concreto dell'oggetto restituito dal metodo SignedXml.GetPublicKey modificato (senza dettaglio) da un'implementazione CryptoServiceProvider a un'implementazione Cng. Questo avviene perché l'implementazione è stata modificata dall'uso di certificate.PublicKey.Key all'uso dell'oggetto certificate.GetAnyPublicKey interno che inoltra a RSACertificateExtensions.GetRSAPublicKey.

Suggerimento

A partire dalle applicazioni eseguite in .NET Framework 4.7.1 è possibile usare l'implementazione CryptoServiceProvider usata per impostazione predefinita in .NET Framework 4.6.1 e versioni precedenti, aggiungendo la seguente opzione di configurazione alla sezione runtime del file di configurazione dell'applicazione:

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
Nome valore
Scope Edge
Versione 4.6.2
Type Ridestinazione

API interessate

Windows Communication Foundation (WCF)

Accessibilità migliorata per alcuni strumenti di .NET SDK

Dettagli

In .NET Framework SDK 4.7.1 gli strumenti SvcConfigEditor.exe e SvcTraceViewer.exe sono stati migliorati risolvendo vari problemi relativi all'accessibilità. Molti erano problemi di lieve entità, come ad esempio un nome non definito o alcuni pattern dell'automazione interfaccia utente non implementati correttamente. È possibile che molti utenti non si siano accorti di questi valori non corretti. I clienti che usano tipi di assistive technology, ad esempio le utilità per la lettura dello schermo, troveranno invece questi strumenti SDK più accessibili. Queste correzioni modificano sicuramente alcuni comportamenti precedenti, ad esempio l'ordine dello stato attivo della tastiera. Per ottenere tutte le correzioni relative all'accessibilità in questi strumenti, è possibile applicare quanto segue al file app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
Nome valore
Scope Edge
Versione 4.7.1
Type Ridestinazione

WinForms

Miglioramenti di accessibilità nei controlli Windows Form

Dettagli

In Windows Form è stato migliorato il funzionamento con le tecnologie di accessibilità per supportare al meglio i clienti Windows Form. A partire da .NET Framework 4.7.1, i miglioramenti includono le modifiche seguenti:

  • Modifiche per migliorare la visualizzazione durante la modalità a contrasto elevato.
  • Modifiche per migliorare l'esperienza di visualizzazione delle proprietà. I miglioramenti di visualizzazione delle proprietà includono:
  • Migliori spostamenti tramite tastiera tra le varie finestre di selezione a discesa.
  • Riduzione delle tabulazioni non necessarie.
  • Segnalazione migliore dei tipi di controllo.
  • Comportamento migliorato dell'Assistente vocale.
  • Modifiche per implementare pattern di accessibilità dell'interfaccia utente mancanti nei controlli.

Suggerimento

Come accettare o rifiutare esplicitamente queste modifiche Affinché l'applicazione possa usufruire di queste modifiche, è necessario che sia eseguita in .NET Framework 4.7.1 o versione successiva. L'applicazione può trarre vantaggio da queste modifiche in uno dei modi seguenti:

  • Viene ricompilata per usare .NET Framework 4.7.1. Queste modifiche di accessibilità sono abilitate per impostazione predefinita nelle applicazioni Windows Forms che usano .NET Framework 4.7.1 o versione successiva.
  • I comportamenti di accessibilità legacy vengono rifiutati aggiungendo l'opzione di AppContext seguente alla sezione <runtime> del file app.config e impostandola su false, come illustrato nell'esempio seguente.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
  </runtime>
</configuration>

Le applicazioni che usano .NET Framework 4.7.1 o versione successiva e che vogliono mantenere il comportamento di accessibilità legacy possono scegliere di usare le funzionalità di accessibilità legacy impostando in modo esplicito questa opzione di AppContext su true.

Per una panoramica dell'automazione interfaccia utente, vedere Panoramica di automazione interfaccia utente.

Aggiunta del supporto per i pattern e le proprietà dell'automazione interfaccia utente

I client di accessibilità possono usufruire delle nuove funzionalità di accessibilità di Windows Form usando i comuni pattern di chiamata descritti pubblicamente. Questi pattern non sono specifici di Windows Form. Ad esempio, i client di accessibilità possono chiamare il metodo QueryInterface nell'interfaccia IAccessible (MAAS) per ottenere un'interfaccia IServiceProvider. Se questa interfaccia è disponibile, i client possono usare il suo metodo QueryService per richiedere un'interfaccia IAccessibleEx. Per altre informazioni, vedere Using IAccessibleEx from a Client (Uso di IAccessibleEx da un client). A partire da .NET Framework 4.7.1, IServiceProvider e IAccessibleEx (dove applicabile) sono disponibili per gli oggetti di accessibilità Windows Form.

.NET Framework 4.7.1 aggiunge supporto per le proprietà e i pattern dell'automazione interfaccia utente seguenti:

Uso di colori definiti dal sistema operativo nei temi a contrasto elevato

  • I controlli Button e CheckBox con la proprietà FlatStyle impostata sullo stile predefinito FlatStyle.System ora usano i colori definiti dal sistema operativo nel tema a contrasto elevato quando selezionato. In precedenza, i colori di sfondo e testo non erano in contrasto e risultavano di difficile lettura.
  • I controlli Button, CheckBox, RadioButton, Label, LinkLabel, e GroupBox con la proprietà Enabled impostata su false, usavano un colore sfumato per eseguire il rendering del testo nei temi a contrasto elevato. In questo modo il contrasto con lo sfondo risultava minimo. Ora questi controlli usano il colore “Testo disattivato” definito dal sistema operativo. Questa correzione si applica ai controlli con la proprietà FlatStyle impostata su un valore diverso da FlatStyle.System. Il rendering di questi ultimi controlli viene eseguito dal sistema operativo.
  • DataGridView ora esegue il rendering di un rettangolo visibile intorno al contenuto della cella che ha lo stato attivo corrente. In precedenza, non era visibile in alcuni temi a contrasto elevato.
  • I controlli ToolStripMenuItem con la proprietà Enabled impostata su False ora usano il colore “Testo disattivato” definito dal sistema operativo.
  • I controlli ToolStripMenuItem con la proprietà Checked impostata su True ora eseguono il rendering del segno di spunta associato usando un colore di sistema di contrasto. In precedenza, il colore del segno di spunta non era sufficientemente in contrasto e non era visibile in temi a contrasto elevato. NOTA: in Windows 10 sono stati modificati i valori per alcuni colori di sistema a contrasto elevato. Il framework di Windows Form Framework si basa sul framework Win32. Per risultati ottimali, eseguire la versione più recente di Windows e accettare le modifiche del sistema operativo più recenti aggiungendo un file app.manifest in un'applicazione di test e rimuovendo il commento dal codice seguente:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Navigazione tramite tastiera migliorata

  • Quando un controllo ComboBox ha la proprietà DropDownStyle impostata su ComboBoxStyle.DropDownList ed è il primo controllo nell'ordine di tabulazione nel form, ora viene visualizzato un rettangolo di selezione quando il form padre viene aperto tramite la tastiera. Prima di questa modifica, lo stato attivo della tastiera era su questo controllo, ma non veniva eseguito il rendering di un indicatore dello stato attivo.

Supporto migliorato di Assistente vocale

  • Il controllo MonthCalendar ha aggiunto supporto per tipi di assistive technology che facilitano l'accesso al controllo. È inclusa la possibilità per Assistente vocale di leggere il valore del controllo, quando in precedenza non era possibile.

  • Il controllo CheckedListBox ora invia una notifica all'Assistente vocale quando una proprietà CheckBox.CheckState è stata modificata. In precedenza, l'Assistente vocale non riceveva notifiche e di conseguenza gli utenti non venivano informati dell'aggiornamento della proprietà CheckState.

  • Il controllo LinkLabel ha modificato il modo di notificare all'Assistente vocale il testo del controllo. In precedenza, l'Assistente vocale annunciava il testo due volte e leggeva i simboli “&” come testo reale anche se non erano visibili a un utente. Il testo duplicato è stato rimosso dagli annunci dell'Assistente vocale, così come i simboli “&” non necessari.

  • I tipi di controllo DataGridViewCell ora segnalano correttamente lo stato di sola lettura all'Assistente vocale e ad altri tipi di assistive technology.

  • L'Assistente vocale ora legge il menu di sistema delle finestre figlio nelle applicazioni [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md).

  • Assistente vocale ora può leggere i controlli ToolStripMenuItemcon una proprietà ToolStripItem.Enabledimpostata su False. In precedenza, l'Assistente vocale non poteva accedere alle voci di menu disabilitate per leggerne il contenuto.

Nome valore
Scope Major
Versione 4.8
Type Ridestinazione

API interessate

Windows Presentation Foundation (WPF)

Miglioramenti di accessibilità in WPF

Dettagli

Miglioramenti del contrasto elevato

  • Lo stato attivo per il controllo Expander ora è visibile. Nelle versioni precedenti di .NET Framework, non accadeva così.
  • Il testo nei controlli CheckBox e RadioButton selezionati ora è visualizzabile più semplicemente rispetto alle versioni precedenti di .NET Framework.
  • Il bordo di un oggetto ComboBox disabilitato ora è dello stesso colore del testo disabilitato. Nelle versioni precedenti di .NET Framework, non accadeva così.
  • I pulsanti con lo stato attivo e disabilitati ora usano il colore del tema corretto. Nelle versioni precedenti di .NET Framework, non lo usavano.
  • Il pulsante del menu a discesa è ora visibile quando lo stile di un controllo ComboBox è impostato su ToolBar.ComboBoxStyleKey. Nelle versioni precedenti di .NET Framework, non accadeva così.
  • Freccia dell'indicatore di ordinamento in un controllo DataGrid ora usa i colori del tema. Nelle versioni precedenti di .NET Framework, non accadeva così.
  • Lo stile del collegamento ipertestuale predefinito ora diventa il colore del tema corretto al passaggio del mouse. Nelle versioni precedenti di .NET Framework, non accadeva così.
  • Lo stato attivo della tastiera nei pulsanti di opzione ora è visibile. Nelle versioni precedenti di .NET Framework, non accadeva così.
  • La colonna della casella di controllo del controllo DataGrid ora usa i colori previsti per il riscontro dello stato attivo della tastiera. Nelle versioni precedenti di .NET Framework, non accadeva così.
  • Gli oggetti visivi dello stato attivo della tastiera ora sono visibili nei controlli ComboBox e ListBox. Nelle versioni precedenti di .NET Framework, non accadeva così.

Miglioramenti di interazione nell'utilità per la lettura dello schermo

  • I controlli Expander ora sono correttamente annunciati come gruppi (di espansione/compresione) dalle utilità per la lettura dello schermo.
  • I controlli DataGridCell ora sono correttamente annunciati come cella della griglia dati (localizzata) dalle utilità per la lettura dello schermo.
  • Le utilità per la lettura dello schermo ora annunciano il nome di un oggetto ComboBox modificabile.
  • I controlli PasswordBox non sono più annunciati come “nessun elemento visualizzato” dalle utilità per la lettura dello schermo.

Supporto per aree dinamiche

Le utilità per la lettura dello schermo, ad esempio Assistente vocale, aiutano gli utenti a comprendere l'interfaccia utente (UI) di un'applicazione, in genere descrivendo l'elemento dell'interfaccia utente attualmente attivo. Se tuttavia un elemento qualsiasi dell'interfaccia utente viene modificato sullo schermo e non ha lo stato attivo, l'utente potrebbe non riceverne notifica e perdere informazioni importanti. Le aree dinamiche servono a risolvere questo problema. Uno sviluppatore può usarle per informare l'utilità per la lettura dello schermo o qualsiasi altro client UIAutomation di un'importante modifica apportata a un elemento dell'interfaccia utente. L'utilità per la lettura dello schermo può quindi decidere come e quando informare l'utente di questa modifica. La proprietà LiveSetting consente anche all'utilità per la lettura dello schermo di sapere se è importante informare l'utente della modifica apportata all'interfaccia utente.

Suggerimento

Come accettare o rifiutare esplicitamente queste modifiche

Perché l'applicazione possa usufruire di queste modifiche, è necessario che sia eseguita in .NET Framework 4.7.1 o versione successiva. L'applicazione può trarre vantaggio da queste modifiche in uno dei modi seguenti:

  • .NET Framework 4.7.1 di destinazione. Questo è l'approccio consigliato. Queste modifiche di accessibilità sono abilitate per impostazione predefinita nelle applicazioni WPF che usano .NET Framework 4.7.1 o versione successiva.

  • I comportamenti di accessibilità legacy vengono rifiutati esplicitamente aggiungendo l'opzione di AppContext seguente alla sezione <runtime> del file app.config e impostandola su false, come illustrato nell'esempio seguente.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
      </startup>
      <runtime>
        <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false'  -->
        <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
      </runtime>
    </configuration>
    

Le applicazioni che usano .NET Framework 4.7.1 o versione successiva e che vogliono mantenere il comportamento di accessibilità legacy possono scegliere di usare le funzionalità di accessibilità legacy impostando in modo esplicito questa opzione di AppContext su true. Per una panoramica dell'automazione interfaccia utente, vedere Panoramica di automazione interfaccia utente.

Nome valore
Scope Major
Versione 4.7.1
Type Ridestinazione

API interessate

Evento SelectionChanged e proprietà SelectedValue di Selector

Dettagli

A partire da .NET Framework 4.7.1, un Selector aggiorna sempre il valore della relativa proprietà SelectedValue prima di generare l'evento SelectionChanged quando la selezione cambia. In questo modo la proprietà SelectedValue è coerente con le altre proprietà di selezione (SelectedItem e SelectedIndex), che vengono aggiornate prima della generazione dell'evento.

In .NET Framework 4.7 e versioni precedenti, l'aggiornamento di SelectedValue avveniva prima dell'evento nella maggior parte dei casi, ma si verificava dopo l'evento se la modifica della selezione era causata dalla modifica della proprietà SelectedValue.

Suggerimento

Le app destinate a .NET Framework 4.7.1 o versioni successive possono rifiutare esplicitamente questa modifica e usare il comportamento legacy aggiungendo il codice seguente alla sezione <runtime> del file di configurazione dell'applicazione:

<runtime>
<AppContextSwitchOverrides
value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>

Le app destinate a .NET Framework 4.7 o versioni precedenti ma in esecuzione su .NET Framework 4.7.1 o versioni successive possono abilitare il nuovo comportamento aggiungendo la riga seguente alla sezione <runtime> del file di configurazione dell'applicazione:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Nome valore
Scope Secondarie
Versione 4.7.1
Type Ridestinazione

API interessate

Evento TabControl SelectionChanged e proprietà SelectedContent

Dettagli

A partire da .NET Framework 4.7.1, un elemento TabControl aggiorna il valore della proprietà SelectedContent prima di generare l'evento SelectionChanged quando la selezione viene modificata. In .NET Framework 4.7 e versioni precedenti l'aggiornamento a SelectedContent avviene dopo l'evento.

Suggerimento

Le app destinate a .NET Framework 4.7.1 o versioni successive possono rifiutare esplicitamente questa modifica e usare il comportamento legacy aggiungendo il codice seguente alla sezione <runtime> del file di configurazione dell'applicazione:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>

Le app destinate a .NET Framework 4.7 o versioni precedenti ma in esecuzione su .NET Framework 4.7.1 o versioni successive possono abilitare il nuovo comportamento aggiungendo la riga seguente alla sezione <runtime> del file di configurazione dell'applicazione:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Nome valore
Scope Secondarie
Versione 4.7.1
Type Ridestinazione

API interessate

L'algoritmo hash predefinito per WPF PackageDigitalSignatureManager è ora SHA256

Dettagli

System.IO.Packaging.PackageDigitalSignatureManager offre funzionalità per le firme digitali in relazione ai pacchetti WPF. In .NET Framework 4.7 e versioni precedenti, l'algoritmo predefinito (PackageDigitalSignatureManager.DefaultHashAlgorithm) usato per firmare le parti di un pacchetto era SHA1. A causa di problemi di sicurezza recenti con SHA1, questa impostazione predefinita è stata cambiata in SHA256 a partire da .NET Framework 4.7.1. Questa modifica interessa la firma di tutti i pacchetti, inclusi i documenti XPS.

Suggerimento

Uno sviluppatore che vuole usare questa modifica per una versione del framework precedente a .NET Framework 4.7.1 o uno sviluppatore che richiede la funzionalità precedente per il framework .NET Framework 4.7.1 o versione successiva può impostare nel modo appropriato il flag AppContext seguente. Se il valore è true viene usato come algoritmo predefinito SHA1; se è false viene usato SHA256.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
Nome valore
Scope Edge
Versione 4.7.1
Type Ridestinazione

API interessate

Windows Workflow Foundation (WF)

Miglioramenti di accessibilità in Progettazione flussi di lavoro di Windows Workflow Foundation (WF)

Dettagli

Progettazione flussi di lavoro di Windows Workflow Foundation (WF) è stata migliorata per poter usare tecnologie di accessibilità. Questi miglioramenti includono le modifiche seguenti:

  • L'ordine di tabulazione viene modificato da sinistra a destra e dall'alto verso il basso in alcuni controlli:
  • Finestra di inizializzazione della correlazione in cui impostare i dati di correlazione per l'attività InitializeCorrelation
  • Finestra di definizione del contenuto per le attività Receive, Send, SendReply e ReceiveReply
  • Altre funzioni sono disponibili tramite tastiera:
  • Quando vengono modificate le proprietà di un'attività, i gruppi delle proprietà possono essere compressi tramite tastiera la prima volta che hanno lo stato attivo.
  • Le icone di avviso ora sono accessibili dalla tastiera.
  • Il pulsante Altre proprietà nella finestra Proprietà è ora accessibile dalla tastiera.
  • Tramite tastiera gli utenti ora possono accedere agli elementi dell'intestazione nei riquadri Argomenti e Variabili in Progettazione flussi di lavoro.
  • Maggiore visibilità degli elementi con stato attivo, ad esempio quando:
  • Aggiunta di righe alle griglie di dati usate in Progettazione flussi di lavoro e in ActivityDesigner.
  • Tabulazione all'interno dei campi nelle attività ReceiveReply e SendReply.
  • Impostazione di valori predefiniti per variabili o argomenti
  • Le utilità per la lettura dello schermo ora possono riconoscere correttamente:
  • Set di punti di interruzione in Progettazione flussi di lavoro.
  • Attività FlowSwitch<T>, FlowDecision e CorrelationScope.
  • Contenuto dell'attività Receive.
  • Tipo di destinazione per l'attività InvokeMethod.
  • Casella combinata Eccezione e sezione Finally nell'attività TryCatch.
  • Casella combinata Tipo di messaggio, barra di divisione nella finestra Aggiungi inizializzatori di correlazione, finestra Content Definition (Definizione contenuto) e finestra Definizione di CorrelatesOn nelle attività di messaggistica (Receive, Send, SendReply e ReceiveReply).
  • Transizioni della macchina a uno stato e destinazioni delle transazioni.
  • Annotazioni e connettori nelle attività FlowDecision.
  • Menu di scelta rapida per le attività.
  • Editor di valori di proprietà, pulsante Cancella ricerca, pulsanti di ordinamento Per categoria e In ordine alfabetico e finestra di dialogo Editor espressioni nella griglia delle proprietà.
  • Percentuale di zoom in Progettazione flussi di lavoro.
  • Separatore nelle attività Parallel e Pick.
  • Attività InvokeDelegate.
  • Finestra Seleziona tipi per le attività di dizionario (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue> e così via).
  • Finestra Cerca e seleziona un tipo .NET.
  • Navigazioni in Progettazione flussi di lavoro.
  • Gli utenti che usano i temi a contrasto elevato noteranno molti miglioramenti nella visibilità di Progettazione flussi di lavoro e nei relativi controlli, ad esempio rapporti di contrasto più definiti tra gli elementi e caselle di riepilogo più evidenti per gli elementi con lo stato attivo.

Suggerimento

Se Progettazione flussi di lavoro è stata riallocata nell'applicazione, l'applicazione può usufruire dei vantaggi offerti da queste modifiche eseguendo una delle azioni seguenti:

  • Ricompilare l'applicazione per usare .NET Framework 4.7.1. Queste modifiche di accessibilità sono abilitate per impostazione predefinita.
  • Se l'applicazione usa .NET Framework 4.7 o versione precedente, ma viene eseguita in .NET Framework 4.7.1, è possibile rifiutare questi comportamenti di accessibilità legacy aggiungendo l'opzione di AppContext seguente alla sezione <runtime> del file app.config e impostandola su false, come illustrato nell'esempio seguente.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
  </runtime>
</configuration>

Le applicazioni che usano .NET Framework 4.7.1 o versione successiva e che vogliono mantenere il comportamento di accessibilità legacy possono scegliere di usare le funzionalità di accessibilità legacy impostando in modo esplicito questa opzione di AppContext su true.

Nome valore
Scope Secondarie
Versione 4.7.1
Type Ridestinazione

.NET Framework 4.7.2

Memoria centrale

Consentire i caratteri di controllo bidirezionali Unicode negli URI

Dettagli

La specifica Unicode include vari caratteri di controllo speciali, usati per indicare l'orientamento del testo. Nelle versioni precedenti di .NET Framework tali caratteri venivano erroneamente rimossi da tutti gli URI, anche se erano presenti con il formato di codifica con percentuali appropriato. Per una maggior conformità con RFC 3987, ora tali caratteri sono consentiti negli URI. Se vengono rilevati come non codificati in un URI, i caratteri vengono codificati con simboli di percentuale. Se sono già codificati con simboli di percentuale, vengono lasciati invariati.

Suggerimento

Per le applicazioni destinate alle versioni di .NET Framework a partire da 4.7.2 il supporto dei caratteri Unicode bidirezionali è abilitato per impostazione predefinita. Se questa modifica non è opportuna, è possibile disabilitarla aggiungendo l'opzione AppContextSwitchOverrides seguente alla sezione <runtime> del file di configurazione dell'app:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=true" />
</runtime>

Per le applicazioni che sono destinate a versioni precedenti di .NET Framework ma vengono eseguite con versioni a partire da .NET Framework 4.7.2, il supporto per i caratteri Unicode bidirezionali è disabilitato per impostazione predefinita. È possibile abilitarlo aggiungendo l'opzione AppContextSwitchOverrides seguente alla sezione <runtime> del file di configurazione dell'app:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
Nome valore
Scope Secondarie
Versione 4.7.2
Type Ridestinazione

API interessate

DeflateStream usa API native per la decompressione

Dettagli

A partire da .NET Framework 4.7.2 l'implementazione della decompressione nella classe T:System.IO.Compression.DeflateStream è stata modificata e ora usa le API Windows native per impostazione predefinita. In genere questo comporta un miglioramento significativo delle prestazioni. Tutte le applicazioni .NET destinate a .NET Framework 4.7.2 o versioni successive usano l'implementazione nativa. Questa modifica potrebbe causare alcune variazioni di comportamento, tra cui le seguenti:

  • I messaggi di eccezione potrebbero essere diversi. Tuttavia il tipo di eccezione generato rimane invariato.
  • È possibile che alcuni casi speciali, ad esempio il caso in cui la memoria non è sufficiente per completare un'operazione, vengano gestiti in modo diverso.
  • Esistono differenze note per l'analisi dell'intestazione gzip (Nota: è interessata solo GZipStream impostata per la decompressione):
  • Le eccezioni durante l'analisi delle intestazioni non valide possono essere attivate in momenti diversi.
  • L'implementazione nativa impone che i valori di alcuni flag riservati nell'intestazione gzip (ad esempio FLG) vengano impostati in base alla specifica. Ciò può causare un'eccezione nei punti in cui i valori in precedenza non validi venivano ignorati.

Suggerimento

Se la decompressione con API native compromette il comportamento dell'app, è possibile rifiutare esplicitamente questa funzionalità aggiungendo l'opzione Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression alla sezione runtime del file app.config e impostandola su true:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
  </runtime>
</configuration>
Nome valore
Scope Secondarie
Versione 4.7.2
Type Ridestinazione

API interessate

Verificare che System.Uri usi un set di caratteri riservati coerente

Dettagli

In System.Uri, alcuni caratteri codificati con percentuali che in determinati casi apparivano come non codificati ora sono codificati in modo uniforme. Questo si verifica in tutte le proprietà e i metodi che accedono ai componenti path, query, fragment o userinfo dell'URI. Il comportamento viene modificato solo quando entrambe le condizioni seguenti sono vere:

  • L'URI contiene il formato codificato di uno qualsiasi dei caratteri riservati seguenti: :, ', (, ), ! o *.
  • L'URI contiene un carattere non riservato Unicode o codificato. Se entrambe le precedenti condizioni sono vere, i caratteri riservati codificati restano codificati. Nelle versioni di .NET Framework precedenti i caratteri vengono decodificati.

Suggerimento

Per le applicazioni destinate a versioni di .NET Framework a partire dalla 4.7.2, il nuovo comportamento di rimozione della codifica è abilitato per impostazione predefinita. Se questa modifica non è opportuna, è possibile disabilitarla aggiungendo l'opzione AppContextSwitchOverrides seguente alla sezione <runtime> del file di configurazione dell'app:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=true" />
</runtime>

Per le applicazioni che sono destinate a versioni di .NET Framework precedenti ma vengono eseguite con versioni a partire da .NET Framework 4.7.2, il nuovo comportamento di rimozione della codifica è disabilitato per impostazione predefinita. È possibile abilitarlo aggiungendo l'opzione AppContextSwitchOverrides seguente alla sezione <runtime> del file di configurazione dell'app:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
Nome valore
Scope Secondarie
Versione 4.7.2
Type Ridestinazione

API interessate

Resgen rifiuta di caricare il contenuto dal web

Dettagli

I file .resx possono contenere input in formato binario. Se si tenta di usare resgen per caricare un file scaricato da un percorso non attendibile, l'input non verrà caricato per impostazione predefinita.

Suggerimento

Gli utenti resgen che richiedono il caricamento di input in formato binario da percorsi non attendibili possono rimuovere il contrassegno del web dal file di input o applicare l’eccezione di rifiuto. Aggiungere l'impostazione del Registro di sistema seguente per applicare l'eccezione di rifiuto a livello di computer: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"

Nome valore
Scope Edge
Versione 4.7.2
Type Ridestinazione

Le analisi dello stack ottenute quando si usano file PDB portatili ora includono informazioni su file di origine e righe, se richieste

Dettagli

A partire da .NET Framework 4.7.2, le analisi dello stack ottenute quando si usano file PDB portatili includono informazioni su file di origine e righe, se richieste. Nelle versioni precedenti a .NET Framework 4.7.2 le informazioni su file di origine e righe non sono disponibili quando si usano file PDB portatili, anche se richieste in modo esplicito.

Suggerimento

Per le applicazioni destinate a .NET Framework 4.7.2 è possibile rifiutare esplicitamente le informazioni su file di origine e righe quando si usano file PDB portatili, nel caso non siano opportune, aggiungendo il codice seguente alla sezione <runtime> del file app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=true" />
</runtime>

Per le applicazioni destinate alle versioni precedenti di .NET Framework, ma eseguite in .NET Framework 4.7.2 o versioni successive, è possibile acconsentire esplicitamente alle informazioni su file di origine e righe quando si usano file PDB portatili aggiungendo il codice seguente alla sezione <runtime> del file app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
Nome valore
Scope Edge
Versione 4.7.2
Type Ridestinazione

API interessate

WinForms

Miglioramenti di accessibilità nei controlli Windows Form per .NET 4.7.2

Dettagli

In Windows Forms Framework è stato migliorato il funzionamento con le tecnologie di accessibilità per supportare al meglio i clienti Windows Form. Sono incluse le modifiche seguenti:

  • Modifiche per migliorare la visualizzazione durante la modalità a contrasto elevato.
  • Modifiche per migliorare la navigazione tramite tastiera nei controlli DataGridView e MenuStrip.
  • Modifiche all'interazione con l'Assistente vocale.

Suggerimento

Come accettare o rifiutare esplicitamente queste modifiche Affinché l'applicazione possa usufruire di queste modifiche, è necessario che sia eseguita in .NET Framework 4.7.2 o versione successiva. L'applicazione può trarre vantaggio da queste modifiche in uno dei modi seguenti:

  • Viene ricompilata in modo da essere destinata a .NET Framework 4.7.2. Queste modifiche di accessibilità sono abilitate per impostazione predefinita nelle applicazioni Windows Forms che usano .NET Framework 4.7.2 o versione successiva.
  • È destinata a .NET Framework 4.7.1 o versione precedente e rifiuta esplicitamente i comportamenti di accessibilità legacy aggiungendo l'opzione di AppContext seguente alla sezione <runtime> del file app.config e impostandola su false, come illustrato nell'esempio seguente.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
  </runtime>
</configuration>

Si noti che per accettare le funzionalità di accessibilità aggiunte in .NET Framework 4.7.2 è anche necessario accettare le funzionalità di accessibilità di .NET Framework 4.7.1. Le applicazioni che usano .NET Framework 4.7.2 o versione successiva e che vogliono mantenere il comportamento di accessibilità legacy possono scegliere di usare le funzionalità di accessibilità legacy impostando in modo esplicito questa opzione di AppContext su true.

Uso di colori definiti dal sistema operativo nei temi a contrasto elevato

  • La freccia a discesa relativa a ToolStripDropDownButton usa ora i colori definiti dal sistema operativo nel tema Contrasto elevato.
  • I controlli Button, RadioButton e CheckBox con FlatStyle impostata su FlatStyle.Flat o FlatStyle.Popup ora usano i colori definiti dal sistema operativo nel tema a contrasto elevato quando selezionato. In precedenza, i colori di sfondo e testo non erano in contrasto e risultavano di difficile lettura.
  • I controlli contenuti in una classe GroupBox con la proprietà Enabled impostata su false ora usano i colori definiti dal sistema operativo nel tema a contrasto elevato.
  • I controlli ToolStripButton, ToolStripComboBox e ToolStripDropDownButton hanno un maggiore rapporto del contrasto di luminosità nella modalità a contrasto elevato.
  • DataGridViewLinkCell userà per impostazione predefinita i colori definiti del sistema operativo in modalità a contrasto elevato per la proprietà DataGridViewLinkCell.LinkColor. NOTA: in Windows 10 sono stati modificati i valori per alcuni colori di sistema a contrasto elevato. Il framework di Windows Form Framework si basa sul framework Win32. Per risultati ottimali, eseguire la versione più recente di Windows e accettare le modifiche del sistema operativo più recenti aggiungendo un file app.manifest in un'applicazione di test e rimuovendo il commento dal codice seguente:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Supporto migliorato di Assistente vocale

  • L'Assistente vocale ora annuncia il valore della proprietà ToolStripMenuItem.ShortcutKeys mentre annuncia il testo di una classe ToolStripMenuItem.
  • L'Assistente vocale ora indica quando una classe ToolStripMenuItem ha la proprietà Enabled impostata su false.
  • L'Assistente vocale ora offre un commento sullo stato di una casella di controllo quando la proprietà ListView.CheckBoxes è impostata su true.
  • L'ordine di focus nella modalità di analisi dell'Assistente vocale ora rispetta l'ordine degli oggetti visivi dei controlli nella finestra di dialogo di download ClickOnce.

Supporto migliorato per l'accessibilità di DataGridView

Segnali visivi migliorati

  • I controlli RadioButton e CheckBox con una proprietà Text vuota ora visualizzano un indicatore di stato attivo quando ricevono lo stato attivo.

Supporto migliorato per PropertyGrid

Nome valore
Scope Major
Versione 4.7.2
Type Ridestinazione

La proprietà ContextMenuStrip.SourceControl contiene un controllo valido in caso di ToolStripMenuItems annidati

Dettagli

In .NET Framework 4.7.1 e versioni precedenti, la proprietà ContextMenuStrip.SourceControl restituisce erroneamente Null quando l'utente apre il menu da controlli ToolStripMenuItem annidati. In .NET Framework 4.7.2 e versioni successive, la proprietà SourceControl è sempre impostata sul controllo del codice sorgente effettivo.

Suggerimento

Come accettare o rifiutare queste modifiche Affinché un'applicazione possa usufruire di queste modifiche, è necessario che sia eseguita in .NET Framework 4.7.2 o versione successiva. L'applicazione può trarre vantaggio da queste modifiche in uno dei modi seguenti:

  • È destinata a .NET Framework 4.7.2. Questa modifica è abilitata per impostazione predefinita nelle applicazioni Windows Forms che usano .NET Framework 4.7.2 o versione successiva.
  • È destinata a .NET Framework 4.7.1 o versione precedente e rifiuta esplicitamente i comportamenti di accessibilità legacy aggiungendo l'opzione AppContext seguente alla sezione <runtime> del file app.config e impostandola su false, come illustrato nell'esempio seguente.
<runtime>
  <AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>

Le applicazioni destinate a .NET Framework 4.7.2 o versione successiva e che vogliono mantenere il comportamento legacy possono acconsentire esplicitamente all'uso del valore del controllo del codice sorgente legacy impostando in modo esplicito questa opzione AppContext su true.

Nome valore
Scope Edge
Versione 4.7.2
Type Ridestinazione

API interessate

Rilascio di risorse tipo di carattere da parte del metodo PrivateFontCollection.AddFontFile

Dettagli

In .NET Framework 4.7.1 e versioni precedenti, la classe System.Drawing.Text.PrivateFontCollection non rilascia le risorse tipo di carattere GDI+ dopo l'eliminazione di PrivateFontCollection per gli oggetti Font che vengono aggiunti a questa raccolta tramite il metodo AddFontFile(String). In .NET Framework 4.7.2 e versioni successive, Dispose rilascia i tipi di carattere GDI+ aggiunti alla raccolta come file.

Suggerimento

Come accettare o rifiutare queste modifiche Affinché un'applicazione possa usufruire di queste modifiche, è necessario che sia eseguita in .NET Framework 4.7.2 o versione successiva. L'applicazione può trarre vantaggio da queste modifiche in uno dei modi seguenti:

  • Viene ricompilata in modo da essere destinata a .NET Framework 4.7.2. Questa modifica è abilitata per impostazione predefinita nelle applicazioni Windows Forms che usano .NET Framework 4.7.2 o versione successiva.
  • È destinata a .NET Framework 4.7.1 o versione precedente e rifiuta esplicitamente i comportamenti di accessibilità legacy aggiungendo l'opzione AppContext seguente alla sezione <runtime> del file app.config e impostandola su false, come illustrato nell'esempio seguente.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>

Le applicazioni destinate a .NET Framework 4.7.2 o versione successiva che vogliono mantenere il comportamento legacy possono acconsentire esplicitamente a non rilasciare risorse tipo di carattere impostando in modo esplicito questa opzione AppContext su true.

Nome valore
Scope Edge
Versione 4.7.2
Type Ridestinazione

API interessate

Azioni upbutton e downbutton del dominio di Windows Forms ora sincronizzate

Dettagli

In .NET Framework 4.7.1 e versioni precedenti, l'azione DomainUpDown.UpButton() del controllo DomainUpDown viene ignorata se è presente testo del controllo e lo sviluppatore deve usare l'azione DomainUpDown.DownButton() sul controllo prima di usare l'azione DomainUpDown.UpButton(). A partire da .NET Framework 4.7.2 entrambe le azioni DomainUpDown.UpButton() e DomainUpDown.DownButton() funzionano in modo indipendente in questo scenario e rimangono sincronizzate.

Suggerimento

Perché un'applicazione possa usufruire di queste modifiche, è necessario che sia eseguita in .NET Framework 4.7.2 o versione successiva. L'applicazione può trarre vantaggio da queste modifiche in uno dei modi seguenti:

  • Viene ricompilata in modo da essere destinata a .NET Framework 4.7.2. Questa modifica è abilitata per impostazione predefinita nelle applicazioni Windows Forms che usano .NET Framework 4.7.2 o versione successiva.
  • Rifiuta esplicitamente il comportamento di scorrimento legacy aggiungendo l'opzione AppContext seguente alla sezione <runtime> del file app.config e impostandola su false, come illustrato nell'esempio seguente.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
Nome valore
Scope Edge
Versione 4.7.2
Type Ridestinazione

API interessate

Windows Presentation Foundation (WPF)

Stato attivo della tastiera ora consente di spostarsi correttamente su più livelli di hosting di Windows Form/WPF

Dettagli

Si consideri un'applicazione WPF che ospita un controllo Windows Form che a sua volta ospita i controlli WPF. Può accadere che gli utenti non possano uscire dal livello di Windows Form tramite tabulazione se il primo o l'ultimo controllo in tale livello è System.Windows.Forms.Integration.ElementHost di WPF. Questa modifica consente di correggere tale problema. Gli utenti ora possono uscire dal livello di Windows Form tramite tabulazione. Le applicazioni automatiche che si basano su uno stato attivo che non esce mai dal livello di Windows Form potrebbero non funzionare come previsto.

Suggerimento

Uno sviluppatore che vuole usare questa modifica per una versione del framework precedente a .NET 4.7.2 può impostare i flag AppContext seguenti su False per disabilitare la modifica.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false"/>
</runtime>
</configuration>

Le applicazioni WPF devono accettare tutti i miglioramenti di accessibilità precedenti per ottenere i miglioramenti successivi. In altre parole, è necessario impostare entrambe le due opzioni Switch.UseLegacyAccessibilityFeatures e Switch.UseLegacyAccessibilityFeatures.2. Uno sviluppatore che richiede la funzionalità precedente per .NET 4.7.2 o versione successiva può impostare il flag AppContext seguente su True per disabilitare la modifica.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
Nome valore
Scope Edge
Versione 4.7.2
Type Ridestinazione

SHA256 usato come nuovo algoritmo hash predefinito per il compilatore di markup di WPF

Dettagli

MarkupCompiler WPF offre servizi di compilazione per i file di markup XAML. In .NET Framework 4.7.1 e versioni precedenti, l'algoritmo hash predefinito usato per i checksum era SHA1. A causa di problemi di sicurezza recenti con SHA1, questa impostazione predefinita è stata cambiata in SHA256 a partire da .NET Framework 4.7.2. Questa modifica interessa la generazione di tutti i checksum per i file di markup durante la compilazione.

Suggerimento

Uno sviluppatore che ha come destinazione .NET Framework 4.7.2 o versione successiva e vuole ripristinare SHA1 come comportamento hash deve impostare il flag AppContext seguente.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=true"/>
</runtime>
</configuration>

Uno sviluppatore che vuole utilizzare l'hash SHA256 con una versione di .NET Framework precedente alla versione 4.7.2 come destinazione deve impostare il flag AppContext seguente. Si noti che la versione installata di .NET Framework deve corrispondere alla versione 4.7.2 o successiva.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
Nome valore
Scope Trasparente
Versione 4.7.2
Type Ridestinazione

La gestione dell'arresto di AppDomain WPF può ora chiamare Dispatcher.Invoke nella pulizia di eventi deboli

Dettagli

In .NET Framework 4.7.1 e versioni precedenti, WPF crea potenzialmente un System.Windows.Threading.Dispatcher nel thread del finalizzatore .NET durante l'arresto di AppDomain. Questo problema è stato risolto in .NET Framework 4.7.2 e versioni successive, rendendo la pulizia degli eventi deboli riconoscibile con i thread. Per questo motivo, WPF può chiamare Dispatcher.Invoke per completare il processo di pulizia. In alcune applicazioni, questa modifica nella tempistica del finalizzatore può causare eccezioni durante l'arresto di AppDomain o del processo. Questo comportamento si verifica in genere nelle applicazioni che non arrestano correttamente i dispatcher in esecuzione nei thread di lavoro prima dell'arresto del processo o dell'AppDomain. Tali applicazioni devono occuparsi di gestire correttamente la durata dei dispatcher.

Suggerimento

In .NET Framework 4.7.2 e versioni successive, gli sviluppatori possono disabilitare questa correzione per risolvere (ma non eliminare) i problemi di tempistica che possono verificarsi a causa della modifica della pulizia. Per disabilitare la modifica nella pulizia, usare il seguente flag AppContext.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
Nome valore
Scope Edge
Versione 4.7.2
Type Ridestinazione

WPF modifica una chiave primaria quando si visualizzano dati ADO in uno scenario master/dettagli

Dettagli

Si supponga di avere una raccolta ADO di elementi di tipo Order, con una relazione denominata “OrderDetails” che la mette in relazione con una raccolta di elementi di tipo Detail tramite la chiave primaria “OrderID”. Nell'app WPF, è possibile associare un elenco ai dettagli per un ordine specifico:

<ListBox ItemsSource="{Binding Path=OrderDetails}" >

dove DataContext è un Order. WPF ottiene il valore della proprietà OrderDetails, ovvero un insieme D di tutti gli elementi Detail il cui OrderID corrisponde all'oggetto OrderID dell'elemento master. La modifica funzionale si verifica quando si modifica la chiave primaria OrderID dell'elemento master. ADO modifica automaticamente l'OrderID di ognuno dei record interessati nella raccolta dei dettagli, vale a dire quelli copiati nella raccolta D. Cosa accade a D?

  • Comportamento precedente: la raccolta D viene cancellata. L'elemento master non genera una notifica della modifica per la proprietà OrderDetails. L'oggetto ListBox continua a usare la raccolta D, che ora è vuota.
  • Nuovo comportamento: la raccolta D rimane invariata. Ognuno dei relativi elementi genera una notifica della modifica della proprietà OrderID. L'oggetto ListBox continua a usare la raccolta D e visualizza i dettagli con il nuovo OrderID. WPF implementa il nuovo comportamento creando la raccolta D in un modo diverso: chiamando il metodo ADO DataRowView.CreateChildView(DataRelation, Boolean) con l'argomento followParent impostato su true.

Suggerimento

Per ottenere il nuovo comportamento, le app usano l'opzione AppContext.

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Windows.Data.DoNotUseFollowParentWhenBindingToADODataRelation=false"/>
  </runtime>
</configuration>

Per impostazione predefinita, l'opzione è impostata su true (comportamento precedente) per le app destinate a .NET 4.7.1 o versione precedente, e su false (nuovo comportamento) per le app destinate a .NET 4.7.2 o versione successiva.

Nome valore
Scope Secondarie
Versione 4.7.2
Type Ridestinazione

Gli oggetti visivi WPF per RadioButton e CheckBox vengono ora visualizzati correttamente quando i controlli non hanno contenuto

Dettagli

In .NET Framework 4.7.1 e versioni precedenti le classi System.Windows.Controls.CheckBox e System.Windows.Controls.RadioButton di WPF contengono oggetti visivi dello stato attivo incoerenti e non corretti nei temi classico e a contrasto elevato. Questi problemi si verificano se i controlli non hanno impostato un contenuto. La transizione tra i temi può risultare quindi confusa e diventa difficile visualizzare l'oggetto visivo con stato attivo. In .NET Framework 4.7.2 questi oggetti visivi sono più coerenti tra i temi e possono essere visualizzati più facilmente nei temi classico e a contrasto elevato.

Suggerimento

Gli sviluppatori che usano .NET Framework 4.7.2 e vogliono ripristinare il comportamento di .NET 4.7.1 devono impostare il flag AppContext seguente.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true;"/>
</runtime>
</configuration>

Gli sviluppatori che vogliono usare questa modifica e usare al tempo stesso una versione di framework precedente alla versione .NET 4.7.2 devono impostare i flag AppContext seguenti. Si noti che tutti i flag devono essere impostati correttamente ed è necessario installare la versione .NET Framework 4.7.2 o versione successiva. Le applicazioni WPF devono acconsentire esplicitamente a tutti i miglioramenti precedenti in termini di accessibilità per ottenere gli ultimi miglioramenti. A tale scopo, assicurarsi che le due opzioni di AppContext "Switch.UseLegacyAccessibilityFeatures" e "Switch.UseLegacyAccessibilityFeatures.2" siano impostate su False.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
Nome valore
Scope Edge
Versione 4.7.2
Type Ridestinazione

La selezione di testo di TextBox/PasswordBox WPF non rispetta i colori di sistema

Dettagli

In .NET Framework 4.7.1 e versioni precedenti i controlli System.Windows.Controls.TextBox e System.Windows.Controls.PasswordBox WPF eseguono solo il rendering di una selezione di testo a livello di Adorner. In alcuni temi di sistema il testo appare poco chiaro e di difficile lettura. In .NET Framework 4.7.2 e versioni successive gli sviluppatori possono abilitare uno schema di rendering di una selezione che non si basa su Adorner in modo da limitare questo problema.

Suggerimento

Gli sviluppatori che vogliono usare questa modifica devono impostare il flag AppContext seguente in modo appropriato. Per usare questa funzionalità, è necessario installare la versione .NET Framework 4.7.2 o versione successiva. Per abilitare la selezione non basata su Adorner, usare il flag AppContext seguente.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
Nome valore
Scope Edge
Versione 4.7.2
Type Ridestinazione

Windows Workflow Foundation (WF)

Evitare la ricorsione infinita per IWorkflowInstanceManagement.TransactedCancel e IWorkflowInstanceManagement.TransactedTerminate

Dettagli

In alcune circostanze, quando si usa l'API IWorkflowInstanceManagement.TransactedCancel o IWorkflowInstanceManagement.TransactedTerminate per annullare o terminare un'istanza del servizio del flusso di lavoro, nell'istanza del flusso di lavoro può verificarsi un overflow dello stack a causa della ricorsione infinita quando il runtime di Workflow tenta di rendere persistente l'istanza del servizio nell'ambito dell'elaborazione della richiesta. Il problema si verifica se l'istanza del flusso di lavoro si trova in uno stato di attesa del completamento di un'altra richiesta WCF in sospeso a un altro servizio. Le operazioni TransactedCancel e TransactedTerminate creano elementi di lavoro in coda per l'istanza del servizio del flusso di lavoro. Questi elementi di lavoro non vengono eseguiti nell'ambito dell'elaborazione della richiesta TransactedCancel/TransactedTerminate. Poiché l'istanza del servizio del flusso di lavoro è in attesa del completamento dell'altra richiesta WCF in sospeso, l'elemento di lavoro creato rimane in coda. L'operazione TransactedCancel/TransactedTerminate viene completata e il controllo torna al client. Quando la transazione associata all'operazione TransactedCancel/TransactedTerminate tenta di eseguire il commit, è necessario che lo stato dell'istanza del servizio del flusso di lavoro sia persistente. Tuttavia, la presenza di una richiesta WCF in sospeso per l'istanza impedisce al runtime di Workflow di rendere persistente l'istanza del servizio del flusso di lavoro e un ciclo di ricorsione infinito determina l'overflow dello stack. Dal momento che TransactedCancel e TransactedTerminate creano un elemento di lavoro solo in memoria, l'esistenza di una transazione non produce alcun effetto. Il rollback della transazione non rimuove l'elemento di lavoro. Per risolvere questo problema, a partire da .NET Framework 4.7.2, è stato introdotto un elemento AppSetting che può essere aggiunto al file web.config/app.config del servizio del flusso di lavoro che indica a quest'ultimo di ignorare le transazioni per TransactedCancel e TransactedTerminate. Ciò consente il commit della transazione senza attendere che l'istanza del flusso di lavoro sia persistente. L'elemento AppSetting per questa funzionalità è denominato microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate. Il valore true indica che la transazione deve essere ignorata, evitando quindi l'overflow dello stack. Il valore predefinito di AppSetting è false, quindi le istanze del servizio del flusso di lavoro esistenti non sono interessate.

Suggerimento

Se si usa AppFabric o un altro client IWorkflowInstanceManagement e si riscontra un overflow dello stack nell'istanza del servizio del flusso di lavoro quando si tenta di annullare o terminare un'istanza, è possibile aggiungere il codice seguente alla sezione <appSettings> del file web.config/app.config per il servizio del flusso di lavoro:

<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>

Se il problema non si verifica, questa operazione non è necessaria.

Nome valore
Scope Edge
Versione 4.7.2
Type Ridestinazione