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

Questo articolo elenca i problemi di compatibilità delle applicazioni introdotti in .NET Framework 4.8 e 4.8.1.

.NET Framework 4.8

ASP.NET

Gestione delle correzioni ASP.NET di InputAttributes e LabelAttributes per il controllo CheckBox di WebForms

Dettagli

Per le applicazioni destinate a .NET Framework 4.7.2 e versioni precedenti, le proprietà CheckBox.InputAttributes e CheckBox.LabelAttributes aggiunte a livello di codice a un controllo CheckBox di WebForms vengono perse dopo il postback. Per le applicazioni destinate a .NET Framework 4.8 o versioni successive, vengono mantenute dopo il postback.

Suggerimento

Per il comportamento corretto per il ripristino degli attributi durante il postback, impostare targetFrameworkVersion sulla versione 4.8 o successiva. Ad esempio:

<configuration>
<system.web>
<httpRuntime targetFramework="4.8"/>
</system.web>
</configuration>

Se viene impostata una versione precedente o se non viene impostata alcuna versione, viene riprodotto il comportamento errato.

Nome valore
Scope Sconosciuto
Versione 4.8
Type esecuzione

API interessate

La gestione multipart di ASP.NET non corretta può comportare la perdita di dati del modulo.

Dettagli

Nelle applicazioni destinate a .NET Framework 4.7.2 e versioni precedenti, ASP.NET potrebbe analizzare erroneamente i valori limite multipart, causando la mancata disponibilità dei dati del modulo durante l'esecuzione della richiesta. Le applicazioni destinate a .NET Framework 4.8 o versioni successive analizzano i dati multipart correttamente. I dati del modulo sono quindi disponibili durante l'esecuzione della richiesta.

Suggerimento

Nelle applicazioni in esecuzione in .NET Framework a partire dalla versione 4.8 e destinate a .NET Framework 4.8 o versioni successive che usano l'elemento targetFrameworkVersion, il comportamento predefinito cambia al fine di eliminare i delimitatori. Se si usano versioni del framework precedenti o non si usa targetFrameworkVersion, è possibile che vengano restituiti dei delimitatori finali per alcuni valori.

Questo comportamento può anche essere controllato in modo esplicito con appSetting:

<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling"  value="true"/>
...
</appSettings>
</configuration>
Nome valore
Scope Sconosciuto
Versione 4.8
Type esecuzione

API interessate

ValidationContext.MemberName di ASP.NET non è NULL quando si usa l'oggetto DataAnnotations.ValidationAttribute personalizzato

Dettagli

In .NET Framework 4.7.2 e versioni precedenti, quando si usa un oggetto System.ComponentModel.DataAnnotations.ValidationAttribute personalizzato, la proprietà ValidationContext.MemberName restituisce null. In .NET Framework 4.8, la versione precedente all'aggiornamento di ottobre 2019 restituisce il nome del membro. A partire da .NET Framework October 2019 Preview of Quality Rollup per .NET Framework 4.8, viene restituito null per impostazione predefinita, ma è possibile acconsentire esplicitamente a restituire il nome del membro.

Suggerimento

Aggiungere l'impostazione seguente al file web.config per la proprietà per restituire il nome del membro in .NET Framework October 2019 Preview of Quality Rollup per .NET Framework 4.8 e versioni successive:

<configuration>
<appSettings>
...
<add key="aspnet:GetValidationMemberName"  value="true"/>
...
</appSettings>
</configuration>

In .NET Framework 4.8, versione precedente all'aggiornamento di ottobre 2019, l'aggiunta di questa funzionalità al file web.config ripristina il comportamento precedente e la proprietà restituisce null.

Nome valore
Scope Sconosciuto
Versione 4.8
Type esecuzione

API interessate

Memoria centrale

.NET COM esegue correttamente il marshalling dei parametri ByRef SafeArray negli eventi

Dettagli

In .NET Framework 4.7.2 e versioni precedenti, un parametro ByRef SafeArray su un evento COM non sarebbe in grado di eseguire di nuovo il marshalling al codice nativo. Con questa modifica il marshalling di SafeArray viene ora eseguito correttamente.

  • [ x ] Anomalo

Suggerimento

Se la corretta esecuzione del marshalling dei parametri ByRef SafeArray negli eventi COM interrompe l'esecuzione, è possibile disabilitare questo codice aggiungendo l'opzione di configurazione seguente alla configurazione dell'applicazione:

<appSettings>
  <add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
Nome valore
Scope Secondarie
Versione 4.8
Type esecuzione

API interessate

Non rilevabile tramite analisi dell'API.

L'interoperabilità di .NET ora usa QueryInterface per IAgileObject, un'interfaccia WinRT

Dettagli

A partire da .NET Framework 4.8, quando si usa un evento WinRT con un delegato di .NET, Windows usa QI per IAgileObject. Nelle versioni precedenti di .NET Framework il runtime non riusciva a usare QI e non era possibile sottoscrivere l'evento.

  • [ x ] Anomalo

Suggerimento

Se l'abilitazione di QI per IAgileObject interrompe l'esecuzione, è possibile disabilitare questo codice impostando la configurazione seguente.

Metodo 1: Variabile di ambiente

Impostare la variabile di ambiente seguente: COMPLUS_DisableCCWSupportIAgileObject=1

