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 targetFrameworkVersion
returneras 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 null
egenskapen 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="Auto"
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.
Förbättrad tangentbordsnavigering i ListBox med hyperlänkar
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.