Átcélzási változtatások a .NET keretrendszer 4.7.x-re való migrálásához

Ez a cikk felsorolja az alkalmazáskompatibilitási problémákat, amelyeket a .NET-keretrendszer 4.7, 4.7.1és 4.7.2vezettek be.

.NET-keretrendszer 4.7

ASP.NET

A HttpRuntime.AppDomainAppPath nullReferenceException értéket ad

Részletek

A .NET-keretrendszer 4.6.2-ben a futtatókörnyezet T:System.NullReferenceException hibát generál, amikor egy null karaktereket tartalmazó P:System.Web.HttpRuntime.AppDomainAppPath értéket kér le. A .NET-keretrendszer 4.6.1-es és korábbi verzióiban a futtatókörnyezet T:System.ArgumentNullExceptionhibát generál.

Javaslat

A módosításra az alábbiak bármelyikével válaszolhat:

  • Kezelje a T:System.NullReferenceException-t, ha az alkalmazás a .NET-keretrendszeren fut 4.6.2 verzióval.
  • Frissítsen a .NET keretrendszer 4.7-es verziójára, amely visszaállítja az előző viselkedést, és egy T:System.ArgumentNullExceptionkivételt dob.
Név Érték
Hatókör Edge
Verzió 4.6.2
Típus Újracélzás

Érintett API-k

Egyidejű kérések korlátozása munkamenetenként

Részletek

A .NET-keretrendszer 4.6.2-s és korábbi verzióiban ASP.NET ugyanazzal a Munkamenet-azonosítóval hajtja végre a kéréseket, és alapértelmezés szerint ASP.NET mindig a cookie-kon keresztül adja ki a Munkamenet-azonosítót. Ha egy lap megválaszolása hosszú időt vesz igénybe, az jelentősen rontja a kiszolgáló teljesítményét a böngészőben F5 lenyomásával. A javításban hozzáadtunk egy számlálót, amely nyomon követi az üzenetsorba helyezett kéréseket, és leállítja a kéréseket, ha túllépnek egy megadott korlátot. Az alapértelmezett érték 50. Ha eléri a korlátot, a rendszer figyelmeztetést naplóz az eseménynaplóban, és HTTP 500-választ rögzíthet az IIS-naplóban.

Javaslat

A régi viselkedés visszaállításához adja hozzá a következő beállítást a web.config fájlhoz, hogy kikapcsolja az új viselkedést.

<appSettings>
    <add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
Név Érték
Hatókör Edge
Verzió 4.7
Típus Újracélzás

hálózat

A ServicePointManager.SecurityProtocol alapértelmezett értéke SecurityProtocolType.System.Default

Részletek

A .NET-keretrendszer 4.7-et célzó alkalmazásoktól kezdve a ServicePointManager.SecurityProtocol tulajdonság alapértelmezett értéke SecurityProtocolType.SystemDefault. Ez a módosítás lehetővé teszi, hogy az SslStreamen (például FTP, HTTPS és SMTP) alapuló .NET-keretrendszer hálózati API-k az alapértelmezett biztonsági protokollokat örökölje az operációs rendszertől a .NET-keretrendszer által definiált, nem rögzített értékek használata helyett. Az alapértelmezett beállítás az operációs rendszertől és a rendszergazda által végrehajtott egyéni konfigurációtól függően változik. A Windows operációs rendszer minden verziójában az alapértelmezett SChannel protokollról további információt TLS/SSL protokollok (Schannel SSP)című témakörben talál.

A .NET-keretrendszer egy korábbi verzióját megcélzott alkalmazások esetében a ServicePointManager.SecurityProtocol tulajdonság alapértelmezett értéke a megcélzott .NET-keretrendszer verziójától függ. További információért lásd a Hálózatkezelés részt a .NET Framework 4.5.2-esről a 4.6-osra történő migrálás áthelyezési módosításainál.

Javaslat

Ez a változás a .NET-keretrendszer 4.7-et vagy újabb verzióit megcélzott alkalmazásokat érinti. Ha a rendszer alapértelmezett beállítása helyett inkább egy meghatározott protokollt szeretne használni, explicit módon beállíthatja a ServicePointManager.SecurityProtocol tulajdonság értékét. Ha ez a módosítás nem kívánatos, letilthatja azt úgy, hogy hozzáad egy konfigurációs beállítást az alkalmazáskonfigurációs fájl <futtatókörnyezeti> szakaszához. Az alábbi példa a <runtime> szakaszt és a Switch.System.Net.DontEnableSystemDefaultTlsVersions kikapcsolási kapcsolót mutatja be:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
Név Érték
Hatókör Kiskorú
Verzió 4.7
Típus Újracélzás

Érintett API-k

Az SslStream támogatja a TLS-riasztásokat

Részletek

Sikertelen TLS-kézfogás után az első I/O olvasási/írási művelet során egy System.IO.IOException belső kivételt tartalmazó System.ComponentModel.Win32Exception kivétel keletkezik. A System.ComponentModel.Win32Exception.NativeErrorCode kód a System.ComponentModel.Win32Exception-hez a távoli fél TLS-riasztásaként leképezhető a TLS- és SSL-riasztásokhoz tartozó Schannel hibakódokkal. További információért lásd: RFC 2246: 7.2.2 szakasz – Hibaüzenetek.
A .NET-keretrendszer 4.6.2-es és korábbi verzióiban az a viselkedés, hogy az átviteli csatorna (általában TCP-kapcsolat) időtúllépést okoz írás vagy olvasás közben, ha a másik fél nem tudta végrehajtani a kézfogást, és közvetlenül utána elutasította a kapcsolatot.

Javaslat

A hálózati I/O API-kat( például Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32)) hívó alkalmazásoknak IOException vagy System.TimeoutExceptionkell kezelnie.
A TLS-riasztások funkció alapértelmezés szerint engedélyezve van a .NET-keretrendszer 4.7-től kezdve. A .NET-keretrendszer 4.0-tól 4.6.2-től .NET-keretrendszer 4.7-en vagy újabb rendszeren futó verzióit megcélzó alkalmazások a kompatibilitás megőrzése érdekében letiltják a funkciót.
Az alábbi konfigurációs API-val engedélyezheti vagy letilthatja a .NET-keretrendszer 4.6-os és újabb verzióinak szolgáltatását a .NET-keretrendszer 4.7-es vagy újabb verzióiban.

  • Programozott módon: Az alkalmazásnak az első dolognak kell lennie, mivel a ServicePointManager csak egyszer inicializálja:

    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>
    
  • Regiszterkulcs (gépszintű): Állítsa az értéket false-ra a szolgáltatás engedélyezéséhez a .NET-keretrendszer 4.6 és 4.6.2 között.

    Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    - Type: String
    - Value: "true"
    
Név Érték
Hatókör Edge
Verzió 4.7
Típus Újracélzás

Érintett API-k

Biztonság

A CspParameters.ParentWindowHandle mostantól HWND-értéket vár

Részletek

A .NET-keretrendszer 2.0-s verziójában bevezetett ParentWindowHandle érték lehetővé teszi, hogy az alkalmazás regisztráljon egy szülőablak-kezelőértéket, így a kulcs eléréséhez szükséges felhasználói felület (például PIN-kód kérése vagy hozzájárulási párbeszédpanel) modális gyermekként nyílik meg a megadott ablakban. A .NET-keretrendszer 4.7-et célzó alkalmazásoktól kezdve a Windows Forms-alkalmazások a következő kóddal állíthatják be a ParentWindowHandle tulajdonságot:

cspParameters.ParentWindowHandle = form.Handle;

A .NET-keretrendszer korábbi verzióiban az érték várhatóan egy System.IntPtr lesz, amely egy olyan helyet jelöl a memóriában, ahol a HWND érték található. A tulajdonság form.Handle-ra állítása Windows 7 és a korábbi verziók esetében nem volt hatással, de Windows 8 és újabb verziókon az alábbi hibát eredményezi: "System.Security.Cryptography.CryptographicException: A paraméter helytelen."

Javaslat

A .NET-keretrendszer 4.7-es vagy újabb verziójával rendelkező, szülőablak-kapcsolatot regisztrálni kívánó alkalmazásokat javasoljuk, hogy az egyszerűsített űrlapot használják:

cspParameters.ParentWindowHandle = form.Handle;

Azok a felhasználók, akik megállapították, hogy a megfelelő átadandó érték egy memóriahely címe volt, amely a form.Handle értéket tartotta, kikapcsolhatják a viselkedésváltozást az AppContext kapcsoló Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandletruebeállításával:

<runtime>
 <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>

Ezzel szemben azok a felhasználók, akik a .NET-keretrendszer 4.7 futtatókörnyezetének új viselkedését szeretnék beállítani, amikor az alkalmazás betöltődik a régebbi .NET-keretrendszer-verziókban, beállíthatják az AppContext kapcsolót false.

Név Érték
Hatókör Kiskorú
Verzió 4.7
Típus Újracélzás

Érintett API-k

Az SslStream támogatja a TLS-riasztásokat

Részletek

Sikertelen TLS-kézfogás után az első I/O olvasási/írási művelet során egy System.IO.IOException belső kivételt tartalmazó System.ComponentModel.Win32Exception kivétel keletkezik. A System.ComponentModel.Win32Exception.NativeErrorCode kód a System.ComponentModel.Win32Exception-hez a távoli fél TLS-riasztásaként leképezhető a TLS- és SSL-riasztásokhoz tartozó Schannel hibakódokkal. További információért lásd: RFC 2246: 7.2.2 szakasz – Hibaüzenetek.
A .NET-keretrendszer 4.6.2-es és korábbi verzióiban az a viselkedés, hogy az átviteli csatorna (általában TCP-kapcsolat) időtúllépést okoz írás vagy olvasás közben, ha a másik fél nem tudta végrehajtani a kézfogást, és közvetlenül utána elutasította a kapcsolatot.

Javaslat

A hálózati I/O API-kat( például Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32)) hívó alkalmazásoknak IOException vagy System.TimeoutExceptionkell kezelnie.
A TLS-riasztások funkció alapértelmezés szerint engedélyezve van a .NET-keretrendszer 4.7-től kezdve. A .NET-keretrendszer 4.0-tól 4.6.2-től .NET-keretrendszer 4.7-en vagy újabb rendszeren futó verzióit megcélzó alkalmazások a kompatibilitás megőrzése érdekében letiltják a funkciót.
Az alábbi konfigurációs API-val engedélyezheti vagy letilthatja a .NET-keretrendszer 4.6-os és újabb verzióinak szolgáltatását a .NET-keretrendszer 4.7-es vagy újabb verzióiban.

  • Programozott módon: Az alkalmazásnak az első dolognak kell lennie, mivel a ServicePointManager csak egyszer inicializálja:

    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>
    
  • Regiszterkulcs (gépszintű): Állítsa az értéket false-ra a szolgáltatás engedélyezéséhez a .NET-keretrendszer 4.6 és 4.6.2 között.

    Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    - Type: String
    - Value: "true"
    