Questo metodo influisce su qualsiasi ambiente che eredita questa variabile di ambiente. Può trattarsi di una singola sessione di console o può riguardare l'intero computer se la variabile di ambiente viene impostata a livello globale. Il nome della variabile di ambiente non fa distinzione tra maiuscole e minuscole.

Metodo 2: Registro di sistema

Usando l'editor del Registro di sistema (regedit.exe), trovare una delle sottochiavi seguenti:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework
  • HKEY_CURRENT_USER\SOFTWARE\Microsoft.NETFramework

Quindi aggiungere la voce seguente:

Name: DisableCCWSupportIAgileObject Type: DWORD (32-bit) value (chiamato anche REG_DWORD) Data: 1

È possibile usare lo strumento Windows REG.EXE per aggiungere questo valore da una riga di comando o da un ambiente di scripting. Ad esempio:

reg add HKLM\SOFTWARE\Microsoft.NETFramework /v DisableCCWSupportIAgileObject /t REG_DWORD /d 1

In questo caso viene usato HKLM invece di HKEY_LOCAL_MACHINE. Usare reg add /? per visualizzare la Guida su questa sintassi. Il nome del valore del registro non supporta la distinzione tra maiuscole e minuscole.

Nome valore
Scope Edge
Versione 4.8
Type esecuzione

API interessate

Non rilevabile tramite analisi dell'API.

Windows Communication Foundation (WCF)

Modifica del contrasto elevato di ComboBox in svcTraceViewer

Dettagli

Nello strumento Visualizzatore di tracce dei servizi Microsoft i controlli ComboBox non venivano visualizzati nel colore corretto in alcuni temi a contrasto elevato. Il problema è stato risolto in .NET Framework 4.7.2. Tuttavia, a causa dei requisiti di compatibilità con le versioni precedenti di .NET Framework SDK, la correzione non risultava visibile ai clienti per impostazione predefinita. .NET 4.8 espone questa modifica aggiungendo le opzioni di configurazione di AppContext seguenti al file svcTraceViewer.exe.config:

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

Suggerimento

Se non si vuole avere la modifica funzionale relativa al contrasto elevato, è possibile disabilitarla rimuovendo la sezione seguente dal file svcTraceViewer.exe.config:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Nome valore
Scope Edge
Versione 4.8
Type esecuzione

API interessate

Non rilevabile tramite analisi dell'API.

Windows Presentation Foundation (WPF)

Miglioramento del data binding per KeyedCollection

Dettagli

Risolto l'uso non corretto dell'indicizzatore IList da parte di Binding quando l'oggetto di origine dichiara un indicizzatore personalizzato con la stessa firma (ad esempio KeyedCollection<int,TItem>).

Suggerimento

Perché un'applicazione che punta a una versione meno recente possa usufruire di questa modifica, è necessario che sia eseguita in .NET Framework 4.8 o versione successiva e che acconsenta esplicitamente alla modifica aggiungendo l'opzione di AppContext seguente alla sezione <runtime> del file di configurazione dell'app e impostandola su false:

<?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.System.Windows.Data.Binding.IListIndexerHidesCustomIndexer=false" />
</runtime>
</configuration>
Nome valore
Scope Major
Versione 4.8
Type esecuzione

API interessate

Non rilevabile tramite analisi dell'API.

È stato risolto un problema in cui ListBox smette di rispondere se contiene tipi di valore duplicati

Dettagli

È stato risolto un problema per cui una virtualizzazione ItemsControl può cessare di rispondere durante lo scorrimento quando la relativa raccolta Items contiene oggetti valori.

Nome valore
Scope Major
Versione 4.8
Type esecuzione

API interessate

Non rilevabile tramite analisi dell'API.

Miglioramenti all'algoritmo di allocazione dello spazio per le righe con ridimensionamento proporzionale (Star) della griglia

Dettagli

È stato corretto un bug nell'algoritmo per l'allocazione delle dimensioni in un elemento Grid introdotto in .NET Framework 4.7. In alcuni casi, ad esempio una griglia con Height=&quot;Auto&quot; contenente righe vuote, le righe venivano disposte nella posizione errata, anche totalmente all'esterno della griglia.

Suggerimento

Perché l'applicazione possa usufruire di queste modifiche, è necessario che sia eseguita in .NET Framework 4.8 o versione successiva.

Nome valore
Scope Major
Versione 4.8
Type esecuzione

API interessate

Non rilevabile tramite analisi dell'API.

Dettagli

È stato risolto il risultato non corretto della pressione di un tasto di direzione quando lo stato attivo si trova su un collegamento ipertestuale all'interno di un elemento che non è l'elemento selezionato dell'oggetto ItemsControlpadre.

Nome valore
Scope Major
Versione 4.8
Type esecuzione

API interessate

Non rilevabile tramite analisi dell'API.

Miglioramento delle prestazioni nell'albero di automazione per il raggruppamento di ItemsControls

Dettagli

Sono state migliorate le prestazioni di ricompilazione dell'albero di automazione di una classe ItemsControl, ad esempio ListBox o DataGrid, in cui è abilitato il raggruppamento.

Nome valore
Scope Major
Versione 4.8
Type esecuzione

API interessate

Non rilevabile tramite analisi dell'API.

.NET Framework 4.8.1

Non sono stati introdotti problemi di compatibilità delle app in .NET Framework 4.8.1.