Dela via


Körningsändringar för migrering till .NET Framework 4.8.x

I den här artikeln visas de problem med appkompatibilitet som introducerades i .NET Framework 4.8 och 4.8.1.

.NET Framework 4.8

ASP.NET

ASP.NET Åtgärda hanteringen av Kontrollen InputAttributes och LabelAttributes för WebForms

Details

För program som riktar in sig på .NET Framework 4.7.2 och tidigare versioner och CheckBox.InputAttributesCheckBox.LabelAttributes som läggs till programmatiskt i en WebForms-kontroll CheckBox går förlorade efter efteråterställningen. För program som riktar in sig på .NET Framework 4.8 eller senare versioner bevaras de efter återställning.

Förslag

Ange 4.8 eller senare för rätt beteende för att återställa attribut vid efteråterställning targetFrameworkVersion . Till exempel:

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

Om du anger det lägre eller inte alls bevaras det gamla felaktiga beteendet.

Name Värde
Omfång Okänt
Version 4.8
Typ Körmiljö

Berörda API:er

ASP.NET Felaktig hantering av flera delar kan resultera i förlorade formulärdata.

Details

I program som riktar in sig på .NET Framework 4.7.2 och tidigare versioner kan ASP.NET felaktigt parsa gränsvärden för flera delar, vilket resulterar i att formulärdata inte är tillgängliga under körningen av begäranden. Program som riktar in sig på .NET Framework 4.8 eller senare versioner parsar data korrekt, så formulärvärden är tillgängliga under körning av begäran.

Förslag

Från och med program som körs på .NET Framework 4.8, när du riktar in dig på .NET Framework 4.8 eller senare med hjälp av elementet targetFrameworkVersion , ändras standardbeteendet till att ta bort avgränsare. När du riktar in dig på tidigare ramverksversioner eller inte använder targetFrameworkVersionreturneras efterföljande avgränsare för vissa värden.

Det här beteendet kan också styras explicit med en appSetting:

<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling"  value="true"/>
...
</appSettings>
</configuration>
Name Värde
Omfång Okänt
Version 4.8
Typ Körmiljö

Berörda API:er

ASP.NET ValidationContext.MemberName är inte NULL när du använder anpassade DataAnnotations.ValidationAttribute

Details

I .NET Framework 4.7.2 och tidigare versioner returnerar nullegenskapen när du använder en anpassad System.ComponentModel.DataAnnotations.ValidationAttribute.ValidationContext.MemberName I .NET Framework 4.8-versionen före uppdateringen oktober 2019 returneras medlemsnamnet. Från och med .NET Framework Oktober 2019 Förhandsversion av kvalitetsuppslagning för .NET Framework 4.8 returneras null den som standard, men du kan välja att returnera medlemsnamnet i stället.

Förslag

Lägg till följande inställning i filen web.config för egenskapen för att returnera medlemsnamnet i .NET Framework oktober 2019 Förhandsversion av kvalitetsuppslagning för .NET Framework 4.8 och senare versioner:

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

I .NET Framework 4.8-versionen före uppdateringen från oktober 2019 återställer du det tidigare beteendet genom att lägga till detta i web.config-filen och egenskapen returnerar null.

Name Värde
Omfång Okänt
Version 4.8
Typ Körmiljö

Berörda API:er

Kärna

.NET COM marskalkar ByRef Valv Array-parametrar på händelser

Details

I .NET Framework 4.7.2 och tidigare versioner skulle en ByRef Valv Array-parameter på en COM-händelse misslyckas med att konvertera tillbaka till intern kod. Med den här ändringen är Valv Array nu framgångsrikt ordnad.

  • [ x ] Quirked

Förslag

Om byref-Valv Array-parametrar på COM-händelser bryter körningen på rätt sätt kan du inaktivera den här koden genom att lägga till följande konfigurationsväxel i programkonfigurationen:

<appSettings>
  <add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
Name Värde
Omfång Mindre
Version 4.8
Typ Körmiljö

Berörda API:er

Går inte att identifiera via API-analys.

.NET Interop kommer nu att köra QueryInterface för IAgileObject (ett WinRT-gränssnitt)

Details

När du använder en WinRT-händelse med ett .NET-ombud kommer Windows att QI för IAgileObject från och med .NET Framework 4.8. I tidigare versioner av .NET Framework skulle körningen misslyckas med QI och händelsen kunde inte prenumerera.

  • [ x ] Quirked

Förslag

Om du aktiverar körningen av QI för IAgileObject-avbrott kan du inaktivera den här koden genom att ange följande konfiguration.

Metod 1: Miljövariabel