Név Érték
Hatókör Edge
Verzió 4.7
Típus Újracélzás

Érintett API-k

Windows kommunikációs alaprendszer (WCF)

A vezérlőkarakterek szerializálása a DataContractJsonSerializerrel mostantól kompatibilis az ECMAScript V6 és a V8 használatával

Részletek

A .NET-keretrendszer 4.6.2-s és korábbi verzióiban a System.Runtime.Serialization.Json.DataContractJsonSerializer nem szerializált bizonyos speciális vezérlőkaraktereket, például \b, \f és \t, az ECMAScript V6 és V8 szabványokkal kompatibilis módon. A .NET-keretrendszer 4.7-től kezdődően ezeknek a vezérlőkaraktereknek a szerializálása kompatibilis az ECMAScript V6-tal és a V8-tal.

Javaslat

A .NET-keretrendszer 4.7-et megcélzott alkalmazások esetében ez a funkció alapértelmezés szerint engedélyezve van. Ha ez a viselkedés nem kívánatos, letilthatja ezt a funkciót úgy, hogy hozzáadja a következő sort a app.config vagy web.config fájl <runtime> szakaszához:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
Név Érték
Hatókör Edge
Verzió 4.7
Típus Újracélzás

Érintett API-k

A WCF-üzenetek biztonsága mostantól képes a TLS1.1 és a TLS1.2 használatára

Részletek

A .NET-keretrendszer 4.7-től kezdve az ügyfelek az SSL3.0 és a TLS1.0 mellett tLS1.1-et vagy TLS1.2-t is konfigurálhatnak a WCF-üzenetbiztonságban az alkalmazáskonfigurációs beállításokon keresztül.

Javaslat

A .NET-keretrendszer 4.7-ben alapértelmezés szerint le van tiltva a TLS1.1 és a TLS1.2 támogatása a WCF-üzenetbiztonságban. Az engedélyezéshez adja hozzá a következő sort a app.config vagy web.config fájl <runtime> szakaszához:

<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
Név Érték
Hatókör Edge
Verzió 4.7
Típus Újracélzás

Windows megjelenítési alaprendszer (WPF)

A System.Windows.Input.PenContext.Disable meghívása érintésre alkalmas rendszereken ArgumentException kivételt okozhat.

Részletek

Bizonyos körülmények között előfordulhat, hogy a belső System.Windows.Input.PenContext.Disable metódust érintéssel kompatibilis rendszereken nem kezelt T:System.ArgumentException kivételt dob az újrabelépés miatt.

Javaslat

Ezzel a problémával a .NET-keretrendszer 4.7-ben foglalkozunk. A kivétel elkerülése érdekében frissítsen a .NET-keretrendszer egy verziójára a .NET-keretrendszer 4.7-es verziójától kezdve.

Név Érték
Hatókör Edge
Verzió 4.6.1
Típus Újracélzás

NullReferenceException az ImageSourceConverter.ConvertFrom kivételkezelési kódjában

Részletek

A ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) kivételkezelési kódjának hibája miatt helytelen System.NullReferenceException dobott ki a kívánt kivétel (System.IO.DirectoryNotFoundException vagy System.IO.FileNotFoundException) helyett. Ez a módosítás kijavítja a hibát, így a metódus a megfelelő kivételt eredményezi.

Alapértelmezés szerint a .NET-keretrendszer 4.6.2-es és korábbi verzióit célzó alkalmazások a kompatibilitás érdekében továbbra is kiváltják a System.NullReferenceException-t. A .NET-keretrendszer 4.7-et vagy újabb verzióját megcélzó fejlesztőknek látniuk kell a megfelelő kivételeket.

Javaslat

Fejlesztők, akik vissza szeretnének térni ahhoz, hogy a .NET-keretrendszer 4.7 vagy újabb verzióját célozva System.NullReferenceException-t kapjanak, hozzáadhatják vagy egyesíthetik az alábbiakat az alkalmazásuk App.config fájljához.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
Név Érték
Hatókör Edge
Verzió 4.7
Típus Újracélzás

Érintett API-k

A WPF Grid helykiosztása csillaggal jelölt oszlopok számára

Részletek

A .NET-keretrendszer 4.7-től kezdődően a WPF lecseréli azt az algoritmust, amelyet Grid használ a *-oszlopokhoz való hely lefoglalásához. Ez számos esetben módosítja a *-oszlopokhoz rendelt tényleges szélességet:

  • Ha egy vagy több *-oszlop minimális vagy maximális szélessége felülírja az adott oszlop arányos részesedését. (A minimális szélesség származhat explicit MinWidth deklarációból, vagy az oszlop tartalmából kapott implicit minimumból. A maximális szélesség csak explicit módon határozható meg MaxWidth-deklarációból.)
  • Ha egy vagy több *-oszlop rendkívül nagy *-súlyt deklarál, nagyobb, mint 10^298.
  • Amikor a *-súlyok annyira eltérőek, hogy lebegőpontos instabilitás következik be (túlcsordulás, aluláramlás, pontosságvesztés).
  • Ha az elrendezés kerekítése engedélyezve van, és a hatékony megjelenítési DPI megfelelően magas. Az első két esetben az új algoritmus által előállított szélességek jelentősen eltérhetnek a régi algoritmus által előállított szélességektől; az utolsó esetben a különbség legfeljebb egy vagy két képpont lesz.

Az új algoritmus számos hibát javít ki a régi algoritmusban:

  • Az oszlopok teljes kiosztása meghaladhatja a Rács szélességét. Ez akkor fordulhat elő, ha egy olyan oszlopnak ad helyet, amelynek arányos aránya kisebb, mint a minimális mérete. Az algoritmus lefoglalja a minimális méretet, ami csökkenti a többi oszlop számára rendelkezésre álló helyet. Ha nincs több *-oszlop kiosztásra, a teljes kiosztás túl nagy lesz.

  • A teljes foglalás elmaradhat a rács szélességétől. Ez a kettős probléma az 1. ponttal kapcsolatban, amely akkor merül fel, amikor egy olyan oszlophoz rendelünk erőforrást, amelynek megfelelő részaránya nagyobb, mint a maximális mérete, és nincsenek *-oszlopok a hiány pótlására.

  • Két *-oszlop foglalásokat kaphat, amelyek nem arányosak a *-súlyokkal. Ez az #1/#2 egy enyhébb verziója, amely az A, B és C oszlopra (ebben a sorrendben) való kiosztáskor jön létre, ahol B arányos részesedése megsérti a minimális (vagy maximális) korlátozást. A fentieknek megfelelően ez megváltoztatja a C oszlop számára rendelkezésre álló helyet, amely kevesebb (vagy több) arányos elosztást kap, mint az A.

  • A rendkívül nagy súlyú oszlopok (> 10^298) mind úgy vannak kezelve, mintha 10^298-as súlyúak lennének. Az arányos különbségeket (és a kisebb súlyú oszlopokat) nem tartják tiszteletben.

  • A végtelen súlyú oszlopok kezelése nem megfelelő. (Valójában nem állíthat be súlyt végtelenre, de ez egy mesterséges korlátozás. Az allokációs kód megpróbálta kezelni, de rossz munkát végzett.)

  • Számos kisebb probléma a túlcsordulás, az alulcsordulás, a pontosság elvesztése és a hasonló lebegőpontos problémák elkerülése során.

  • Az elrendezés kerekítésének beállítása nem megfelelő elég magas DPI-nél. Az új algoritmus az alábbi feltételeknek megfelelő eredményeket hoz létre:

    • A *-oszlophoz rendelt tényleges szélesség soha nem kisebb, mint a minimális szélessége, és nem nagyobb a maximális szélességénél.
    • Minden olyan *-oszlophoz, amelyhez nincs beállítva a minimális vagy maximális szélesség, a *-súlyának megfelelő arányos szélességet kap. Pontosabban, ha két oszlop x* és y* szélességű deklarálva van, és ha egyik oszlop sem kapja meg a minimális vagy maximális szélességet, az oszlopokhoz rendelt tényleges szélességek v és w azonos arányban vannak: v / w == x / y.
    • Az "arányos" *-oszlopokhoz rendelt teljes szélesség megegyezik azzal a hellyel, ami megmarad, miután lefoglalják a korlátozott oszlopok számára szükséges helyet (tehát a rögzített, az automatikus és a minimális vagy maximális szélességgel rendelkező *-oszlopok esetén). Ez lehet nulla, például ha a minimális szélességek összege meghaladja a Rács rendelkezésre álló szélességét.
    • Ezeket az állításokat az "ideális" elrendezés tekintetében kell értelmezni. Ha az elrendezés kerekítése folyamatban van, a tényleges szélességek akár egy képponttal is eltérhetnek az ideális szélességektől.

Jegyzet

A cikkben szereplő oszlopokról és szélességekről minden szó a sorokra és a magasságokra is vonatkozik.

Javaslat

Alapértelmezés szerint azok az alkalmazások, amelyek a .NET-keretrendszer 4.7-től kezdődő verzióit célozzák, az új algoritmust, míg a .NET-keretrendszer 4.6.2-s vagy korábbi verzióit célzó alkalmazások a régi algoritmust fogják látni.

Az alapértelmezett beállítás felülbírálásához használja a következő konfigurációs beállítást:

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

Az érték true kiválasztja a régi algoritmust, false kiválasztja az új algoritmust.

Név Érték
Hatókör Kiskorú
Verzió 4.7
Típus Újracélzás

WPF Pointer-Based érintőkészlet (Touch Stack)

Részletek

Ez a módosítás lehetővé teszi egy opcionális WM_POINTER-alapú WPF touch/stylus verem engedélyezését. Azok a fejlesztők, amelyek nem engedélyezik ezt, nem láthatnak változást a WPF érintéses/toll viselkedésében. Az opcionális WM_POINTER érintéses/tollverem aktuális ismert problémái:

  • A valós idejű szabadkézés nem támogatott.
  • Bár a tollal történő rajzolás és a StylusPlugins továbbra is működni fognak, az UI szálon lesznek feldolgozva, ami gyenge teljesítményhez vezethet.
  • A viselkedés megváltozása az érintéses/toll eseményekről az egéreseményekre való áttérés miatt
  • A manipuláció eltérően viselkedhet
  • A húzás/lehúzás nem ad megfelelő visszajelzést az érintéses bemenethez.
  • Ez nem befolyásolja a tollbemenetet
  • Az érintéses vagy tollesemények alapján már nem lehet húzással indítani.
  • Ez azt okozhatja, hogy az alkalmazás nem válaszol, amíg az egér bemenetét nem észleli.
  • Ehelyett a fejlesztőknek az egéreseményekből kellene kezdeményezniük a húzást és ejtést.

Javaslat

Azok a fejlesztők, akik engedélyezni szeretnék ezt a stack-et, hozzáadhatják vagy egyesíthetik az alábbiakat az alkalmazás App.config fájljához.

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

Ha ezt eltávolítja vagy hamis értékre állítja, kikapcsolja ezt az opcionális vermet. Vegye figyelembe, hogy ez a verem csak a Windows 10 Creators Update és újabb verziókban érhető el.

Név Érték
Hatókör Edge
Verzió 4.7
Típus Újracélzás

Windows Workflow Foundation (WF)

A munkafolyamat-ellenőrzőösszegek MD5-ről SHA1-re módosultak

Részletek

A Visual Studio általi hibakereséshez a munkafolyamat-futtatókörnyezet egy ellenőrzőösszeget generál egy munkafolyamat-példányhoz egy kivonatoló algoritmus segítségével. A .NET-keretrendszer 4.6.2-s és korábbi verzióiban a munkafolyamat-ellenőrzőösszeg kivonatolása az MD5 algoritmust használta, ami problémákat okozott a FIPS-kompatibilis rendszereken. A .NET-keretrendszer 4.7-től kezdve az algoritmus SHA1. Ha a kód megőrizte ezeket az ellenőrzőösszegeket, azok nem lesznek kompatibilisek.

Javaslat

Ha a kód ellenőrzőösszeg-hiba miatt nem tudja betölteni a munkafolyamat-példányokat, próbálja meg a AppContext kapcsolót "Switch.System.Activities.UseMD5ForWFDebugger" értékét true-ra állítani. A kódban:

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

Vagy a konfigurációban:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
  </runtime>
</configuration>
Név Érték
Hatókör Kiskorú
Verzió 4.7
Típus Újracélzás

.NET-keretrendszer 4.7.1

ASP.NET

ASP.NET akadálymentességi fejlesztések a .NET-keretrendszer 4.7.1-ben

Részletek

A .NET-keretrendszer 4.7.1-től kezdve a ASP.NET javította, hogy ASP.NET Web Controls hogyan működik a Visual Studióban az akadálymentességi technológiával, hogy jobban támogassa ASP.NET ügyfeleket. Ezek közé tartoznak a következő módosítások:

  • A vezérlőkben hiányzó felhasználói felületi akadálymentességi minták megvalósításához szükséges változtatások, mint például a Részletek nézet varázsló 'Mező hozzáadása' párbeszédpanel vagy a ListView varázsló 'Listanézet konfigurálása' párbeszédpanel.
  • A kontrasztos megjelenítést javító módosítások, például az Adatlapozó mezők szerkesztője.
  • A billentyűzet-navigációs élmény javítása érdekében végrehajtott módosítások a vezérlők, például a DataPager vezérlő Lapozómezők szerkesztése varázslójának Mezők párbeszédpaneljében, az ObjectContext konfigurálása párbeszédpanelben, vagy az Adatforrás konfigurálása varázsló Adatkijelölés konfigurálása párbeszédpaneljében.

Javaslat

Hogyan lehet engedélyezni vagy kivenni ezeket a módosításokat Ahhoz, hogy a Visual Studio Designer kihasználhassa ezeket a módosításokat, a .NET-keretrendszer 4.7.1-s vagy újabb verzióján kell futnia. A webalkalmazás a következő módokon használhatja ezeket a módosításokat:

  • Telepítse a Visual Studio 2017 15.3-at vagy újabb verzióját, amely alapértelmezés szerint az alábbi AppContext Kapcsolóval támogatja az új akadálymentességi funkciókat.
  • Az Switch.UseLegacyAccessibilityFeatures AppContext kapcsoló a devenv.exe.config fájl <runtime> szakaszához való hozzáadásával és falsebeállításával tilthatja le az örökölt akadálymentességi viselkedést, ahogyan az az alábbi példában látható.
<?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>

Azok az alkalmazások, amelyek a .NET-keretrendszer 4.7.1-re vagy újabb verziójára irányulnak, és meg szeretnék őrizni az örökölt akadálymentességi viselkedést, választhatják az örökölt akadálymentességi funkciók használatát, ha explicit módon true-re állítja ezt az AppContext-kapcsolót.

Név Érték
Hatókör Kiskorú
Verzió 4.7.1
Típus Újracélzás

Mag

Soros port háttérszál-kivételek

Részletek

A SerialPort streamekkel létrehozott háttérszálak már nem szüntetik meg a folyamatot az operációsrendszer-kivételek kibocsátásakor.
A .NET-keretrendszer 4.7-et és korábbi verzióit megcélzott alkalmazásokban egy folyamat leáll, amikor operációsrendszer-kivétel keletkezik egy SerialPort-adatfolyammal létrehozott háttérszálon.
A .NET-keretrendszer 4.7.1-es vagy újabb verzióját megcélzott alkalmazásokban a háttérszálak megvárják az aktív soros porthoz kapcsolódó operációsrendszer-eseményeket, és bizonyos esetekben összeomlhatnak, például a soros port hirtelen eltávolítását.

Javaslat

A .NET-keretrendszer 4.7.1-es verziójára vonatkozó alkalmazások esetében letilthatja a kivételkezelést, ha ez nem kívánatos, ha hozzáadja az alábbiakat a <runtime> fájl app.config szakaszához:

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

A .NET-keretrendszer korábbi verzióit célzó, de a .NET-keretrendszer 4.7.1-es vagy újabb verzióján futó alkalmazások esetében a kivételkezelést a következő hozzáadásával engedélyezheti a <runtime> fájl app.config szakaszához:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
Név Érték
Hatókör Kiskorú
Verzió 4.7.1
Típus Újracélzás

Érintett API-k

A ServiceBase nem propagálja az OnStart-kivételeket

Részletek

A .NET-keretrendszer 4.7-ben és korábbi verzióiban a szolgáltatás indításakor felmerülő kivételek nem lesznek továbbítva a ServiceBase.Runhívójának.

A .NET-keretrendszer 4.7.1-et célzó alkalmazások esetén a futtatókörnyezet kivételeket propagál a ServiceBase.Run címre, ha a szolgáltatások nem indulnak el.

Javaslat

A szolgáltatás indításakor, ha van kivétel, a rendszer propagálja a kivételt. Ez segít diagnosztizálni azokat az eseteket, amikor a szolgáltatások nem indulnak el.

Ha ez a viselkedés nem kívánatos, a következő AppContextSwitchOverrides elemet az alkalmazáskonfigurációs fájl runtime szakaszához adva tilthatja le:

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

Ha az alkalmazás a 4.7.1-esnél korábbi verziót célozza, de ezt a viselkedést szeretné használni, adja hozzá az alábbi AppContextSwitchOverrides elemet az alkalmazáskonfigurációs fájl runtime szakaszához:

<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Név Érték
Hatókör Kiskorú
Verzió 4.7.1
Típus Újracélzás

Érintett API-k

Biztonság

Az alapértelmezett SignedXML- és SignedXMS-algoritmusok SHA256-ra változtak

Részletek

A .NET-keretrendszer 4.7-es és korábbi verzióiban a SignedXML és az SignedCMS alapértelmezés szerint SHA1 lesz egyes műveletekhez. A .NET-keretrendszer 4.7.1-től kezdve az SHA256 alapértelmezés szerint engedélyezve van ezekhez a műveletekhez. Ez a módosítás azért szükséges, mert az SHA1 már nem tekinthető biztonságosnak.

Javaslat

Az alapértelmezett SHA1 (nem biztonságos) vagy SHA256 használatát két új kontextuskapcsoló érték szabályozza:

  • Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms (Nem biztonságos hash algoritmusok használata)
  • Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms A .NET-keretrendszer 4.7.1-es és újabb verzióit megcélozó alkalmazások esetében, ha az SHA256 használata nem kívánatos, az alapértelmezett érték sha1-re állítható vissza az alkalmazáskonfigurációs fájl futtatókörnyezet szakaszához a következő konfigurációs kapcsoló hozzáadásával:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />

A .NET-keretrendszer 4.7-es és korábbi verzióit célzó alkalmazások esetében ezt a módosítást az alkalmazáskonfigurációs fájl futtatókörnyezeti szakaszához a következő konfigurációs kapcsoló hozzáadásával engedélyezheti:

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
Név Érték
Hatókör Kiskorú
Verzió 4.7.1
Típus Újracélzás

Érintett API-k

A SignedXml.GetPublicKey az RSACng értéket adja vissza a net462 (vagy lightup) verzióban anélkül, hogy újra kellene célozni a módosításokat.

Részletek

A .NET-keretrendszer 4.6.2-es verziójától kezdve a SignedXml.GetPublicKey metódus által visszaadott objektum konkrét típusa a CryptoServiceProvider-implementációról Cng-implementációra változott anélkül, hogy kiegészítő megoldást igényelt volna. Ennek az az oka, hogy az implementáció a certificate.PublicKey.Key-ról a belső certificate.GetAnyPublicKey-re változott, amely a RSACertificateExtensions.GetRSAPublicKey-re továbbít.

Javaslat

A .NET-keretrendszer 4.7.1-es verzióján futó alkalmazásoktól kezdve a .NET-keretrendszer 4.6.1-es és korábbi verzióiban alapértelmezés szerint használt CryptoServiceProvider-implementációt használhatja az alkalmazáskonfigurációs fájl futtatókörnyezeti szakaszához a következő konfigurációs kapcsoló hozzáadásával:

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
Név Érték
Hatókör Edge
Verzió 4.6.2
Típus Újracélzás

Érintett API-k

Windows kommunikációs alaprendszer (WCF)

Továbbfejlesztett kisegítő lehetőségek néhány .NET SDK-eszközhöz

Részletek