Ange följande miljövariabel: COMPLUS_DisableCCWSupportIAgileObject=1

Den här metoden påverkar alla miljöer som ärver den här miljövariabeln. Detta kan bara vara en enda konsolsession, eller så kan det påverka hela datorn om du anger miljövariabeln globalt. Miljövariabelnamnet är inte skiftlägeskänsligt.

Metod 2: Register

Använd Registereditorn (regedit.exe) och leta upp någon av följande undernycklar:

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

Lägg sedan till följande post:

Namn: DisableCCWSupportIAgileObject Typ: DWORD-värde (32-bitars) (kallas även REG_DWORD) Data: 1

Du kan använda verktyget Windows REG.EXE för att lägga till det här värdet från en kommandorad eller skriptmiljö. Till exempel:

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

I det här fallet HKLM används i stället för HKEY_LOCAL_MACHINE. Använd reg add /? för att se hjälp om den här syntaxen. Registervärdenamnet är inte skiftlägeskänsligt.

Name Värde
Omfång Edge
Version 4.8
Typ Körmiljö

Berörda API:er

Går inte att identifiera via API-analys.

Windows Communication Foundation (WCF)

svcTraceViewer ComboBox högkontraständring

Details

I Microsoft Service Trace Viewer-verktyget visades inte ComboBox-kontroller i rätt färg i vissa teman med hög kontrast. Problemet har åtgärdats i .NET Framework 4.7.2. På grund av .NET Framework SDK:s krav på bakåtkompatibilitet var korrigeringen dock inte synlig för kunderna som standard. .NET 4.8 ytbehandlar den här ändringen genom att lägga till följande AppContext-konfigurationsväxlar till filen svcTraceViewer.exe.config:

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

Förslag

Om du inte vill ändra beteendet med hög kontrast kan du inaktivera det genom att ta bort följande avsnitt från filen svcTraceViewer.exe.config:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Name Värde
Omfång Edge
Version 4.8
Typ Körmiljö

Berörda API:er

Går inte att identifiera via API-analys.

Windows Presentation Foundation (WPF)

Databindningsförbättring för KeyedCollection

Details

Fel användning av IList-indexeraren har åtgärdats Binding när källobjektet deklarerar en anpassad indexerare med samma signatur (till exempel KeyedCollection<int,TItem>).

Förslag

För att ett program som är avsett för en äldre version ska kunna dra nytta av den här ändringen måste det köras på .NET Framework 4.8 eller senare, och det måste välja ändringen genom att lägga till följande AppContext-växel i <runtime> avsnittet i appkonfigurationsfilen och ställa in den på 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>
Name Värde
Omfång Huvudversion
Version 4.8
Typ Körmiljö

Berörda API:er

Går inte att identifiera via API-analys.

Ett problem har åtgärdats när ListBox slutar svara om det innehåller duplicerade värdetyper

Details

Ett problem har åtgärdats där en virtualisering ItemsControl kan sluta svara under rullningen när samlingen Items innehåller duplicerade värdetypade objekt.

Name Värde
Omfång Huvudversion
Version 4.8
Typ Körmiljö

Berörda API:er

Går inte att identifiera via API-analys.

Förbättringar av algoritmen för rymdallokering av rutnätsstjärna-rader

Details

En bugg i algoritmen för allokering av storlekar till har åtgärdats i en Grid som introducerades i .NET Framework 4.7. I vissa fall, till exempel ett rutnät med Height=&quot;Auto&quot; tomma rader, ordnades rader på fel plats, eventuellt utanför rutnätet helt och hållet.

Förslag

För att programmet ska kunna dra nytta av dessa ändringar måste det köras på .NET Framework 4.8 eller senare.

Name Värde
Omfång Huvudversion
Version 4.8
Typ Körmiljö

Berörda API:er

Går inte att identifiera via API-analys.

Details

Korrigerade ett felaktigt resultat av att trycka på en piltangent när fokus ligger på en hyperlänk i ett objekt som inte är det markerade objektet i den överordnade ItemsControl.

Name Värde
Omfång Huvudversion
Version 4.8
Typ Körmiljö

Berörda API:er

Går inte att identifiera via API-analys.

Prestandaförbättring i Automation-träd för gruppering av ItemsControls

Details

Förbättrade prestanda för att återskapa automationsträdet för en ItemsControl, till exempel en ListBox eller DataGrid, där gruppering är aktiverad.

Name Värde
Omfång Huvudversion
Version 4.8
Typ Körmiljö

Berörda API:er

Går inte att identifiera via API-analys.

.NET Framework 4.8.1

Inga problem med appkompatibilitet introducerades i .NET Framework 4.8.1.