A .NET-keretrendszer SDK 4.7.1-ben a SvcConfigEditor.exe és SvcTraceViewer.exe eszközök a különböző akadálymentességi problémák megoldásával lettek továbbfejlesztve. Ezek többsége kisebb problémák voltak, például egy név nem definiálva, vagy bizonyos felhasználói felületi automatizálási minták nem lettek megfelelően implementálva. Bár sok felhasználó nem ismerné ezeket a helytelen értékeket, az olyan kisegítő technológiákat használó ügyfelek, mint a képernyőolvasók, akadálymentesebbnek fogják találni ezeket az SDK-eszközöket. Ezek a javítások természetesen megváltoztatnak néhány korábbi viselkedést, például a billentyűzetfókusz sorrendjét. Az eszközök összes akadálymentességi javításának lekéréséhez az alábbiakat teheti a app.config fájlhoz:

<runtime>
  <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
Név Érték
Hatókör Edge
Verzió 4.7.1
Típus Újracélzás

Windows Forms

Akadálymentességi fejlesztések a Windows Forms vezérlőiben

Részletek

A Windows Forms fejleszti az akadálymentességi technológiák működését a Windows Forms ügyfeleinek jobb támogatása érdekében. Ezek közé tartoznak a .NET-keretrendszer 4.7.1-től kezdődően a következő módosítások:

  • A nagy kontrasztú módban történő megjelenítés javítása érdekében végzett módosítások.
  • Változások a tulajdonságböngésző felhasználói élményének javítása érdekében. A tulajdonságböngésző fejlesztései a következők:
  • Jobb billentyűzet-navigáció a különböző legördülő menüablakokban.
  • Csökkentettük a felesleges tabulátorhelyek számát.
  • Jobb jelentéskészítés a vezérlőtípusokról.
  • Továbbfejlesztett narrátori viselkedés.
  • A hiányzó felhasználói felületi akadálymentességi minták vezérlőkben való implementálásához szükséges módosítások.

Javaslat

Hogyan lehet engedélyezni vagy kivenni ezeket a módosításokat Ahhoz, hogy az alkalmazás kihasználhassa ezeket a módosításokat, a .NET-keretrendszer 4.7.1-s vagy újabb verzióján kell futnia. Az alkalmazás a következő módokon használhatja ki ezeket a módosításokat:

  • A .NET-keretrendszer 4.7.1-et célozza meg újra. Ezek az akadálymentességi módosítások alapértelmezés szerint engedélyezve vannak a .NET-keretrendszer 4.7.1-et vagy újabb verzióját célzó Windows Forms-alkalmazásokban.
  • A következő AppContext-kapcsoló a app.config fájl <runtime> szakaszához való hozzáadásával és falsebeállításával hagyja ki az örökölt akadálymentességi viselkedést, ahogyan az az alábbi példában is látható.
<?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>

Azok az alkalmazások, amelyek a .NET-keretrendszer 4.7.1-re vagy újabb verziójára irányulnak, és meg szeretnék őrizni az örökölt akadálymentességi viselkedést, választhatják az örökölt akadálymentességi funkciók használatát, ha explicit módon true-re állítja ezt az AppContext-kapcsolót.

A felhasználói felület automatizálásának áttekintéséhez tekintse meg a felhasználói felület automatizálásának áttekintését.

A felhasználói felület automatizálási mintáinak és tulajdonságainak támogatása

Az akadálymentességi ügyfelek általános, nyilvánosan leírt meghívási minták használatával kihasználhatják az új WinForms akadálymentességi funkciókat. Ezek a minták nem WinForms-specifikusak. Az akadálymentességi ügyfelek például meghívhatják a QueryInterface metódust az IAccessible interfészen (MAAS) egy IServiceProvider-felület beszerzéséhez. Ha ez a felület elérhető, az ügyfelek a QueryService metódusával kérhetik le az IAccessibleEx-felületet. További információért lásd: IAccessibleEx használata ügyféloldalról. A .NET-keretrendszer 4.7.1-től kezdve az IServiceProvider és az IAccessibleEx (ahol alkalmazható) elérhetők a WinForms akadálymentességi objektumaihoz.

A .NET Framework 4.7.1 a következő felhasználói felületi automatizálási mintákat és tulajdonságokat támogatja:

Operációs rendszer által definiált színek használata kontrasztos témákban

  • A Button és CheckBox vezérlők a FlatStyle tulajdonságukkal FlatStyle.System( ez az alapértelmezett stílus) mostantól az operációs rendszer által definiált színeket használják a kontrasztos megjelenítési témában, amikor kiválasztják. Korábban a szöveg és a háttérszínek nem voltak kontrasztosak, és nehezen olvashatók voltak.
  • A Button, CheckBox, RadioButton, Label, LinkLabelés GroupBox vezérlők Enabled tulajdonságuk hamis színárnyalatos színnel jelenítik meg a szöveget kontrasztos témákban, ami alacsony kontrasztot eredményez a háttérrel szemben. Ezek a vezérlők most az operációs rendszer által definiált "Letiltott szöveg" színt használják. Ez a javítás azokra a vezérlőkre vonatkozik, amelyek FlatStyle tulajdonsága nem FlatStyle.Systemértékre van beállítva. Az utóbbi vezérlőket az operációs rendszer rendereli.
  • DataGridView mostantól látható téglalapot jelenít meg az aktuális fókuszt tartalmazó cella tartalma körül. Korábban ez nem volt látható bizonyos kontrasztos témákban.
  • ToolStripMenuItem azokon az elemek, amelyek Enabled tulajdonsága hamis, mostantól az operációs rendszer által definiált "Letiltott szöveg" színt használják.
  • ToolStripMenuItem vezérlők, amelyek Checked tulajdonsága igaz értékű, kontrasztos rendszerszínben jelenítik meg a társított pipát. Korábban a pipa színe nem volt elég kontrasztos, és nem volt látható a magas kontrasztú témákban. MEGJEGYZÉS: A Windows 10 néhány kontrasztos rendszerszín esetében módosította az értékeket. A Windows Forms Framework a Win32-keretrendszeren alapul. A legjobb élmény érdekében futtassa a Windows legújabb verzióját, és az app.manifest fájl tesztalkalmazásban való hozzáadásával és a következő kód megjegyzésének megszüntetésével válassza a legújabb operációsrendszer-módosításokat:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Továbbfejlesztett billentyűzet-navigáció

  • Ha egy ComboBox vezérlőelem DropDownStyle tulajdonsága ComboBoxStyle.DropDownList értékre van állítva, és az űrlap tabulátorsorrendjének első vezérlőeleme, a szülőűrlap billentyűzettel való megnyitásakor egy fókusz téglalap jelenik meg. A módosítás előtt a billentyűzet fókusza ezen a vezérlőn volt, de a fókuszjelző nem jelenik meg.

Továbbfejlesztett Narrátor-támogatás

  • A MonthCalendar vezérlő támogatja a kisegítő technológiákat a vezérlőhöz való hozzáféréshez, beleértve azt a képességet is, hogy a Narrátor felolvassa a vezérlő értékét, ha korábban nem tudta.

  • A CheckedListBox vezérlőelem mostantól értesíti a Narrátort egy CheckBox.CheckState tulajdonság módosításáról. Korábban a Narrátor nem kapott értesítést, ezért a felhasználókat nem értesítették arról, hogy a CheckState tulajdonság frissült.

  • A LinkLabel vezérlőelem módosította a narrátor értesítését a vezérlő szövegéről. Korábban a Narrátor kétszer jelentette be ezt a szöveget, és valódi szövegként olvassa fel a "&" szimbólumokat, még akkor is, ha azok nem láthatók a felhasználó számára. A duplikált szöveg el lett távolítva a Narrátor közleményeiből, valamint szükségtelen "&" szimbólumokból.

  • A DataGridViewCell vezérlőtípusok mostantól helyesen jelentik a csak olvasható állapotot a Narrátornak és más kisegítő technológiáknak.

  • A Narrátor most már képes olvasni az alablakok rendszermenüjét a [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md alkalmazásokban.

  • A Narrátor mostantól képes olvasni a ToolStripMenuItem vezérlőket egy ToolStripItem.Enabled tulajdonsággal, amely be van állítva hamisértékre. Korábban a Narrátor nem tudott a letiltott menüelemekre összpontosítani a tartalom elolvasásához.

Név Érték
Hatókör Őrnagy
Verzió 4.8
Típus Újracélzás

Érintett API-k

Windows megjelenítési alaprendszer (WPF)

Akadálymentességi fejlesztések a WPF-ben

Részletek

Kontrasztos megjelenítés fejlesztései

  • Ekkor megjelenik a Expander vezérlőelem fókusza. A .NET-keretrendszer korábbi verzióiban nem.
  • A kijelölt CheckBox és RadioButton vezérlők szövege mostantól könnyebben látható, mint a korábbi .NET-keretrendszer-verziókban.
  • A letiltott ComboBox szegélye mostantól megegyezik a letiltott szöveg színével. A .NET-keretrendszer korábbi verzióiban nem.
  • A letiltott és a fókuszált gombok mostantól a megfelelő témaszínt használják. A .NET-keretrendszer korábbi verzióiban nem.
  • A legördülő gomb ekkor megjelenik, ha egy ComboBox vezérlőelem stílusa ToolBar.ComboBoxStyleKey. A .NET-keretrendszer korábbi verzióiban nem.
  • A DataGrid vezérlőelem rendezési mutatója mostantól témaszíneket használ. A .NET-keretrendszer korábbi verzióiban nem.
  • Az alapértelmezett hivatkozásstílus mostantól a megfelelő színre változik az egérmutatón. A .NET-keretrendszer korábbi verzióiban nem.
  • A billentyűzet fókusza most már látható a választógombokon. A .NET-keretrendszer korábbi verzióiban nem.
  • A DataGrid vezérlőelem jelölőnégyzetoszlopa mostantól a várt színeket használja a billentyűzetfókusz visszajelzéséhez. A .NET-keretrendszer korábbi verzióiban nem.
  • A Billentyűzetfókusz vizualizációk mostantól láthatók ComboBox és ListBox vezérlőkön. A .NET-keretrendszer korábbi verzióiban nem.

Képernyőolvasó interakciós fejlesztései

  • Expander vezérlők mostantól a képernyőolvasók által helyesen csoportokként (kibontás/összecsukás) bejelentve vannak.
  • DataGridCell vezérlőket mostantól helyesen bejelentik adatkocka cellaként (honosítva) a képernyőolvasók.
  • A képernyőolvasók mostantól felolvassák a szerkeszthető ComboBoxnevét.
  • PasswordBox vezérlőket a képernyőolvasók már nem jelentik be úgy, hogy "nincs elem a nézetben".

LiveRegion támogatás

A képernyőolvasók, például a Narrátor, segítenek a felhasználóknak megérteni egy alkalmazás felhasználói felületét (felhasználói felületét), általában a jelenleg fókuszban lévő felhasználói felületi elem leírásával. Ha azonban egy felhasználói felületi elem megváltozik valahol a képernyőn, és nincs rá a fókusz, előfordulhat, hogy a felhasználó nem lesz tájékoztatva, és nem hagyja ki a fontos információkat. A LiveRegions célja a probléma megoldása. A fejlesztő felhasználhatja őket, hogy tájékoztassa a képernyőolvasót vagy bármely más felhasználói felületi Automation- ügyfelet arról, hogy fontos módosítás történt egy felhasználói felületi elemen. A képernyőolvasó ezután eldöntheti, hogyan és mikor tájékoztatja a felhasználót erről a változásról. A LiveSetting tulajdonság azt is tudatja a képernyőolvasóval, hogy mennyire fontos a felhasználói felületen végrehajtott módosításról tájékoztatni a felhasználót.

Javaslat

Hogyan vehetünk részt vagy léphetünk ki ezekből a módosításokból

Ahhoz, hogy az alkalmazás kihasználhassa ezeket a módosításokat, a .NET-keretrendszer 4.7.1-s vagy újabb verzióján kell futnia. Az alkalmazás a következő módokon használhatja ki ezeket a módosításokat:

  • Cél .NET-keretrendszer 4.7.1. Ez az ajánlott megközelítés. Ezek az akadálymentességi módosítások alapértelmezés szerint engedélyezve vannak a .NET-keretrendszer 4.7.1 vagy újabb verzióját célzó WPF-alkalmazásokban.

  • Az alkalmazás az örökölt akadálymentességi viselkedést úgy zárja ki, hogy az alkalmazáskonfigurációs fájl szakaszában hozzáadja az alábbi <runtime>-t, és beállítja false-re, ahogyan azt a következő példa mutatja.

    <?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>
    

Azok az alkalmazások, amelyek a .NET-keretrendszer 4.7.1-s vagy újabb verzióját célozzák, és meg szeretnék őrizni az örökölt akadálymentességi viselkedést, választhatják az örökölt akadálymentességi funkciók használatát, ha ezt az AppContext-kapcsolót kifejezetten trueértékre állítja. A felhasználói felület automatizálásának áttekintése: felhasználói felület automatizálásának áttekintése.

Név Érték
Hatókör Őrnagy
Verzió 4.7.1
Típus Újracélzás

Érintett API-k

Selector SelectionChanged esemény és SelectedValue tulajdonság

Részletek

A .NET-keretrendszer 4.7.1-től kezdve egy Selector mindig frissíti a SelectedValue tulajdonság értékét, mielőtt a kijelölés megváltozásakor megemeli a SelectionChanged eseményt. Így a SelectedValue tulajdonság konzisztenssé válik a többi kijelölési tulajdonsággal (SelectedItem és SelectedIndex), amelyek az esemény növelése előtt frissülnek.

A .NET-keretrendszer 4.7-ben és korábbi verzióiban a SelectedValue frissítése a legtöbb esetben az esemény előtt történt, de az esemény után történt, ha a kijelölés módosítását a SelectedValue tulajdonság módosítása okozta.

Javaslat

A .NET-keretrendszer 4.7.1-es vagy újabb verzióját megcélzott alkalmazások letilthatják ezt a módosítást, és az örökölt viselkedést használhatják az alkalmazáskonfigurációs fájl <runtime> szakaszához való hozzáadásával:

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

Azok az alkalmazások, amelyek a .NET-keretrendszer 4.7.7-es vagy újabb verzióját célozzák, de a .NET-keretrendszer 4.7.1-es vagy újabb verzióján futnak, engedélyezhetik az új viselkedést az alkalmazás .konfigurációs fájljának <runtime> szakaszához a következő sor hozzáadásával:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Név Érték
Hatókör Kiskorú
Verzió 4.7.1
Típus Újracélzás

Érintett API-k

TabControl SelectionChanged esemény és SelectedContent tulajdonság

Részletek

A .NET-keretrendszer 4.7.1-től kezdve egy TabControl frissíti a SelectedContent tulajdonság értékét, mielőtt a SelectionChanged eseményt megemeli, amikor a kijelölés megváltozik. A .NET-keretrendszer 4.7-ben és korábbi verzióiban a SelectedContent frissítése az esemény után történt.

Javaslat

A .NET-keretrendszer 4.7.1-es vagy újabb verzióját megcélzott alkalmazások letilthatják ezt a módosítást, és az örökölt viselkedést használhatják az alkalmazáskonfigurációs fájl <runtime> szakaszához való hozzáadásával:

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

Azok az alkalmazások, amelyek a .NET-keretrendszer 4.7.7-es vagy újabb verzióját célozzák, de a .NET-keretrendszer 4.7.1-es vagy újabb verzióján futnak, engedélyezhetik az új viselkedést az alkalmazás .konfigurációs fájljának <runtime> szakaszához a következő sor hozzáadásával:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Név Érték
Hatókör Kiskorú
Verzió 4.7.1
Típus Újracélzás

Érintett API-k

A WPF PackageDigitalSignatureManager alapértelmezett kivonatoló algoritmusa most SHA256

Részletek

A System.IO.Packaging.PackageDigitalSignatureManager a WPF-csomagokhoz kapcsolódó digitális aláírások funkcióit biztosítja. A .NET-keretrendszer 4.7-ben és korábbi verzióiban a csomag részeinek aláírásához használt alapértelmezett algoritmus (PackageDigitalSignatureManager.DefaultHashAlgorithm) SHA1 volt. Az SHA1 legutóbbi biztonsági problémái miatt ez az alapértelmezett érték SHA256-ra változott a .NET-keretrendszer 4.7.1-től kezdve. Ez a módosítás az összes csomagaláírást érinti, beleértve az XPS-dokumentumokat is.

Javaslat

Az a fejlesztő, aki a .NET-keretrendszer 4.7.1-es vagy újabb verziójának megcélzása közben szeretné használni ezt a módosítást, vagy olyan fejlesztő, aki a .NET-keretrendszer 4.7.1-es vagy újabb verziójának megcélzása során az előző funkciókat igényli, a következő AppContext-jelzőt állíthatja be megfelelően. Az igaz érték azt eredményezi, hogy az SHA1 lesz az alapértelmezett algoritmus; hamis eredmények az SHA256-ban.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
Név Érték
Hatókör Edge
Verzió 4.7.1
Típus Újracélzás

Érintett API-k

Windows Workflow Foundation (WF)

Akadálymentességi fejlesztések a Windows Workflow Foundation (WF) munkafolyamat-tervezőjében

Részletek

A Windows Workflow Foundation (WF) munkafolyamat-tervezője fejleszti az akadálymentességi technológiák működését. Ezek a fejlesztések a következő módosításokat tartalmazzák:

  • Egyes vezérlőkben a tabulátorsor balról jobbra, felülről lefelé változik:
  • A korrelációs ablak inicializálása a InitializeCorrelation tevékenység korrelációs adatainak beállításához
  • A Receive, Send, SendReplyés ReceiveReply tevékenységek tartalomdefiníciós ablaka
  • További funkciók érhetők el a billentyűzeten keresztül.
  • Egy tevékenység tulajdonságainak szerkesztésekor a tulajdonságcsoportok először a billentyűzet segítségével összecsukhatók, amikor rájuk összpontosítunk.
  • A figyelmeztető ikonok mostantól billentyűzettel is elérhetők.
  • A Tulajdonságok ablak További tulajdonságok gombja mostantól billentyűzettel is elérhető.
  • A billentyűzetfelhasználók mostantól hozzáférhetnek a munkafolyamat-tervező Argumentumok és Változók paneljének fejlécelemeihez.
  • A fókuszban lévő elemek jobb láthatósága, például amikor:
  • Sorok hozzáadása a Munkafolyamat-tervező és a tevékenységtervezők által használt adatrácsokhoz.
  • Lapozás a ReceiveReply és SendReply tevékenységek mezői között.
  • Változók vagy argumentumok alapértelmezett értékeinek beállítása
  • A képernyőolvasók mostantól helyesen felismerhetik a következőt:
  • A munkafolyamat-tervezőben beállított töréspontok.
  • A FlowSwitch<T>, FlowDecisionés CorrelationScope tevékenységek.
  • A Receive tevékenység tartalma.
  • A InvokeMethod tevékenység céltípusa.
  • A TryCatch tevékenység "Kivétel" kombinált listája és a "Végül" szakasza.
  • Az Üzenettípus kombinált lista, a Korrelációs inicializálók hozzáadása ablak elválasztója, a Tartalomdefiníció ablak és a CorrelatesOn definíció ablak az üzenetkezelési tevékenységekben (Receive, Send, SendReplyés ReceiveReply).
  • Állapotgép-átmenetek és átmenetek célállomásai.
  • Széljegyzetek és összekötők FlowDecision tevékenységekhez.
  • A környezet (jobb gombbal kattintva) menüi a tevékenységekhez.
  • A tulajdonságérték-szerkesztők, a Keresés törlése gomb, a Kategória és betűrend szerinti rendezés gomb, valamint a Tulajdonságrács Kifejezésszerkesztő párbeszédpanelje.
  • A munkafolyamat-tervező nagyítási aránya.
  • A Parallel és Pick tevékenységek elválasztója.
  • A InvokeDelegate jelzésű tevékenység.
  • A szótár tevékenységeinek típus kiválasztó ablaka (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue>stb.).
  • A Tallózás és a .NET-típus kiválasztása ablak.
  • A Munkafolyamat-tervezőben található morzsák.
  • A kontrasztos témákat választó felhasználók számos fejlesztést láthatnak a Munkafolyamat-tervező és vezérlőinek láthatóságában, például az elemek közötti jobb kontrasztarányt és a fókuszelemekhez használt észrevehetőbb kijelölési mezőket.

Javaslat

Ha egy újra üzemeltetett munkafolyamat-tervezővel rendelkező alkalmazással rendelkezik, az alkalmazás az alábbi műveletek végrehajtásával élvezheti ezeket a módosításokat:

  • Fordítsa újra az alkalmazását a .NET Framework 4.7.1 verziójára való frissítéshez. Ezek az akadálymentességi módosítások alapértelmezés szerint engedélyezve vannak.
  • Ha az alkalmazás a .NET-keretrendszer 4.7-es vagy korábbi verziójára céloz, de a .NET-keretrendszer 4.7.1-es verzióján fut, akkor dönthet úgy, hogy lemond a régi akadálymentességi viselkedésekről, az alábbi AppContext-kapcsoló hozzáadásával a app.config fájl <runtime> szakaszához, és annak falseértékre állításával, ahogyan az alábbi példa is mutatja.
<?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>

Azok az alkalmazások, amelyek a .NET-keretrendszer 4.7.1-re vagy újabb verziójára irányulnak, és meg szeretnék őrizni az örökölt akadálymentességi viselkedést, választhatják az örökölt akadálymentességi funkciók használatát, ha explicit módon true-re állítja ezt az AppContext-kapcsolót.

Név Érték
Hatókör Kiskorú
Verzió 4.7.1
Típus Újracélzás

.NET-keretrendszer 4.7.2

Mag

Unicode kétirányú vezérlőkarakterek engedélyezése URI-kban

Részletek

A Unicode több speciális vezérlőkarakterek segítségével határozza meg a szöveg tájolását. A .NET-keretrendszer korábbi verzióiban ezek a karakterek helytelenül lettek eltávolítva az összes URI-ból, még akkor is, ha százalékban kódolt formájukban voltak jelen. A RFC 3987jobb követése érdekében mostantól engedélyezzük ezeket a karaktereket az URI-kban. Ha egy URI-ban kódolatlannak találjuk őket, azok százalékban vannak kódolva. Amikor százalékban kódolt értékeket talál, azok as-isértékként maradnak.

Javaslat

A .NET-keretrendszer 4.7.2-től kezdődő verzióit célzó alkalmazások esetében alapértelmezés szerint engedélyezve van a Unicode kétirányú karakterek támogatása. Ha ez a módosítás nem kívánatos, letilthatja hozzáadva a következő AppContextSwitchOverrides kapcsolót az alkalmazáskonfigurációs fájl <runtime> szakaszában.

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

A .NET-keretrendszer korábbi verzióit célzó, de .NET-keretrendszer 4.7.2-től kezdődő verziókban futó alkalmazások esetében alapértelmezés szerint a Unicode kétirányú karakterek támogatása le van tiltva. A következő kapcsoló hozzáadásával engedélyezheti: AppContextSwitchOverrides, az alkalmazáskonfigurációs fájl <runtime> szakaszába.

<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
Név Érték
Hatókör Kiskorú
Verzió 4.7.2
Típus Újracélzás

Érintett API-k

A DeflateStream natív API-kat használ a dekompresszióhoz

Részletek

A .NET Framework 4.7.2-től kezdve a dekompresszió implementálása a DeflateStream osztályban alapértelmezés szerint natív Windows API-k használatára módosult. Ez általában jelentős teljesítménybeli javulást eredményez. Az .NET Framework 4.7.2-es vagy újabb verzióját célzó összes .NET alkalmazás a natív implementációt használja. Ez a változás a következő viselkedésbeli különbségeket eredményezheti:

  • A kivételüzenetek eltérőek lehetnek. A kivétel típusa azonban változatlan marad.
  • Bizonyos speciális helyzetek, például a művelet végrehajtásához nem elegendő memória, eltérően kezelhetők.
  • A gzip-fejlécek elemzésekor ismert különbségek vannak (csak akkor, ha GZipStream dekompresszióhoz használják).
  • Az érvénytelen fejlécek elemzésekor a kivételek eltérő időpontokban is megjelenhetnek.
  • A natív implementáció kikényszeríti, hogy a gzip fejlécében található egyes fenntartott jelzők értékei a specifikációnak megfelelően legyenek beállítva, ami miatt kivételt okozhat, ha a korábban érvénytelen értékeket figyelmen kívül hagyták.

Javaslat

Ha a natív API-k miatti dekompresszió rossz hatással volt az alkalmazás viselkedésére, kikapcsolhatja ezt a funkciót azáltal, hogy hozzáadja a Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression kapcsolót a app.config fájl runtime szakaszához, és beállítja azt true:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
  </runtime>
</configuration>
Név Érték
Hatókör Kiskorú
Verzió 4.7.2
Típus Újracélzás

Érintett API-k

Győződjön meg arról, hogy a System.Uri konzisztens fenntartott karakterkészletet használ

Részletek

A System.Uri-ban bizonyos százalékban kódolt karakterek, amelyeket korábban néha dekódoltak, mostantól következetesen kódolva maradnak. Ez az URI elérési útját, lekérdezését, töredékét vagy userinfo-összetevőit elérő tulajdonságok és metódusok között fordul elő. A viselkedés csak akkor változik, ha az alábbiak mindegyike igaz:

  • Az URI a következő fenntartott karakterek kódolt formáját tartalmazza: :, ', (, ), ! vagy *.
  • Az URI Unicode vagy kódolt nem foglalt karaktert tartalmaz. Ha a fentiek mindegyike igaz, a kódolt fenntartott karakterek kódolva maradnak. A .NET-keretrendszer korábbi verzióiban a rendszer dekódolja őket.

Javaslat

A .NET-keretrendszer 4.7.2-től kezdődő verzióit megcélzó alkalmazások esetében alapértelmezés szerint engedélyezve van az új dekódolási viselkedés. Ha ez a módosítás nem kívánatos, letilthatja hozzáadva a következő AppContextSwitchOverrides kapcsolót az alkalmazáskonfigurációs fájl <runtime> szakaszában.

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

A .NET-keretrendszer korábbi verzióit megcélzó, de a .NET-keretrendszer 4.7.2-től kezdve futó alkalmazások esetében alapértelmezés szerint az új dekódolási viselkedés le van tiltva. A következő kapcsoló hozzáadásával engedélyezheti: AppContextSwitchOverrides, az alkalmazáskonfigurációs fájl <runtime> szakaszába.

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
Név Érték
Hatókör Kiskorú
Verzió 4.7.2
Típus Újracélzás

Érintett API-k

Resgen nem hajlandó tartalmat betölteni az internetről

Részletek

A .resx fájlok bináris formátumú bemenetet tartalmazhatnak. Ha resgen használatával próbál betölteni egy nem megbízható helyről letöltött fájlt, alapértelmezés szerint nem fogja betölteni a bemenetet.

Javaslat

Azok a Resgen felhasználók, akik bináris formátumú bemenetet szeretnének betölteni nem megbízható helyekről, eltávolíthatják a webes jelölést a bemeneti fájlból, vagy alkalmazhatják a letiltási megoldást. Adja hozzá a következő beállításjegyzékbeállítást a gép szintű letiltási megoldás alkalmazásához: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"

Név Érték
Hatókör Edge
Verzió 4.7.2
Típus Újracélzás

A hordozható PDF-fájlok használatakor beszerzett stack-nyomkövetések mostantól forrásfájl- és sorinformációkat tartalmaznak, ha szükséges

Részletek

A .NET-keretrendszer 4.7.2-es verziótól kezdve a hordozható PDB-k használatakor kapott veremnyomok tartalmazzák a forrásfájlra és sorszámokra vonatkozó adatokat, amikor szükség van rá. A .NET-keretrendszer 4.7.2-es verzióját megelőző verziókban a forrásfájl és a sor adatai nem lennének elérhetők hordozható PDF-ek használatakor, még akkor is, ha kifejezetten kérik.

Javaslat

A .NET-keretrendszer 4.7.2-es verziójára vonatkozó alkalmazások esetében letilthatja a forrásfájl- és sorinformációkat hordozható PDF-fájlok használatakor, ha ez nem kívánatos, ha hozzáadja az alábbiakat a <runtime> fájl app.config szakaszához:

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

A .NET-keretrendszer korábbi verzióit célzó, de a .NET-keretrendszer 4.7.2-es vagy újabb verzióján futó alkalmazások esetében engedélyezheti a forrásfájl és a sorinformációk elérését, ha hozzáadja a következőket a <runtime> fájl app.config szakaszához, amennyiben hordozható PDB-fájlokat használ:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
Név Érték
Hatókör Edge
Verzió 4.7.2
Típus Újracélzás

Érintett API-k

Windows Forms

Akadálymentességi fejlesztések a .NET 4.7.2-hez készült Windows Forms-vezérlőkben

Részletek

A Windows Forms Framework fejleszti az akadálymentességi technológiák használatát a Windows Forms-ügyfelek jobb támogatása érdekében. Ezek közé tartoznak a következő módosítások:

  • A nagy kontrasztú módban történő megjelenítés javítása érdekében végzett módosítások.
  • A DataGridView és a MenuStrip vezérlőinek billentyűzet-navigációját javító módosítások.
  • A Narrátorsal való interakció változásai.

Javaslat

Hogyan lehet ezeket a módosításokat engedélyezni vagy kivenni Ahhoz, hogy az alkalmazás kihasználhassa ezeket a módosításokat, a .NET-keretrendszer 4.7.2-s vagy újabb verzióján kell futnia. Az alkalmazás a következő módokon használhatja ki ezeket a módosításokat:

  • Újrafordításra került a .NET-keretrendszer 4.7.2-es verziójának megcélzásával. Ezek az akadálymentességi módosítások alapértelmezés szerint engedélyezve vannak a .NET-keretrendszer 4.7.2-s vagy újabb verzióját célzó Windows Forms-alkalmazásokban.
  • A .NET-keretrendszer 4.7.1-es vagy korábbi verzióját célozza meg, és az alábbi AppContext Switch- az alkalmazáskonfigurációs fájl <runtime> szakaszához való hozzáadásával és falsebeállításával hagyja ki az örökölt akadálymentességi viselkedést, ahogy az az alábbi példában is látható.
<?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>

Vegye figyelembe, hogy a .NET-keretrendszer 4.7.2-ben hozzáadott akadálymentességi funkciók mellett a .NET-keretrendszer 4.7.1 akadálymentességi funkcióit is választania kell. Azok az alkalmazások, amelyek a .NET-keretrendszer 4.7.2-s vagy újabb verzióját célozzák, és meg szeretnék őrizni az örökölt akadálymentességi viselkedést, választhatják az örökölt akadálymentességi funkciók használatát azáltal, hogy explicit módon trueértékre állítja ezt az AppContext-kapcsolót.

Operációs rendszer által definiált színek használata kontrasztos témákban

  • A ToolStripDropDownButton legördülő nyíl mostantól az operációs rendszer által definiált színeket használja a Kontrasztos témában.
  • Button, RadioButton és CheckBox vezérlők FlatStyleFlatStyle.Flat vagy FlatStyle.Popup beállítás esetén most az operációs rendszer által meghatározott színeket használják a magas kontrasztú témánál, amikor ki vannak választva. Korábban a szöveg és a háttérszínek nem voltak kontrasztosak, és nehezen olvashatók voltak.
  • A GroupBox azon vezérlői, amelyek Enabled tulajdonsága false van beállítva, mostantól az operációs rendszer által meghatározott színeket fognak használni a Nagy kontrasztú témában.
  • A ToolStripButton, ToolStripComboBoxés ToolStripDropDownButton vezérlők kontrasztaránya magas kontrasztos módban nagyobb.
  • DataGridViewLinkCell alapértelmezés szerint az operációs rendszer által definiált színeket használja kontrasztos módban a DataGridViewLinkCell.LinkColor tulajdonsághoz. MEGJEGYZÉS: A Windows 10 néhány kontrasztos rendszerszín esetében módosította az értékeket. A Windows Forms Framework a Win32-keretrendszeren alapul. A legjobb élmény érdekében futtassa a Windows legújabb verzióját, és az app.manifest fájl tesztalkalmazásban való hozzáadásával és a következő kód megjegyzésének megszüntetésével válassza a legújabb operációsrendszer-módosításokat:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Továbbfejlesztett Narrátor-támogatás

  • A Narrátor ekkor felolvassa a ToolStripMenuItem.ShortcutKeys tulajdonság értékét egy ToolStripMenuItemszövegének bejelentésekor.
  • A Narrátor most azt jelzi, amikor a ToolStripMenuItemEnabled tulajdonsága falsevan beállítva.
  • A Narrátor mostantól visszajelzést ad a jelölőnégyzet állapotáról, ha a ListView.CheckBoxes tulajdonság értéke true.
  • A Narrátor vizsgálati módjának fókuszrendje mostantól megegyezik a ClickOnce letöltési párbeszédpanel vezérlőinek vizualizációs sorrendjével.

Az akadálymentesség támogatásának továbbfejlesztése a DataGridView esetében

Továbbfejlesztett vizuális jelek

  • Az üres RadioButton tulajdonsággal rendelkező CheckBox és Text vezérlők mostantól fókuszjelzőt fognak megjeleníteni, amikor fókuszt kapnak.

Továbbfejlesztett Tulajdonságrács-támogatás

Név Érték
Hatókör Őrnagy
Verzió 4.7.2
Típus Újracélzás

A ContextMenuStrip.SourceControl tulajdonság érvényes vezérlőt tartalmaz beágyazott ToolStripMenuItems esetén

Részletek

A .NET-keretrendszer 4.7.1-ben és az előző verziókban a ContextMenuStrip.SourceControl tulajdonság helytelenül null értéket ad vissza, amikor a felhasználó megnyitja a menüt a beágyazott ToolStripMenuItem vezérlőkből. A .NET-keretrendszer 4.7.2-s és újabb verzióiban SourceControl tulajdonság mindig a tényleges forrásvezérlőre van állítva.

Javaslat

Hogyan lehet engedélyezni vagy kivenni ezeket a módosításokat Ahhoz, hogy egy alkalmazás kihasználhassa ezeket a módosításokat, a .NET-keretrendszer 4.7.2-s vagy újabb verzióján kell futnia. Az alkalmazás a következő módokon használhatja ki ezeket a módosításokat:

  • A .NET-keretrendszer 4.7.2-et célozza meg. Ez a módosítás alapértelmezés szerint engedélyezve van a .NET-keretrendszer 4.7.2-s vagy újabb verzióját célzó Windows Forms-alkalmazásokban.
  • A .NET-keretrendszer 4.7.1-es vagy korábbi verzióját célozza meg, és az alábbi AppContext Switch beállítással a app.config fájl <runtime> szakaszában az falseértékre állítja, ahogy az alábbi példa mutatja.
<runtime>
  <AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>

Azok az alkalmazások, amelyek a .NET-keretrendszer 4.7.2-s vagy újabb verzióját célozzák meg, és meg szeretnék őrizni az örökölt viselkedést, választhatják az örökölt forrásvezérlési érték használatát úgy, hogy az AppContext kapcsolót kifejezetten trueértékre állítják.

Név Érték
Hatókör Edge
Verzió 4.7.2
Típus Újracélzás

Érintett API-k

A PrivateFontCollection.AddFontFile metódus kiadásra bocsátja a Betűtípus-erőforrásokat

Részletek

A .NET-keretrendszer 4.7.1-es és korábbi verzióiban a System.Drawing.Text.PrivateFontCollection osztály nem szabadítja fel a GDI+ betűtípus-erőforrásokat, miután a PrivateFontCollection törlésre kerül azoknál a Font objektumoknál, amelyek a AddFontFile(String) metódussal lettek hozzáadva a gyűjteményhez. A .NET-keretrendszer 4.7.2-es és újabb verzióiban Dispose a gyűjteményhez fájlként hozzáadott GDI+ betűtípusokat adja ki.

Javaslat

Hogyan lehet engedélyezni vagy kivenni ezeket a módosításokat Ahhoz, hogy egy alkalmazás kihasználhassa ezeket a módosításokat, a .NET-keretrendszer 4.7.2-s vagy újabb verzióján kell futnia. Az alkalmazás a következő módokon használhatja ki ezeket a módosításokat:

  • Újrafordításra került a .NET-keretrendszer 4.7.2-es verziójának megcélzásával. Ez a módosítás alapértelmezés szerint engedélyezve van a .NET-keretrendszer 4.7.2-s vagy újabb verzióját célzó Windows Forms-alkalmazásokban.
  • A .NET-keretrendszer 4.7.1-es vagy korábbi verzióját célozza meg, és az alábbi AppContext Switch beállítással a app.config fájl <runtime> szakaszában az falseértékre állítja, ahogy az alábbi példa mutatja.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>

Azok az alkalmazások, amelyek a .NET-keretrendszer 4.7.2-es vagy újabb verzióját célozzák, és meg szeretnék őrizni az örökölt viselkedést, dönthetnek úgy, hogy nem adnak ki betűtípus-erőforrásokat, ha explicit módon trueértékre állítja ezt az AppContext-kapcsolót.

Név Érték
Hatókör Edge
Verzió 4.7.2
Típus Újracélzás

Érintett API-k

A WinForm tartomány-fel- és lebuttonműveletei jelenleg szinkronban vannak

Részletek

A .NET-keretrendszer 4.7.1-ben és az előző verziókban a DomainUpDown vezérlő DomainUpDown.UpButton() művelete figyelmen kívül lesz hagyva a vezérlő szövegének használatakor, és a fejlesztőnek DomainUpDown.DownButton() művelet használata előtt DomainUpDown.UpButton() műveletet kell használnia a vezérlőn. A .NET-keretrendszer 4.7.2-től kezdve a DomainUpDown.UpButton() és DomainUpDown.DownButton() műveletek is egymástól függetlenül működnek ebben a forgatókönyvben, és szinkronban maradnak.

Javaslat

Ahhoz, hogy egy alkalmazás kihasználhassa ezeket a módosításokat, a .NET-keretrendszer 4.7.2-s vagy újabb verzióján kell futnia. Az alkalmazás a következő módokon használhatja ki ezeket a módosításokat:

  • Újrafordításra került a .NET-keretrendszer 4.7.2-es verziójának megcélzásával. Ez a módosítás alapértelmezés szerint engedélyezve van a .NET-keretrendszer 4.7.2-s vagy újabb verzióját célzó Windows Forms-alkalmazásokban.
  • Az alábbi példa szerint a következő AppContext Switch hozzáadásával az alkalmazáskonfigurációs fájl <runtime> szakaszához, és annak falseértékre állításával kiiktatja a régi görgetési viselkedést.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
Név Érték
Hatókör Edge
Verzió 4.7.2
Típus Újracélzás

Érintett API-k

Windows megjelenítési alaprendszer (WPF)

A billentyűzet fókusza mostantól megfelelően mozog a WinForms/WPF-üzemeltetés több rétegében

Részletek

Fontolja meg egy WinForms-vezérlőt üzemeltető WPF-alkalmazást, amely viszont WPF-vezérlőket üzemeltet. Előfordulhat, hogy a felhasználók nem tudnak lefülelni a WinForms-rétegből, ha a réteg első vagy utolsó vezérlője a WPF System.Windows.Forms.Integration.ElementHost. Ez a módosítás kijavítja ezt a problémát, és a felhasználók mostantól ki tudnak lépkedni a WinForms-rétegből. Az automatikus alkalmazások, amelyek a fókuszra támaszkodnak, soha nem kerülik el a WinForms-réteget, előfordulhat, hogy a továbbiakban nem a várt módon működnek.

Javaslat

Azok a fejlesztők, akik ezt a módosítást a .NET 4.7.2 alatti keretrendszerverzióra szeretnék használni, az alábbi AppContext-jelölőket hamis értékre állíthatják a módosítás engedélyezéséhez.

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

A WPF-alkalmazásoknak be kell kapcsolniuk minden korai akadálymentességi fejlesztést, hogy megkapják a későbbi fejlesztéseket. Más szóval mind a Switch.UseLegacyAccessibilityFeatures, mind a Switch.UseLegacyAccessibilityFeatures.2 kapcsolóknak be vannak állítva. Azoknak a fejlesztőknek, akik a .NET 4.7.2 vagy újabb verzióját célozzák meg, és az előző funkciókat igénylik, a következő AppContext-jelzőt igaz értékre kell állítaniuk a módosítás letiltásához.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
Név Érték
Hatókör Edge
Verzió 4.7.2
Típus Újracélzás

A WPF Markup Compiler alapértelmezett kivonatoló algoritmusa most SHA256

Részletek

A WPF MarkupCompiler fordítási szolgáltatásokat biztosít az XAML-korrektúrafájlokhoz. A .NET-keretrendszer 4.7.1-s és korábbi verzióiban az ellenőrzőösszegekhez használt alapértelmezett kivonatoló algoritmus az SHA1 volt. Az SHA1 legutóbbi biztonsági problémái miatt ez az alapértelmezett érték SHA256-ra módosult a .NET-keretrendszer 4.7.2-től kezdve. Ez a módosítás a korrektúrafájlok összes ellenőrzőösszegének létrehozását érinti a fordítás során.

Javaslat

Azoknak a fejlesztőknek, akik a .NET-keretrendszer 4.7.2-s vagy újabb verziójára céloznak, és sha1 kivonatolási viselkedésre szeretnének visszaállni, a következő AppContext-jelölőt kell beállítaniuk.

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

Azoknak a fejlesztőknek, akik sha256-kivonatolást szeretnének használni a .NET 4.7.2 alatti keretrendszerverzió megcélzása közben, be kell állítaniuk az alábbi AppContext jelzőt. Vegye figyelembe, hogy a .NET-keretrendszer telepített verziójának 4.7.2-es vagy újabb verziónak kell lennie.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
Név Érték
Hatókör Átlátszó
Verzió 4.7.2
Típus Újracélzás

A WPF AppDomain leállításkezelése meghívhatja a Dispatcher.Invoke parancsot a gyenge események törlésekor

Részletek

A .NET-keretrendszer 4.7.1-es és korábbi verzióiban a WPF potenciálisan létrehoz egy System.Windows.Threading.Dispatcher a .NET véglegesítő szálán az AppDomain leállítása során. Ezt a .NET-keretrendszer 4.7.2-s és újabb verzióiban javítottuk a gyenge események szálérzékenysé tételével. Emiatt a WPF meghívhatja Dispatcher.Invoke a törlési folyamat befejezéséhez. Bizonyos alkalmazásokban a véglegesítő időzítésének módosítása kivételeket okozhat az AppDomain vagy a folyamat leállítása során. Ez általában olyan alkalmazásokban jelenik meg, amelyek a feldolgozás vagy az AppDomain leállítása előtt nem állították le megfelelően a feldolgozó szálakon futó diszpécsereket. Az ilyen alkalmazásoknak gondoskodniuk kell a feladók élettartamának megfelelő kezeléséről.

Javaslat

A .NET-keretrendszer 4.7.2-s és újabb verzióiban a fejlesztők letilthatják ezt a javítást, hogy segítsenek enyhíteni (de nem kiküszöbölni) a törlési változás miatt fellépő időzítési problémákat. A törlés módosításának letiltásához használja a következő AppContext jelölőt.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
Név Érték
Hatókör Edge
Verzió 4.7.2
Típus Újracélzás

WPF Elsődleges kulcs módosítása az ADO-adatok master/detail forgatókönyvben való megjelenítésekor

Részletek

Tegyük fel, hogy rendelkezik Ordertípusú elemek ADO-gyűjteményével, amelynek "OrderDetails" nevű relációja az "OrderID" elsődleges kulcson keresztül Detail típusú elemek gyűjteményéhez kapcsolódik. A WPF-alkalmazásban egy listavezérlőt egy adott rendelés részleteihez köthet:

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

ahol a DataContext egy Order. A WPF lekéri a OrderDetails tulajdonság értékét – az összes olyan Detail elem D gyűjteményét, amelynek OrderID megegyezik a fő elem OrderID-jával. A viselkedésváltozás a főelem elsődleges kulcsának OrderID módosításakor következik be. Az ADO automatikusan módosítja a Részletek gyűjteményben lévő valamennyi érintett rekord OrderID azonosítóját, nevezetesen azokat, amelyeket a D gyűjteménybe másoltak. De mi történik D-vel?

  • Régi viselkedés: A D gyűjtemény törlődik. A főelem nem küld változásértesítést a OrderDetails tulajdonságnál. A ListBox továbbra is a D gyűjteményt használja, amely most üres.
  • Új viselkedés: A D gyűjtemény nem változik. Minden elem esetén változásértesítést ad a OrderID tulajdonságról. A ListBox továbbra is a D gyűjteményt használja, és az új OrderID-val megjeleníti a részleteket. A WPF más módon hozza létre a D gyűjteményt, hogy megvalósítsa az új viselkedést: az ADO metódus DataRowView.CreateChildView(DataRelation, Boolean) meghívásával, a followParent argumentumot trueértékre állítva.

Javaslat

Az alkalmazás az alábbi AppContext kapcsolóval kapja meg az új viselkedést.

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

A kapcsoló alapértelmezés szerint a .NET 4.7.1 vagy annál korábbi verziót megcélzott alkalmazások esetén true (régi viselkedés), a .NET 4.7.2 vagy annál újabb verziót megcélzott alkalmazások esetén pedig false (új viselkedés) értékre áll be.

Név Érték
Hatókör Kiskorú
Verzió 4.7.2
Típus Újracélzás

A WPF FocusVisual for RadioButton és a CheckBox mostantól helyesen jelenik meg, ha a vezérlők nem tartalmaznak tartalmat

Részletek

A .NET-keretrendszer 4.7.1-s és korábbi verzióiban a WPF System.Windows.Controls.CheckBox és System.Windows.Controls.RadioButton inkonzisztensek, a klasszikus és a kontrasztos témákban pedig helytelen fókuszvizualizációk vannak. Ezek a problémák olyan esetekben fordulnak elő, amikor a vezérlők nem rendelkeznek tartalomkészlettel. Ez megnehezítheti a témák és a fókuszvizualizáció közötti átmenetet. A .NET-keretrendszer 4.7.2-ben ezek a vizualizációk egységesebbek a témák között, és könnyebben láthatók a klasszikus és a kontrasztos témákban.

Javaslat

A .NET-keretrendszer 4.7.2-et célzó fejlesztőknek, akik vissza szeretnének térni a .NET 4.7.1-ben való működéshez, a következő AppContext-jelzőt kell beállítaniuk.

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

Azoknak a fejlesztőknek, akik a .NET 4.7.2-es verzió alatti keretrendszerverzió megcélzása közben szeretnék használni ezt a módosítást, az alábbi AppContext-jelzőket kell beállítaniuk. Vegye figyelembe, hogy az összes jelzőt megfelelően kell beállítani, és a .NET-keretrendszer telepített verziójának 4.7.2-es vagy újabbnak kell lennie. A WPF-alkalmazásoknak a legújabb fejlesztések eléréséhez minden korábbi akadálymentességi fejlesztést meg kell adniuk. Ehhez győződjön meg arról, hogy a "Switch.UseLegacyAccessibilityFeatures" és a "Switch.UseLegacyAccessibilityFeatures.2" AppContext kapcsoló egyaránt hamis értékre van állítva.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
Név Érték
Hatókör Edge
Verzió 4.7.2
Típus Újracélzás

A WPF TextBox/PasswordBox szövegkijelölése nem követi a rendszer színeit

Részletek

A .NET-keretrendszer 4.7.1-es és korábbi verzióiban a WPF System.Windows.Controls.TextBox és System.Windows.Controls.PasswordBox csak az Adorner-rétegben jeleníthet meg szövegkijelölést. Egyes rendszertémákban ez elzárná a szöveget, ami megnehezítené az olvasást. A .NET-keretrendszer 4.7.2-s és újabb verzióiban a fejlesztők engedélyezhetik a nem Adorner-alapú kiválasztási renderelési sémát, amely enyhíti ezt a problémát.

Javaslat

A módosítást használni kívánó fejlesztőknek megfelelően kell beállítaniuk a következő AppContext jelölőt. A funkció használatához a telepített .NET-keretrendszer verziójának 4.7.2-es vagy újabbnak kell lennie. A nem adorner-alapú kijelölés engedélyezéséhez használja az alábbi AppContext jelölőt.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
Név Érték
Hatókör Edge
Verzió 4.7.2
Típus Újracélzás

Windows Workflow Foundation (WF)

Az IWorkflowInstanceManagement.TransactedCancel és az IWorkflowInstanceManagement.TransactedTerminate végtelen rekurziójának elkerülése

Részletek

Bizonyos körülmények között, amikor IWorkflowInstanceManagement.TransactedCancel vagy IWorkflowInstanceManagement.TransactedTerminate API-kat használ egy munkafolyamat-szolgáltatáspéldány megszakítására vagy leállítására, a munkafolyamat-példány végtelen ismétlődés miatt halom túlcsordulást tapasztalhat, amikor a Workflow futtatókörnyezet megkísérli a szolgáltatáspéldány megőrzését a kérés feldolgozása során. A probléma akkor fordul elő, ha a munkafolyamat-példány olyan állapotban van, amelyben egy másik szolgáltatásnak küldött, folyamatban lévő WCF-kérésre vár. A TransactedCancel és TransactedTerminate műveletek olyan munkaelemeket hoznak létre, amelyek várólistára kerülnek a munkafolyamat-szolgáltatáspéldányhoz. Ezeket a munkaelemeket a rendszer nem hajtja végre a TransactedCancel/TransactedTerminate kérés feldolgozása során. Mivel a munkafolyamat-szolgáltatás példány foglalt, és egy másik befejezetlen WCF-kérés befejezésére vár, a létrehozott munkaelem várólistán marad. A TransactedCancel/TransactedTerminate művelet befejeződik, és a rendszer visszaadja a vezérlést az ügyfélnek. Amikor a TransactedCancel/TransactedTerminate művelethez társított tranzakció véglegesítésre törekszik, meg kell őriznie a munkafolyamat-szolgáltatáspéldány állapotát. Mivel azonban van egy WCF kérelem a példányhoz, a munkafolyamat-futtatókörnyezet nem tudja menteni a munkafolyamat-szolgáltatás példányt, és a végtelen rekurziós hurok veremtúlcsorduláshoz vezet. Mivel TransactedCancel és TransactedTerminate csak munkaelemet hoz létre a memóriában, a tranzakció meglétének nincs befolyása. A tranzakció visszaállítása nem veti el a munkaelemet. A probléma megoldásához a .NET-keretrendszer 4.7.2-től kezdve bevezettünk egy AppSetting, amely hozzáadható a munkafolyamat-szolgáltatás web.config/app.config, amely arra utasítja, hogy hagyja figyelmen kívül a TransactedCancel és TransactedTerminatetranzakcióit. Ez lehetővé teszi a tranzakció véglegesítését anélkül, hogy várni kellene a munkafolyamat-példány állandósulására. A funkcióhoz tartozó AppSetting neve microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate. A true értéke azt jelzi, hogy a tranzakciót figyelmen kívül kell hagyni, a verem túlcsordulásának elkerülése érdekében. Az AppSetting alapértelmezett értéke false, így a meglévő munkafolyamat-szolgáltatáspéldányokra nincs hatással.

Javaslat

Ha AppFabric- vagy más IWorkflowInstanceManagement-klienst használ, és a munkafolyamat-példány megszakítása vagy leállítása során a munkafolyamat-szolgáltatás példányában veremátúllépés lép fel, a munkafolyamat-szolgáltatás web.config/app.config fájljának <appSettings> szakaszához a következőket veheti fel:

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

Ha nem tapasztalja a problémát, ezt nem kell megtennie.

Név Érték
Hatókör Edge
Verzió 4.7.2
Típus Újracélzás