Aracılığıyla paylaş


.NET Framework 4.7.x'e geçiş için değişiklikleri yeniden hedefleme

Bu makalede .NET Framework 4.7, 4.7.1 ve 4.7.2'de sunulan uygulama uyumluluğu sorunları listelenmektedir.

.NET Framework 4.7

ASP.NET

HttpRuntime.AppDomainAppPath NullReferenceException Oluşturur

Ayrıntılar

.NET Framework 4.6.2'de, boş karakterler içeren bir değer alınırken çalışma zamanı bir T:System.NullReferenceExceptionP:System.Web.HttpRuntime.AppDomainAppPath oluşturur. .NET Framework 4.6.1 ve önceki sürümlerinde çalışma zamanı bir T:System.ArgumentNullExceptionoluşturur.

Öneri

Bu değişikliğe yanıt vermek için aşağıdakilerden birini yapabilirsiniz:

  • Uygulamanızın T:System.NullReferenceException .NET Framework 4.6.2 üzerinde çalışıyorsa öğesini işleyin.
  • Önceki davranışı geri yükleyen ve bir T:System.ArgumentNullExceptionoluşturan .NET Framework 4.7'ye yükseltin.
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.6.2
Tür Yeniden Hedefleme

Etkilenen API’ler

Oturum başına eşzamanlı istekleri azaltma

Ayrıntılar

.NET Framework 4.6.2 ve önceki sürümlerinde, ASP.NET istekleri aynı Sessionid ile sırayla yürütür ve ASP.NET her zaman sessionid'yi varsayılan olarak tanımlama bilgileri aracılığıyla gönderir. Bir sayfanın yanıt vermesi uzun sürerse, yalnızca tarayıcıda F5 tuşuna basarak sunucu performansını önemli ölçüde düşürür. Düzeltmede, kuyruğa alınan istekleri izlemek ve belirtilen sınırı aştıklarında istekleri sonlandırmak için bir sayaç ekledik. Varsayılan değer 50’dir. Sınıra ulaşılırsa, olay günlüğüne bir uyarı kaydedilir ve IIS günlüğüne bir HTTP 500 yanıtı kaydedilebilir.

Öneri

Eski davranışı geri yüklemek için web.config dosyanıza aşağıdaki ayarı ekleyerek yeni davranışı geri çevirebilirsiniz.

<appSettings>
    <add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7
Tür Yeniden Hedefleme

ServicePointManager.SecurityProtocol'un varsayılan değeri SecurityProtocolType.System.Default'dır

Ayrıntılar

.NET Framework 4.7'yi hedefleyen uygulamalardan başlayarak özelliğin ServicePointManager.SecurityProtocol varsayılan değeridir SecurityProtocolType.SystemDefault. Bu değişiklik SslStream tabanlı .NET Framework ağ API'lerinin (FTP, HTTPS ve SMTP gibi) .NET Framework tarafından tanımlanan sabit kodlanmış değerleri kullanmak yerine varsayılan güvenlik protokollerini işletim sisteminden devralmasını sağlar. Varsayılan değer, işletim sistemine ve sistem yöneticisi tarafından gerçekleştirilen özel yapılandırmalara göre değişir. Windows işletim sisteminin her sürümündeki varsayılan SChannel protokolü hakkında bilgi için bkz . TLS/SSL(Schannel SSP) protokolleri.

.NET Framework'ün önceki bir sürümünü hedefleyen uygulamalar için özelliğin ServicePointManager.SecurityProtocol varsayılan değeri hedeflenen .NET Framework sürümüne bağlıdır. Daha fazla bilgi için .NET Framework 4.5.2'den 4.6'ya Geçiş için Değişiklikleri Yeniden Hedefleme'nin Ağ bölümüne bakın.

Öneri

Bu değişiklik ,NET Framework 4.7 veya sonraki sürümlerini hedefleyen uygulamaları etkiler. Sistem varsayılanını kullanmak yerine tanımlı bir protokol kullanmayı tercih ederseniz, özelliğin ServicePointManager.SecurityProtocol değerini açıkça ayarlayabilirsiniz. Bu değişiklik istenmeyen bir durumsa, uygulama yapılandırma dosyanızın çalışma zamanı> bölümüne bir yapılandırma ayarı ekleyerek bu değişikliği <geri çevirebilirsiniz. Aşağıdaki örnekte hem bölümü hem Switch.System.Net.DontEnableSystemDefaultTlsVersions de <runtime> geri çevirme anahtarı gösterilmektedir:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7
Tür Yeniden Hedefleme

Etkilenen API’ler

SslStream TLS Uyarılarını destekler

Ayrıntılar

Başarısız bir TLS el sıkışmasının ardından, ilk G/Ç Okuma/Yazma işlemi iç özel durumu olan bir System.IO.IOExceptionSystem.ComponentModel.Win32Exception oluşturulur. System.ComponentModel.Win32Exception.NativeErrorCode için System.ComponentModel.Win32Exception kod, TLS ve SSL uyarıları için Schannel hata kodları kullanılarak uzak tarafın TLS Uyarısına eşlenebilir. Daha fazla bilgi için bkz. RFC 2246: Bölüm 7.2.2 Hata uyarıları.
.NET Framework 4.6.2 ve önceki sürümlerindeki davranış, aktarım kanalının (genellikle TCP bağlantısı), diğer tarafın el sıkışmasında başarısız olması ve hemen ardından bağlantıyı reddetmesi durumunda Yazma veya Okuma sırasında zaman aşımına neden olmasıdır.

Öneri

gibi ağ G/Ç API'lerini Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) çağıran uygulamalar veya System.TimeoutExceptionişlemelidirIOException.
TLS Uyarıları özelliği .NET Framework 4.7'den başlayarak varsayılan olarak etkindir. .NET Framework 4.7 veya üzeri bir sistemde çalışan 4.0 ile 4.6.2 arasındaki .NET Framework sürümlerini hedefleyen uygulamalarda, uyumluluğu korumak için özellik devre dışı bırakılacaktır.
.NET Framework 4.7 veya üzeri üzerinde çalışan .NET Framework 4.6 ve üzeri uygulamalar için özelliği etkinleştirmek veya devre dışı bırakmak için aşağıdaki yapılandırma API'sini kullanabilirsiniz.

  • Program aracılığıyla: ServicePointManager yalnızca bir kez başlatılacağından uygulamanın ilk yaptığı şey olmalıdır:

    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>
    
  • Kayıt defteri anahtarı (makine genel): .NET Framework 4.6 - 4.6.2'de özelliği etkinleştirmek için Değeri false olarak ayarlayın.

    Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    - Type: String
    - Value: "true"
    
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7
Tür Yeniden Hedefleme

Etkilenen API’ler

Güvenlik

CspParameters.ParentWindowHandle artık HWND değerini bekliyor

Ayrıntılar

ParentWindowHandle.NET Framework 2.0'da sunulan değer, bir uygulamanın anahtara erişmek için gereken tüm kullanıcı arabiriminin (PIN istemi veya onay iletişim kutusu gibi) belirtilen pencerenin kalıcı alt öğesi olarak açılmasını sağlayan bir üst pencere işleme değeri kaydetmesine olanak tanır. .NET Framework 4.7'yi hedefleyen uygulamalardan başlayarak, bir Windows Forms uygulaması aşağıdaki gibi bir kodla özelliğini ayarlayabilirParentWindowHandle:

cspParameters.ParentWindowHandle = form.Handle;

.NET Framework'ün önceki sürümlerinde değerin bellekte HWND değerinin bulunduğu konumu temsil eden bir System.IntPtr konum olması beklenirdi. Özelliği form olarak ayarlama. Windows 7 ve önceki sürümlerdeki tanıtıcının hiçbir etkisi yoktu, ancak Windows 8 ve sonraki sürümlerde "System.Security.Cryptography.CryptographicException: Parametre yanlış" sonucunu verir.

Öneri

Üst pencere ilişkisini kaydetmek isteyen .NET Framework 4.7 veya üzerini hedefleyen uygulamaların basitleştirilmiş formu kullanması teşvik edilir:

cspParameters.ParentWindowHandle = form.Handle;

Geçirecek doğru değerin değeri tutan form.Handle bir bellek konumunun adresi olduğunu belirten kullanıcılar, AppContext anahtarını Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandletrueolarak ayarlayarak davranış değişikliğini geri çevirebilir:

  • Burada açıklandığı gibi AppContext'te program aracılığıyla uyumluluk anahtarlarını ayarlayarak.
  • app.config dosyasının <runtime> bölümüne aşağıdaki satırı ekleyerek:
<runtime>
 <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>

Buna karşılık, uygulama eski .NET Framework sürümleri altında yüklendiğinde .NET Framework 4.7 çalışma zamanındaki yeni davranışı kabul etmek isteyen kullanıcılar AppContext anahtarını olarak falseayarlayabilir.

Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7
Tür Yeniden Hedefleme

Etkilenen API’ler

SslStream TLS Uyarılarını destekler

Ayrıntılar

Başarısız bir TLS el sıkışmasının ardından, ilk G/Ç Okuma/Yazma işlemi iç özel durumu olan bir System.IO.IOExceptionSystem.ComponentModel.Win32Exception oluşturulur. System.ComponentModel.Win32Exception.NativeErrorCode için System.ComponentModel.Win32Exception kod, TLS ve SSL uyarıları için Schannel hata kodları kullanılarak uzak tarafın TLS Uyarısına eşlenebilir. Daha fazla bilgi için bkz. RFC 2246: Bölüm 7.2.2 Hata uyarıları.
.NET Framework 4.6.2 ve önceki sürümlerindeki davranış, aktarım kanalının (genellikle TCP bağlantısı), diğer tarafın el sıkışmasında başarısız olması ve hemen ardından bağlantıyı reddetmesi durumunda Yazma veya Okuma sırasında zaman aşımına neden olmasıdır.

Öneri

gibi ağ G/Ç API'lerini Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) çağıran uygulamalar veya System.TimeoutExceptionişlemelidirIOException.
TLS Uyarıları özelliği .NET Framework 4.7'den başlayarak varsayılan olarak etkindir. .NET Framework 4.7 veya üzeri bir sistemde çalışan 4.0 ile 4.6.2 arasındaki .NET Framework sürümlerini hedefleyen uygulamalarda, uyumluluğu korumak için özellik devre dışı bırakılacaktır.
.NET Framework 4.7 veya üzeri üzerinde çalışan .NET Framework 4.6 ve üzeri uygulamalar için özelliği etkinleştirmek veya devre dışı bırakmak için aşağıdaki yapılandırma API'sini kullanabilirsiniz.

  • Program aracılığıyla: ServicePointManager yalnızca bir kez başlatılacağından uygulamanın ilk yaptığı şey olmalıdır:

    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>
    
  • Kayıt defteri anahtarı (makine genel): .NET Framework 4.6 - 4.6.2'de özelliği etkinleştirmek için Değeri false olarak ayarlayın.

    Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    - Type: String
    - Value: "true"
    
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7
Tür Yeniden Hedefleme

Etkilenen API’ler

Windows Communication Foundation (WCF)

DataContractJsonSerializer ile denetim karakterlerinin seri hale getirilmesi artık ECMAScript V6 ve V8 ile uyumludur

Ayrıntılar

.NET Framework 4.6.2 ve önceki sürümlerinde , System.Runtime.Serialization.Json.DataContractJsonSerializer \b, \f ve \t gibi bazı özel denetim karakterlerini ECMAScript V6 ve V8 standartlarıyla uyumlu bir şekilde seri hale getirmedi. .NET Framework 4.7'den başlayarak, bu denetim karakterlerinin seri hale getirilmesi ECMAScript V6 ve V8 ile uyumludur.

Öneri

.NET Framework 4.7'yi hedefleyen uygulamalar için bu özellik varsayılan olarak etkindir. Bu davranış istenmiyorsa, app.config veya web.config dosyasının bölümüne aşağıdaki satırı <runtime> ekleyerek bu özelliği geri çevirebilirsiniz:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7
Tür Yeniden Hedefleme

Etkilenen API’ler

WCF ileti güvenliği artık TLS1.1 ve TLS1.2'yi kullanabilir

Ayrıntılar

.NET Framework 4.7'den başlayarak, müşteriler uygulama yapılandırma ayarları aracılığıyla SSL3.0 ve TLS1.0'a ek olarak WCF ileti güvenliğinde TLS1.1 veya TLS1.2'yi yapılandırabilir.

Öneri

.NET Framework 4.7'de, WCF ileti güvenliğinde TLS1.1 ve TLS1.2 desteği varsayılan olarak devre dışıdır. App.config veya web.config dosyasının <runtime> bölümüne aşağıdaki satırı ekleyerek etkinleştirebilirsiniz:

<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7
Tür Yeniden Hedefleme

Windows Presentation Foundation (WPF)

Dokunmatik özellikli sistemlerde System.Windows.Input.PenContext.Disable çağrısı bir ArgumentException oluşturabilir

Ayrıntılar

Bazı durumlarda, dokunmatik özellikli sistemlerde iç System.Windows.Intput.PenContext.Disable yöntemine yapılan çağrılar yeniden giriş nedeniyle işlenmeyen T:System.ArgumentException bir duruma neden olabilir.

Öneri

Bu sorun .NET Framework 4.7'de giderilmiştir. Özel durumu önlemek için .NET Framework 4.7 ile başlayan bir .NET Framework sürümüne yükseltin.

Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.6.1
Tür Yeniden Hedefleme

ImageSourceConverter.ConvertFrom'dan özel durum işleme kodunda NullReferenceException

Ayrıntılar

için ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) özel durum işleme kodundaki bir hata, hedeflenen özel durum ( System.IO.DirectoryNotFoundException veya System.IO.FileNotFoundException) yerine yanlış System.NullReferenceException bir hatanın atılmasıyla neden oldu. Bu değişiklik bu hatayı düzelterek yöntemin artık doğru özel durumu oluşturmasını sağlar.

.NET Framework 4.6.2 ve önceki sürümleri hedefleyen tüm uygulamalar varsayılan olarak uyumluluk için oluşturmaya System.NullReferenceException devam eder. .NET Framework 4.7 ve üzerini hedefleyen geliştiriciler doğru özel durumları görmelidir.

Öneri

.NET Framework 4.7 veya üstünü hedeflerken alma System.NullReferenceException işlemine geri dönmek isteyen geliştiriciler, uygulamalarının App.config dosyasına aşağıdakileri ekleyebilir/birleştirebilir:

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7
Tür Yeniden Hedefleme

Etkilenen API’ler

Wpf Izgara uzayı yıldız sütunlarına ayırma

Ayrıntılar

.NET Framework 4.7'den başlayarak WPF, *-sütunlara alan ayırmak için kullanılan algoritmanın Grid yerini alır. Bu, birkaç durumda *-sütunlara atanan gerçek genişliği değiştirir:

  • Bir veya daha fazla *sütunda da söz konusu sütun için orantılı ayırmayı geçersiz kılan en düşük veya en yüksek genişlik olduğunda. (Minimum genişlik, açık bir MinWidth bildiriminden veya sütunun içeriğinden elde edilen örtük bir minimumdan türetilebilir. Maksimum genişlik yalnızca MaxWidth bildiriminden açıkça tanımlanabilir.)
  • Bir veya daha fazla *sütun son derece büyük bir *ağırlık bildirdiğinde, 10^298'den büyük.
  • *-ağırlıklar kayan nokta kararlılığı (taşma, taşma, duyarlık kaybı) ile karşılaşmak için yeterince farklı olduğunda.
  • Düzen yuvarlama etkinleştirildiğinde ve etkin görüntü DPI'sı yeterince yüksek olduğunda. İlk iki durumda, yeni algoritma tarafından üretilen genişlikler eski algoritma tarafından üretilenlerden önemli ölçüde farklı olabilir; son durumda, fark en fazla bir veya iki piksel olacaktır.

Yeni algoritma, eski algoritmada bulunan birkaç hatayı düzeltir:

  • Sütunlara toplam ayırma Kılavuzun genişliğini aşabilir. Oransal paylaşımı minimum boyuttan küçük olan bir sütuna alan ayırırken bu durum oluşabilir. Algoritma, diğer sütunlar için kullanılabilir alanı azaltan en düşük boyutu ayırır. Ayrılacak *-sütun yoksa, toplam ayırma çok büyük olur.

  • Toplam ayırma, Kılavuz genişliğinin dışında olabilir. Bu, oransal paylaşımı maksimum boyutundan daha büyük olan ve bolluğu kaplayan *sütun içermeyen bir sütuna ayrılırken ortaya çıkan 1. çift sorundur.

  • İki *sütun, *ağırlıklarıyla orantılı olmayan ayırmaları alabilir. Bu daha hafif bir #1/#2 sürümüdür ve B'nin oransal paylaşımının en küçük (veya en yüksek) kısıtlamasını ihlal ettiği *sütunlar A, B ve C'ye (bu sırayla) ayırma sırasında ortaya çıkıyor. Yukarıda olduğu gibi, bu, A'dan daha az (veya daha fazla) orantılı ayırma alan C sütunu için kullanılabilir alanı değiştirir.

  • Son derece büyük ağırlıklara (> 10^298) sahip sütunların tümü, 10^298 ağırlığa sahipmiş gibi değerlendirilir. Aralarındaki orantılı farklar (ve biraz daha küçük ağırlıklara sahip sütunlar arasında) dikkate alınmaz.

  • Sonsuz kalınlıklara sahip sütunlar doğru işlenmez. (Aslında bir ağırlığı Sonsuz olarak ayarlayamazsınız, ancak bu yapay bir kısıtlamadır. Ayırma kodu bunu işlemeye çalışıyordu, ancak hatalı bir iş yapıyor.)

  • Taşma, yetersizlik, duyarlık kaybı ve benzer kayan nokta sorunlarını önlerken karşılaşılan birkaç küçük sorun.

  • Düzen yuvarlama ayarlamaları yeterince yüksek DPI'da yanlıştır. Yeni algoritma aşağıdaki ölçütleri karşılayan sonuçlar üretir:

    • *-sütuna atanan gerçek genişlik hiçbir zaman en küçük genişliğinden küçük veya en büyük genişliğinden büyük değildir.
    • En düşük veya en yüksek genişliği atanmamış her *sütuna* ağırlığıyla orantılı bir genişlik atanır. Kesin olarak, iki sütun sırasıyla x* ve y* genişlikleriyle bildirilirse ve sütunlardan hiçbiri en düşük veya en fazla genişliğini almazsa, sütunlara atanan v ve w gerçek genişlikleri aynı oranda olur: v / w == x / y.
    • "Orantılı" *sütunlara ayrılan toplam genişlik, kısıtlanmış sütunlara (sabit, otomatik ve *-sütunlar en küçük veya en fazla genişlikleri ayrılan) ayrıldıktan sonra kullanılabilir alana eşittir. Bu sıfır olabilir, örneğin minimum genişliklerin toplamı Kılavuz'un kullanılabilir genişliğini aşarsa.
    • Tüm bu deyimler "ideal" düzene göre yorumlanmalıdır. Düzen yuvarlama etkin olduğunda, gerçek genişlikler ideal genişliklerden bir piksele kadar farklılık gösterebilir.

Not

Bu makaledeki sütunlar ve genişlikler hakkında söylenen her şey satırlar ve yükseklikler için de geçerlidir.

Öneri

Varsayılan olarak, .NET Framework 4.7 ile başlayan .NET Framework sürümlerini hedefleyen uygulamalar yeni algoritmayı görürken, .NET Framework 4.6.2 veya önceki sürümleri hedefleyen uygulamalar eski algoritmayı görür.

Varsayılanı geçersiz kılmak için aşağıdaki yapılandırma ayarını kullanın:

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

Değer true eski algoritmayı seçer, false yeni algoritmayı seçer.

Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7
Tür Yeniden Hedefleme

WPF İşaretçi Tabanlı Dokunma Yığını

Ayrıntılar

Bu değişiklik, isteğe bağlı WM_POINTER tabanlı WPF dokunma/ekran kalemi yığınını etkinleştirme özelliğini ekler. Bunu açıkça etkinleştirmeyen geliştiricilerin WPF dokunma/ekran kalemi davranışında hiçbir değişiklik görmemesi gerekir. İsteğe bağlı WM_POINTER tabanlı dokunma/ekran kalemi yığınıyla ilgili Bilinen Güncel Sorunlar:

  • Gerçek zamanlı mürekkep oluşturma desteği yoktur.
  • Mürekkep oluşturma ve StylusPlugins çalışmaya devam ederken, kullanıcı arabirimi iş parçacığında işlenir ve bu da performansın düşmesine neden olabilir.
  • Dokunma/ekran kalemi olaylarından fare olaylarına yükseltme değişiklikleri nedeniyle davranışsal değişiklikler
  • Düzenleme farklı davranabilir
  • Sürükle/Bırak, dokunma girişi için uygun geri bildirimi göstermez
  • Bu ekran kalemi girişini etkilemez
  • Sürükle/Bırak artık dokunma/ekran kalemi olaylarında başlatılamıyor
  • Bu durum, fare girişi algılanana kadar uygulamanın yanıt vermeyi durdurmasına neden olabilir.
  • Bunun yerine, geliştiricilerin fare olaylarından sürükleyip bırakma işlemi başlatması gerekir.

Öneri

Bu yığını etkinleştirmek isteyen geliştiriciler, uygulamalarının App.config dosyasına aşağıdakileri ekleyebilir/birleştirebilir:

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

Bunu kaldırmak veya değeri false olarak ayarlamak bu isteğe bağlı yığını kapatır. Bu yığının yalnızca Windows 10 Creators Update ve üzerinde kullanılabilir olduğunu unutmayın.

Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7
Tür Yeniden Hedefleme

Windows Workflow Foundation (WF)

İş akışı sağlama toplamları MD5'ten SHA1'e değiştirildi

Ayrıntılar

Visual Studio ile hata ayıklamayı desteklemek için İş Akışı çalışma zamanı, karma algoritması kullanarak iş akışı örneği için bir sağlama toplamı oluşturur. .NET Framework 4.6.2 ve önceki sürümlerinde iş akışı sağlama toplamı karması, FIPS özellikli sistemlerde sorunlara neden olan MD5 algoritmasını kullandı. .NET Framework 4.7'den başlayarak algoritma SHA1'dir. Kodunuz bu sağlama toplamlarını kalıcı hale aldıysa uyumsuz olacaktır.

Öneri

Kodunuz sağlama toplamı hatası nedeniyle iş akışı örneklerini yükleyemiyorsa "Switch.System.Activities.UseMD5ForWFDebugger" anahtarını true olarak ayarlamayı AppContext deneyin. Kodda:

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

Veya yapılandırmada:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
  </runtime>
</configuration>
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7
Tür Yeniden Hedefleme

.NET Framework 4.7.1

ASP.NET

.NET Framework 4.7.1'de ASP.NET Erişilebilirlik Geliştirmeleri

Ayrıntılar

.NET Framework 4.7.1'den başlayarak ASP.NET, ASP.NET müşterileri daha iyi desteklemek için ASP.NET Web Denetimlerinin Visual Studio'daki erişilebilirlik teknolojisiyle nasıl çalıştığını geliştirmiştir. Bunlar aşağıdaki değişiklikleri içerir:

  • Ayrıntılar Görünümü sihirbazındaki Alan Ekle iletişim kutusu veya ListView sihirbazının ListView'ı Yapılandır iletişim kutusu gibi denetimlerde eksik UI erişilebilirlik desenlerini uygulama değişiklikleri.
  • Veri Disk Belleği Alanları Düzenleyicisi gibi Yüksek Karşıtlık modunda görüntülemeyi iyileştirmeye yönelik değişiklikler.
  • DataPager denetiminin Sayfa Alanlarını Düzenle sihirbazındaki Alanlar iletişim kutusu, ObjectContext'i Yapılandır iletişim kutusu veya Veri Kaynağını Yapılandırma sihirbazının Veri Seçimini Yapılandır iletişim kutusu gibi denetimlerin klavye gezinti deneyimlerini iyileştirmeye yönelik değişiklikler.

Öneri

Bu değişiklikleri kabul etme veya geri çevirme Visual Studio Tasarım Aracı bu değişikliklerden yararlanabilmesi için .NET Framework 4.7.1 veya sonraki sürümlerinde çalışması gerekir. Web uygulaması bu değişikliklerden aşağıdaki yollarla yararlanabilir:

  • Varsayılan olarak aşağıdaki AppContext Anahtarı ile yeni erişilebilirlik özelliklerini destekleyen Visual Studio 2017 15.3 veya üzerini yükleyin.
  • AppContext anahtarını <runtime> devenv.exe.config dosyasındaki bölümüne ekleyerek Switch.UseLegacyAccessibilityFeatures ve aşağıdaki örnekte gösterildiği gibi olarak ayarlayarak falseeski erişilebilirlik davranışlarından vazgeçin.
<?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>

.NET Framework 4.7.1 veya üstünü hedefleyen ve eski erişilebilirlik davranışını korumak isteyen uygulamalar, bu AppContext anahtarını trueaçıkça olarak olarak ayarlayarak eski erişilebilirlik özelliklerinin kullanımını kabul edebilir.

Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.1
Tür Yeniden Hedefleme

Temel

SerialPort arka plan iş parçacığı özel durumları

Ayrıntılar

Akışlarla SerialPort oluşturulan arka plan iş parçacıkları, işletim sistemi özel durumları oluşturulduğunda artık işlemi sonlandırmıyor.
.NET Framework 4.7 ve önceki sürümleri hedefleyen uygulamalarda, bir akışla oluşturulan arka plan iş parçacığında bir işletim sistemi özel durumu oluştuğunda bir SerialPort işlem sonlandırılır.
.NET Framework 4.7.1 veya sonraki bir sürümü hedefleyen uygulamalarda arka plan iş parçacıkları etkin seri bağlantı noktasıyla ilgili işletim sistemi olaylarını bekler ve seri bağlantı noktasının aniden kaldırılması gibi bazı durumlarda kilitlenebilir.

Öneri

.NET Framework 4.7.1'i hedefleyen uygulamalar için, dosyanızın app.config bölümüne aşağıdakileri <runtime> ekleyerek özel durum işlemeyi geri çevirebilirsiniz:

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

.NET Framework'ün önceki sürümlerini hedefleyen ancak .NET Framework 4.7.1 veya sonraki sürümlerinde çalışan uygulamalar için, dosyanızın app.config bölümüne aşağıdakileri ekleyerek özel durum işlemeyi <runtime> kabul edebilirsiniz:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.1
Tür Yeniden Hedefleme

Etkilenen API’ler

ServiceBase OnStart özel durumlarını yaymıyor

Ayrıntılar

.NET Framework 4.7 ve önceki sürümlerinde, hizmet başlangıcında oluşan özel durumlar çağrısına ServiceBase.Runyayılmaz.

.NET Framework 4.7.1'i hedefleyen uygulamalardan başlayarak, çalışma zamanı başlatılmayan hizmetler için özel durumları 'a ServiceBase.Run yayılır.

Öneri

Hizmet başlangıcında, bir özel durum varsa, bu özel durum yayılır. Bu, hizmetlerin başlatılaamaması durumlarının tanılanmasında yardımcı olmalıdır.

Bu davranış istenmeyen bir davranışsa, uygulama yapılandırma dosyanızın bölümüne aşağıdaki AppContextSwitchOverrides öğeyi runtime ekleyerek bu davranışı geri çevirebilirsiniz:

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

Uygulamanız 4.7.1'den önceki bir sürümü hedeflediyse ancak bu davranışa sahip olmak istiyorsanız, uygulama yapılandırma dosyanızın bölümüne aşağıdaki AppContextSwitchOverrides öğeyi runtime ekleyin:

<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.1
Tür Yeniden Hedefleme

Etkilenen API’ler

Güvenlik

Varsayılan SignedXML ve SignedXMS algoritmaları SHA256 olarak değiştirildi

Ayrıntılar

.NET Framework 4.7 ve önceki sürümlerinde, Bazı işlemler için SignedXML ve SignedCMS varsayılan olarak SHA1'dir. .NET Framework 4.7.1'den başlayarak, SHA256 bu işlemler için varsayılan olarak etkindir. SHA1 artık güvenli olarak kabul edilmediğinden bu değişiklik gereklidir.

Öneri

SHA1 (güvenli olmayan) veya SHA256'nın varsayılan olarak kullanılıp kullanılmadığını denetlemek için iki yeni bağlam anahtarı değeri vardır:

  • Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms
  • Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms .NET Framework 4.7.1 ve sonraki sürümleri hedefleyen uygulamalar için, SHA256 kullanımı istenmeyen bir durumsa, aşağıdaki yapılandırma anahtarını uygulama yapılandırma dosyanızın çalışma zamanı bölümüne ekleyerek varsayılanı SHA1'e geri yükleyebilirsiniz:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />

.NET Framework 4.7 ve önceki sürümlerini hedefleyen uygulamalar için, uygulama yapılandırma dosyanızın çalışma zamanı bölümüne aşağıdaki yapılandırma anahtarını ekleyerek bu değişikliği kabul edebilirsiniz:

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.1
Tür Yeniden Hedefleme

Etkilenen API’ler

SignedXml.GetPublicKey, yeniden hedefleme değişikliği olmadan net462 (veya lightup) üzerinde RSACng döndürür

Ayrıntılar

.NET Framework 4.6.2'den başlayarak, yöntemi tarafından SignedXml.GetPublicKey döndürülen nesnenin somut türü CryptoServiceProvider uygulamasından Cng uygulamasına değiştirildi (ilginçlik olmadan). Bunun nedeni, uygulamanın ' certificate.PublicKey.Key den uygulamasına ileten iç certificate.GetAnyPublicKey öğesini kullanmaya değişmesidir RSACertificateExtensions.GetRSAPublicKey.

Öneri

.NET Framework 4.7.1 üzerinde çalışan uygulamalardan başlayarak, uygulama yapılandırma dosyanızın çalışma zamanı bölümüne aşağıdaki yapılandırma anahtarını ekleyerek .NET Framework 4.6.1 ve önceki sürümlerde varsayılan olarak kullanılan CryptoServiceProvider uygulamasını kullanabilirsiniz:

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.6.2
Tür Yeniden Hedefleme

Etkilenen API’ler

Windows Communication Foundation (WCF)

Bazı .NET SDK araçları için geliştirilmiş erişilebilirlik

Ayrıntılar

.NET Framework SDK 4.7.1'de, çeşitli erişilebilirlik sorunları düzeltilerek SvcConfigEditor.exe ve SvcTraceViewer.exe araçları geliştirilmiştir. Bunların çoğu, bir adın tanımlanmaması veya belirli UI otomasyon desenlerinin doğru uygulanmaması gibi küçük sorunlardı. Birçok kullanıcı bu yanlış değerlerin farkında olmasa da, ekran okuyucular gibi yardımcı teknolojiler kullanan müşteriler bu SDK araçlarını daha erişilebilir bulur. Kesinlikle, bu düzeltmeler klavye odak sırası gibi önceki bazı davranışları değiştirir. Bu araçlardaki tüm erişilebilirlik düzeltmelerini almak için app.config dosyanıza aşağıdakileri yapabilirsiniz:

<runtime>
  <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.1
Tür Yeniden Hedefleme

Windows Forms

Windows Forms denetimlerinde erişilebilirlik geliştirmeleri

Ayrıntılar

Windows Forms, Windows Forms müşterilerini daha iyi desteklemek için erişilebilirlik teknolojileriyle çalışma şeklini geliştiriyor. Bunlar .NET Framework 4.7.1 ile başlayan aşağıdaki değişiklikleri içerir:

  • Yüksek Karşıtlık modunda ekranı iyileştirmeye yönelik değişiklikler.
  • Özellik tarayıcısı deneyimini geliştirmek için yapılan değişiklikler. Özellik tarayıcısı geliştirmeleri şunlardır:
  • Çeşitli açılan seçim pencerelerine daha iyi klavye gezintisi.
  • Gereksiz sekme durakları azaltıldı.
  • Denetim türlerinin daha iyi raporlanması.
  • Geliştirilmiş ekran okuyucusu davranışı.
  • Denetimlerde eksik kullanıcı arabirimi erişilebilirlik desenlerini uygulamak için yapılan değişiklikler.

Öneri

Bu değişiklikleri kabul etme veya devre dışı bırakma Uygulamanın bu değişikliklerden yararlanabilmesi için .NET Framework 4.7.1 veya sonraki sürümlerinde çalışması gerekir. Uygulama, bu değişikliklerden aşağıdaki yollardan biriyle yararlanabilir:

  • .NET Framework 4.7.1'i hedeflemek için yeniden derlenir. Bu erişilebilirlik değişiklikleri ,NET Framework 4.7.1 veya sonraki bir sürümü hedefleyen Windows Forms uygulamalarında varsayılan olarak etkindir.
  • Aşağıdaki AppContext anahtarını<runtime> app.config dosyasının bölümüne ekleyerek ve aşağıdaki örnekte gösterildiği gibi olarak ayarlayarak falseeski erişilebilirlik davranışlarını geri alır.
<?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>

.NET Framework 4.7.1 veya üstünü hedefleyen ve eski erişilebilirlik davranışını korumak isteyen uygulamalar, bu AppContext anahtarını trueaçıkça olarak olarak ayarlayarak eski erişilebilirlik özelliklerinin kullanımını kabul edebilir.

UI otomasyonuna genel bakış için bkz. UI Otomasyonu Genel Bakış.

UI Otomasyonu desenleri ve özellikleri için destek eklendi

Erişilebilirlik istemcileri, ortak, genel olarak açıklanan çağırma desenlerini kullanarak yeni WinForms erişilebilirlik işlevselliğinden yararlanabilir. Bu desenler WinForms'a özgü değildir. Örneğin, erişilebilirlik istemcileri IAccessible arabiriminde (MAAS) QueryInterface yöntemini çağırarak bir IServiceProvider arabirimi alabilir. Bu arabirim varsa, istemciler QueryService yöntemini kullanarak bir IAccessibleEx arabirimi isteyebilir. Daha fazla bilgi için bkz . İstemciden IAccessibleEx kullanma. .NET Framework 4.7.1'den başlayarak, WinForms erişilebilirlik nesneleri için IServiceProvider ve IAccessibleEx (uygunsa) kullanılabilir.

.NET Framework 4.7.1, aşağıdaki UI otomasyon desenleri ve özellikleri için destek ekler:

Yüksek Karşıtlık temalarında işletim sistemi tanımlı renklerin kullanımı

  • Button varsayılan stil olan ve CheckBox özelliği olarak ayarlanmış FlatStyle.Systemdenetimleri FlatStyle artık seçildiğinde Yüksek Karşıtlık temasında işletim sistemi tanımlı renkleri kullanıyor. Daha önce metin ve arka plan renkleri karşıt değildi ve okunması zordu.
  • Özelliği false olarak ayarlanmış olan , CheckBox, RadioButton, LinkLabelLabelve GroupBox denetimleriEnabled, Metni Yüksek Karşıtlık temalarında işlemek için gölgeli bir renk kullandı ve arka planda düşük karşıtlık elde Buttonetti. Şimdi bu denetimler işletim sistemi tarafından tanımlanan "Devre Dışı Metin" rengini kullanır. Bu düzeltme, özelliği dışında FlatStyle.Systembir değere ayarlanmış denetimler FlatStyle için geçerlidir. İkinci denetimler işletim sistemi tarafından işlenir.
  • DataGridView şimdi, geçerli odağın bulunduğu hücrenin içeriği çevresinde görünür bir dikdörtgen oluşturur. Daha önce bu, bazı Yüksek Karşıtlık temalarında görünmüyordu.
  • ToolStripMenuItemözelliği false olarak ayarlanmış denetimler Enabled artık işletim sistemi tarafından tanımlanan "Devre Dışı Metin" rengini kullanıyor.
  • ToolStripMenuItemözelliği true olarak ayarlanmış denetimler Checked artık ilişkili onay işaretini karşıt bir sistem renginde işleyebilir. Daha önce onay işareti rengi yeterince karşıtlıkta değildi ve Yüksek Karşıtlık temalarında görünmüyordu. NOT: Windows 10 bazı yüksek karşıtlıklı sistem renkleri için değerleri değiştirmiştir. Windows Forms Framework, Win32 çerçevesini temel alır. En iyi deneyim için Windows'un en son sürümünde çalıştırın ve bir test uygulamasına app.manifest dosyası ekleyerek ve aşağıdaki kodun açıklamasını kaldırarak en son işletim sistemi değişikliklerini kabul edin:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Geliştirilmiş klavye gezintisi

  • Denetimin ComboBoxDropDownStyle özelliği olarak ComboBoxStyle.DropDownList ayarlandığında ve formdaki sekme sırasındaki ilk denetim olduğunda, üst form klavye kullanılarak açıldığında bir odak dikdörtgeni görüntüler. Bu değişiklik öncesinde klavye odağı bu denetimdeydi, ancak odak göstergesi işlenmedi.

Geliştirilmiş Ekran Okuyucusu desteği

  • Denetim, MonthCalendar Ekran Okuyucusu'nun denetimin değerini daha önce okuyamadığı durumlarda okuyabilmesi de dahil olmak üzere denetime erişmek için yardımcı teknolojilere yönelik destek ekledi.

  • Denetim CheckedListBox artık bir CheckBox.CheckState özellik değiştirildiğinde Ekran Okuyucusu'na bildirir. Daha önce Ekran Okuyucusu bildirim almıyordu ve sonuç olarak kullanıcılara özelliğin CheckState güncelleştirildiği bildirilmedi.

  • Denetim, LinkLabel Ekran Okuyucusu'na denetimdeki metninin nasıl bilgilendirildiğini değiştirdi. Daha önce Ekran Okuyucusu bu metni iki kez duyurmuş ve bir kullanıcı tarafından görülemese de "&" sembollerini gerçek metin olarak okuyordu. Yinelenen metin Ekran Okuyucusu duyurularından ve gereksiz "&" simgelerinden kaldırıldı.

  • Denetim DataGridViewCell türleri artık salt okunur durumu Ekran Okuyucusu'na ve diğer yardımcı teknolojilere doğru şekilde bildirmektedir.

  • Ekran Okuyucusu artık [Çoklu Belge Arabirimi]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md) uygulamalarında alt pencerelerin Sistem Menüsünü okuyabilir.

  • Ekran Okuyucusu artık bir özelliği false olarak ayarlanmış denetimleri ToolStripItem.Enabled okuyabilirToolStripMenuItem. Daha önce Ekran Okuyucusu, içeriği okumak için devre dışı bırakılmış menü öğelerine odaklanamadı.

Veri Akışı Adı Değer
Kapsam Ana
Sürüm 4.8
Tür Yeniden Hedefleme

Etkilenen API’ler

Windows Presentation Foundation (WPF)

WPF'de erişilebilirlik geliştirmeleri

Ayrıntılar

Yüksek Karşıtlık geliştirmeleri

  • Denetimin Expander odağı artık görünür durumdadır. .NET Framework'ün önceki sürümlerinde değildi.
  • ve içindeki CheckBoxRadioButton metinlerin ne zaman seçildiğini denetler, artık önceki .NET Framework sürümlerine göre daha kolay görülebilir.
  • Devre dışı bırakılmış bir metnin kenarlığı artık devre dışı ComboBox bırakılmış metinle aynı renktedir. .NET Framework'ün önceki sürümlerinde değildi.
  • Devre dışı ve odaklanmış düğmeler artık doğru tema rengini kullanıyor. .NET Framework'ün önceki sürümlerinde bunu yapmadılar.
  • Artık bir ComboBox denetimin stili olarak ayarlandığında ToolBar.ComboBoxStyleKeyaçılan düğme görünür. .NET Framework'ün önceki sürümlerinde değildi.
  • Denetimdeki DataGrid sıralama göstergesi oku artık tema renklerini kullanıyor. .NET Framework'ün önceki sürümlerinde yoktu.
  • Varsayılan köprü stili artık fare üzerinde doğru tema rengine dönüşür. .NET Framework'ün önceki sürümlerinde yoktu.
  • Radyo düğmeleri üzerindeki Klavye odağı artık görünür durumdadır. .NET Framework'ün önceki sürümlerinde değildi.
  • Denetimin DataGrid onay kutusu sütunu artık klavye odağı geri bildirimi için beklenen renkleri kullanıyor. .NET Framework'ün önceki sürümlerinde yoktu.
  • Klavye odağı görselleri artık ve ListBox denetimlerinde ComboBox görünür. .NET Framework'ün önceki sürümlerinde değildi.

Ekran okuyucu etkileşimi geliştirmeleri

  • Expander denetimleri artık ekran okuyucular tarafından doğru bir şekilde grup (genişletme/daraltma) olarak duyurulur.
  • DataGridCell denetimleri artık ekran okuyucular tarafından veri kılavuzu hücresi (yerelleştirilmiş) olarak doğru şekilde duyurulur.
  • Ekran okuyucular artık düzenlenebilir ComboBoxbir öğesinin adını duyurur.
  • PasswordBox denetimleri artık ekran okuyucular tarafından "görünümde öğe yok" olarak duyuruldu.

LiveRegion desteği

Ekran Okuyucusu gibi ekran okuyucular, kullanıcıların bir uygulamanın kullanıcı arabirimini (UI) anlamasına yardımcı olur ve genellikle odak noktası olan ui öğesini açıklar. Ancak, kullanıcı arabirimi öğesi ekranın herhangi bir yerinde değişirse ve odak olamıyorsa, kullanıcı bilgilendirilmeyebilir ve önemli bilgileri kaçırabilir. LiveRegions bu sorunu çözmek için amaçlanıyor. Bir geliştirici, ekran okuyucuyu veya başka bir UI Otomasyonu istemcisini kullanıcı arabirimi öğesinde önemli bir değişiklik yapıldığını bildirmek için bunları kullanabilir. Ardından ekran okuyucu, kullanıcıya bu değişikliği nasıl ve ne zaman bildireceğine karar verebilir. LiveSetting özelliği, ekran okuyucunun kullanıcı arabiriminde yapılan değişikliği kullanıcıya bildirmenin ne kadar önemli olduğunu bilmesini de sağlar.

Öneri

Bu değişiklikleri kabul etme veya geri çevirme

Uygulamanın bu değişikliklerden yararlanabilmesi için .NET Framework 4.7.1 veya sonraki sürümlerinde çalışması gerekir. Uygulama, bu değişikliklerden aşağıdaki yollardan biriyle yararlanabilir:

  • Hedef .NET Framework 4.7.1. Bu, önerilen yaklaşımdır. Bu erişilebilirlik değişiklikleri ,NET Framework 4.7.1 veya sonraki sürümleri hedefleyen WPF uygulamalarında varsayılan olarak etkindir.

  • Aşağıdaki örnekte gösterildiği gibi, uygulama yapılandırma dosyasının bölümüne aşağıdaki AppContext Anahtarını<runtime> ekleyerek ve olarak ayarlayarak falseeski erişilebilirlik davranışlarını geri alır.

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

.NET Framework 4.7.1 veya üstünü hedefleyen ve eski erişilebilirlik davranışını korumak isteyen uygulamalar, bu AppContext anahtarını trueaçıkça olarak olarak ayarlayarak eski erişilebilirlik özelliklerinin kullanımını kabul edebilir. UI otomasyonuna genel bakış için bkz. UI Otomasyonu Genel Bakış.

Veri Akışı Adı Değer
Kapsam Ana
Sürüm 4.7.1
Tür Yeniden Hedefleme

Etkilenen API’ler

Selector SelectionChanged olayı ve SelectedValue özelliği

Ayrıntılar

.NET Framework 4.7.1'den başlayarak, Selector seçimi değiştiğinde olayı başlatmadan önce her zaman özelliğinin SelectedValueSelectionChanged değerini güncelleştirir. Bu, SelectedValue özelliğinin olayı oluşturmadan önce güncelleştirilen diğer seçim özellikleriyle (SelectedItem ve SelectedIndex) tutarlı olmasını sağlar.

.NET Framework 4.7 ve önceki sürümlerinde SelectedValue güncelleştirmesi çoğu durumda olaydan önce gerçekleşti, ancak seçim değişikliği özelliğin değiştirilmesinden SelectedValue kaynaklandıysa olaydan sonra gerçekleşti.

Öneri

.NET Framework 4.7.1 veya üstünü hedefleyen uygulamalar bu değişikliği geri çevirebilir ve uygulama yapılandırma dosyasının <runtime> bölümüne aşağıdakileri ekleyerek eski davranışı kullanabilir:

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

.NET Framework 4.7 veya önceki sürümleri hedefleyen ancak .NET Framework 4.7.1 veya sonraki sürümlerinde çalışan uygulamalar, uygulama .configuration dosyasının bölümüne aşağıdaki satırı <runtime> ekleyerek yeni davranışı etkinleştirebilir:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.1
Tür Yeniden Hedefleme

Etkilenen API’ler

TabControl SelectionChanged olayı ve SelectedContent özelliği

Ayrıntılar

.NET Framework 4.7.1'den başlayarak, TabControl seçimi değiştiğinde olayı başlatmadan önce özelliğinin SelectedContentSelectionChanged değerini güncelleştirir. .NET Framework 4.7 ve önceki sürümlerinde, SelectedContent güncelleştirmesi olaydan sonra gerçekleşti.

Öneri

.NET Framework 4.7.1 veya üstünü hedefleyen uygulamalar bu değişikliği geri çevirebilir ve uygulama yapılandırma dosyasının <runtime> bölümüne aşağıdakileri ekleyerek eski davranışı kullanabilir:

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

.NET Framework 4.7 veya önceki sürümleri hedefleyen ancak .NET Framework 4.7.1 veya sonraki sürümlerinde çalışan uygulamalar, uygulama .configuration dosyasının bölümüne aşağıdaki satırı <runtime> ekleyerek yeni davranışı etkinleştirebilir:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.1
Tür Yeniden Hedefleme

Etkilenen API’ler

WPF PackageDigitalSignatureManager için varsayılan karma algoritması artık SHA256'dır

Ayrıntılar

, System.IO.Packaging.PackageDigitalSignatureManager WPF paketleriyle ilgili olarak dijital imzalar için işlevsellik sağlar. .NET Framework 4.7 ve önceki sürümlerinde, bir paketin bölümlerini imzalamak için kullanılan varsayılan algoritma (PackageDigitalSignatureManager.DefaultHashAlgorithm) SHA1'ydi. SHA1 ile ilgili son güvenlik sorunlarından dolayı, bu varsayılan değer .NET Framework 4.7.1'den başlayarak SHA256 olarak değiştirildi. Bu değişiklik, XPS belgeleri de dahil olmak üzere tüm paket imzalamayı etkiler.

Öneri

.NET Framework 4.7.1'in altındaki bir çerçeve sürümünü hedeflerken bu değişikliği kullanmak isteyen bir geliştirici veya .NET Framework 4.7.1 veya üstünü hedeflerken önceki işlevselliği gerektiren bir geliştirici aşağıdaki AppContext bayrağını uygun şekilde ayarlayabilir. True değeri, SHA1'in varsayılan algoritma olarak kullanılmasına neden olur; SHA256'da hatalı sonuçlar.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.1
Tür Yeniden Hedefleme

Etkilenen API’ler

Windows Workflow Foundation (WF)

Windows Workflow Foundation (WF) iş akışı tasarımcısında erişilebilirlik iyileştirmeleri

Ayrıntılar

Windows Workflow Foundation (WF) iş akışı tasarımcısı erişilebilirlik teknolojileriyle çalışma şeklini geliştiriyor. Bu geliştirmeler aşağıdaki değişiklikleri içerir:

  • Bazı denetimlerde sekme sırası soldan sağa ve yukarıdan aşağıya olarak değiştirilir:
  • Etkinlik için bağıntı verilerini ayarlamak için bağıntıyı InitializeCorrelation başlat penceresi
  • , , SendSendReplyve ReceiveReply etkinlikleri için Receiveiçerik tanımı penceresi
  • Klavye aracılığıyla daha fazla işlev kullanılabilir:
  • Bir etkinliğin özellikleri düzenlenirken, özellik grupları ilk kez odaklandıklarında klavyeyle daraltılabilir.
  • Uyarı simgelerine artık klavyeyle erişilebilir.
  • Özellikler penceresi Diğer Özellikler düğmesine artık klavyeyle erişilebilir.
  • Klavye kullanıcıları artık İş Akışı Tasarım Aracı Bağımsız Değişkenler ve Değişkenler bölmelerindeki üst bilgi öğelerine erişebilir.
  • Odaklanmış öğelerin görünürlüğü iyileştirildi, örneğin:
  • İş Akışı Tasarım Aracı ve etkinlik tasarımcıları tarafından kullanılan veri kılavuzlarına satır ekleme.
  • ve SendReply etkinliklerindeki ReceiveReply alanlar arasında sekme tuşuyla gezinme.
  • Değişkenler veya bağımsız değişkenler için varsayılan değerleri ayarlama
  • Ekran okuyucular artık doğru şekilde tanıyabilir:
  • İş akışı tasarımcısında ayarlanan kesme noktaları.
  • FlowSwitch<T>, FlowDecisionve CorrelationScope etkinlikleri.
  • Etkinliğin Receive içeriği.
  • Etkinliğin InvokeMethod Hedef Türü.
  • Etkinlikteki TryCatch Özel Durum birleşik giriş kutusu ve Finally bölümü.
  • İleti Türü birleşik giriş kutusu, Bağıntı Başlatıcıları Ekle penceresindeki bölücü, İçerik Tanımı penceresi ve mesajlaşma etkinliklerindeki CorrelatesOn Defintion penceresi (Receive, Send, SendReplyve ReceiveReply).
  • Durum makinesi geçişleri ve geçiş hedefleri.
  • Etkinliklerle ilgili FlowDecision ek açıklamalar ve bağlayıcılar.
  • Etkinlikler için bağlam (sağ tıklama) menüleri.
  • Özellik değeri düzenleyicileri, Aramayı Temizle düğmesi, Kategoriye göre ve Alfabetik sıralama düğmeleri ve özellikler kılavuzundaki İfade Düzenleyicisi iletişim kutusu.
  • İş Akışı Tasarım Aracı yakınlaştırma yüzdesi.
  • ve Pick etkinliklerindeki Parallel ayırıcı.
  • Etkinlik InvokeDelegate .
  • Sözlük etkinlikleri (Microsoft.Activities.AddToDictionary<TKey,TValue>, vb Microsoft.Activities.RemoveFromDictionary<TKey,TValue>.) için Türleri Seç penceresi.
  • Gözat ve .NET Türünü Seç penceresi.
  • İş Akışı Tasarım Aracı içerik haritaları.
  • Yüksek Karşıtlık temalarını seçen kullanıcılar, İş Akışı Tasarım Aracı görünürlüğünde ve öğeler arasındaki daha iyi karşıtlık oranları ve odak öğeleri için kullanılan daha belirgin seçim kutuları gibi denetimlerinde birçok geliştirme görür.

Öneri

Yeniden barındırılan iş akışı tasarımcısına sahip bir uygulamanız varsa, uygulamanız şu eylemlerden birini gerçekleştirerek bu değişikliklerden yararlanabilir:

  • .NET Framework 4.7.1'i hedeflemek için uygulamanızı yeniden derleyin. Bu erişilebilirlik değişiklikleri varsayılan olarak etkindir.
  • Uygulamanız .NET Framework 4.7 veya önceki sürümleri hedeflediyse ancak .NET Framework 4.7.1 üzerinde çalışıyorsa, app.config dosyasının bölümüne aşağıdaki AppContext anahtarını<runtime> ekleyerek bu eski erişilebilirlik davranışlarını geri çevirebilir ve aşağıdaki örnekte gösterildiği gibi olarak ayarlayabilirsiniz 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.UseLegacyAccessibilityFeatures=false" />
  </runtime>
</configuration>

.NET Framework 4.7.1 veya üstünü hedefleyen ve eski erişilebilirlik davranışını korumak isteyen uygulamalar, bu AppContext anahtarını trueaçıkça olarak olarak ayarlayarak eski erişilebilirlik özelliklerinin kullanımını kabul edebilir.

Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.1
Tür Yeniden Hedefleme

.NET Framework 4.7.2

Temel

URI'lerde Unicode Çift Yönlü Denetim Karakterlerine İzin Ver

Ayrıntılar

Unicode, metnin yönünü belirtmek için kullanılan birkaç özel denetim karakteri belirtir. .NET Framework'ün önceki sürümlerinde, bu karakterler yüzde kodlanmış biçimlerinde olsalar bile tüm URI'lerden yanlış bir şekilde çıkarıldı. RFC 3987'yi daha iyi takip etmek için artık URI'lerde bu karakterlere izin verdik. Bir URI'de kodlanmamış olarak bulunduğunda, bunlar yüzde olarak kodlanır. Yüzde kodlanmış bulunduğunda olduğu gibi bırakılırlar.

Öneri

.NET Framework'ün 4.7.2 ile başlayan sürümlerini hedefleyen uygulamalar için Unicode çift yönlü karakter desteği varsayılan olarak etkindir. Bu değişiklik istenmeyen bir durumsa, uygulama yapılandırma dosyasının bölümüne aşağıdaki AppContextSwitchOverrides anahtarını ekleyerek bu değişikliği <runtime> devre dışı bırakabilirsiniz:

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

.NET Framework'ün önceki sürümlerini hedefleyen ancak .NET Framework 4.7.2 ile başlayan sürümler altında çalışan uygulamalar için Unicode çift yönlü karakter desteği varsayılan olarak devre dışıdır. Aşağıdaki AppContextSwitchOverrides anahtarını uygulama yapılandırma dosyasının <runtime> bölümüne ekleyerek etkinleştirebilirsiniz:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.2
Tür Yeniden Hedefleme

Etkilenen API’ler

DeflateStream, sıkıştırmayı açma için yerel API'leri kullanır

Ayrıntılar

.NET Framework 4.7.2'den başlayarak, sınıftaki T:System.IO.Compression.DeflateStream sıkıştırmayı kaldırma uygulaması varsayılan olarak yerel Windows API'lerini kullanacak şekilde değişmiştir. Bu genellikle önemli bir performans artışına neden olur. .NET Framework sürüm 4.7.2 veya üzerini hedefleyen tüm .NET uygulamaları yerel uygulamayı kullanır. Bu değişiklik davranışta aşağıdakiler gibi bazı farklılıklara neden olabilir:

  • Özel durum iletileri farklı olabilir. Ancak, oluşan özel durum türü aynı kalır.
  • Bir işlemi tamamlamak için yeterli belleğe sahip olmaması gibi bazı özel durumlar farklı şekilde işlenebilir.
  • Gzip üst bilgisini ayrıştırma konusunda bilinen farklar vardır (not: yalnızca GZipStream sıkıştırmayı açmak için ayarlanır):
  • Geçersiz üst bilgiler ayrıştırılırken farklı zamanlarda özel durumlar oluşabilir.
  • Yerel uygulama, gzip üst bilgisi (yani FLG) içindeki bazı ayrılmış bayraklar için değerlerin belirtimlere göre ayarlanmasını zorunlu kılır ve bu da daha önce geçersiz değerlerin yoksayıldığı bir özel durum oluşturmasına neden olabilir.

Öneri

Yerel API'lerle sıkıştırmayı kaldırma işlemi uygulamanızın davranışını olumsuz etkilediyse, app.config dosyanızın bölümüne anahtarı runtime ekleyip Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression olarak ayarlayarak truebu özelliği devre dışı bırakabilirsiniz:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
  </runtime>
</configuration>
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.2
Tür Yeniden Hedefleme

Etkilenen API’ler

System.Uri'nin tutarlı bir ayrılmış karakter kümesi kullandığına emin olun

Ayrıntılar

içinde System.Uri, bazen kodu çözülen belirli yüzde kodlanmış karakterler artık tutarlı bir şekilde kodlanmış olarak bırakılır. Bu, URI'nin yol, sorgu, parça veya userinfo bileşenlerine erişen özellikler ve yöntemler arasında gerçekleşir. Davranış yalnızca aşağıdakilerin ikisi de doğru olduğunda değişir:

  • URI, şu ayrılmış karakterlerden herhangi birinin kodlanmış biçimini içerir: :, ', (, )veya !*.
  • URI, Unicode veya kodlanmış ayrılmış olmayan bir karakter içerir. Yukarıdakilerin her ikisi de doğruysa, kodlanmış ayrılmış karakterler kodlanmış olarak bırakılır. .NET Framework'ün önceki sürümlerinde bunların kodu çözüldü.

Öneri

.NET Framework'ün 4.7.2 ile başlayan sürümlerini hedefleyen uygulamalar için, yeni kod çözme davranışı varsayılan olarak etkindir. Bu değişiklik istenmeyen bir durumsa, uygulama yapılandırma dosyasının bölümüne aşağıdaki AppContextSwitchOverrides anahtarını ekleyerek bu değişikliği <runtime> devre dışı bırakabilirsiniz:

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

.NET Framework'ün önceki sürümlerini hedefleyen ancak .NET Framework 4.7.2 ile başlayan sürümler altında çalışan uygulamalar için, yeni kod çözme davranışı varsayılan olarak devre dışı bırakılır. Uygulama yapılandırma dosyasının bölümüne aşağıdaki AppContextSwitchOverrides anahtarını <runtime> ekleyerek etkinleştirebilirsiniz:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.2
Tür Yeniden Hedefleme

Etkilenen API’ler

Resgen web'den içerik yüklemeyi reddediyor

Ayrıntılar

.resx dosyaları ikili biçimlendirilmiş giriş içerebilir. Güvenilmeyen bir konumdan indirilen bir dosyayı yüklemek için resgen'i kullanmayı denerseniz, giriş varsayılan olarak yüklenemez.

Öneri

Güvenilmeyen konumlardan ikili biçimlendirilmiş girişin yüklenmesini gerektiren Resgen kullanıcıları, giriş dosyasından web işaretini kaldırabilir veya geri çevirme ilginçliklerini uygulayabilir. Makine genelinde geri çevirme sorgularını uygulamak için aşağıdaki kayıt defteri ayarını ekleyin: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"

Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.2
Tür Yeniden Hedefleme

Taşınabilir PDB'ler kullanılırken elde edilen yığın izlemeleri artık istenirse kaynak dosya ve satır bilgilerini içerir

Ayrıntılar

.NET Framework 4.7.2'den başlayarak, taşınabilir PDB'ler kullanılırken elde edilen yığın izlemeleri, istendiğinde kaynak dosya ve satır bilgilerini içerir. .NET Framework 4.7.2'den önceki sürümlerde, açıkça istense bile taşınabilir PDB'ler kullanılırken kaynak dosya ve satır bilgileri kullanılamaz.

Öneri

.NET Framework 4.7.2'yi hedefleyen uygulamalar için, dosyanızın app.config bölümüne aşağıdakileri <runtime> ekleyerek taşınabilir PDB'leri kullanırken kaynak dosya ve satır bilgilerini devre dışı bırakabilirsiniz:

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

.NET Framework'ün önceki sürümlerini hedefleyen ancak .NET Framework 4.7.2 veya sonraki sürümlerinde çalışan uygulamalar için, dosyanızın app.config bölümüne aşağıdakileri <runtime> ekleyerek taşınabilir PDB'leri kullanırken kaynak dosya ve satır bilgilerini kabul edebilirsiniz:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.2
Tür Yeniden Hedefleme

Etkilenen API’ler

Windows Forms

.NET 4.7.2 için Windows Forms denetimlerinde erişilebilirlik geliştirmeleri

Ayrıntılar

Windows Forms Framework, Windows Forms müşterilerini daha iyi desteklemek için erişilebilirlik teknolojileriyle çalışma şeklini geliştirmektedir. Bunlar aşağıdaki değişiklikleri içerir:

  • Yüksek Karşıtlık modunda ekranı iyileştirmeye yönelik değişiklikler.
  • DataGridView ve MenuStrip denetimlerinde klavye gezintisini iyileştirmeye yönelik değişiklikler.
  • Ekran Okuyucusu ile etkileşimde yapılan değişiklikler.

Öneri

Bu değişiklikleri kabul etme veya geri çevirme Uygulamanın bu değişikliklerden yararlanabilmesi için .NET Framework 4.7.2 veya sonraki sürümlerinde çalışması gerekir. Uygulama, bu değişikliklerden aşağıdaki yollardan biriyle yararlanabilir:

  • .NET Framework 4.7.2'yi hedeflemek için yeniden derlenir. Bu erişilebilirlik değişiklikleri .NET Framework 4.7.2 veya sonraki bir sürümü hedefleyen Windows Forms uygulamalarında varsayılan olarak etkinleştirilir.
  • .NET Framework 4.7.1 veya önceki sürümünü hedefler ve aşağıdaki AppContext Anahtarını<runtime> uygulama yapılandırma dosyasının bölümüne ekleyerek ve aşağıdaki örnekte gösterildiği gibi olarak olarak ayarlayarak falseeski erişilebilirlik davranışlarından vazgeçer.
<?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>

.NET Framework 4.7.2'de eklenen erişilebilirlik özelliklerini kabul etmek için .NET Framework 4.7.1'in erişilebilirlik özelliklerini de kabul etmeniz gerektiğini unutmayın. .NET Framework 4.7.2 veya üstünü hedefleyen ve eski erişilebilirlik davranışını korumak isteyen uygulamalar, bu AppContext anahtarını trueaçıkça olarak olarak ayarlayarak eski erişilebilirlik özelliklerinin kullanımını kabul edebilir.

Yüksek Karşıtlık temalarında işletim sistemi tanımlı renklerin kullanımı

  • öğesinin ToolStripDropDownButton açılan oku artık Yüksek Karşıtlık temasında işletim sistemi tanımlı renkleri kullanıyor.
  • Buttonve RadioButtonCheckBox olarak ayarlanmış FlatStyle.Flat veya FlatStyle.Popup şimdi yüksek karşıtlık temasında işletim sistemi tanımlı renklerin seçili olduğu denetimler FlatStyle kullanılır. Daha önce metin ve arka plan renkleri karşıt değildi ve okunması zordu.
  • özelliğinin Enabled ayarlandığı false bir GroupBox içinde yer alan denetimler artık Yüksek Karşıtlık temasında işletim sistemi tanımlı renkler kullanacaktır.
  • ToolStripButton, ToolStripComboBoxve ToolStripDropDownButton denetimleri, Yüksek Karşıtlık Modunda artırılmış parlaklık karşıtlığı oranına sahiptir.
  • DataGridViewLinkCell özelliği için DataGridViewLinkCell.LinkColor varsayılan olarak Yüksek Karşıtlık modunda işletim sistemi tanımlı renkleri kullanır. NOT: Windows 10 bazı yüksek karşıtlıklı sistem renkleri için değerleri değiştirmiştir. Windows Forms Framework, Win32 çerçevesini temel alır. En iyi deneyim için Windows'un en son sürümünde çalıştırın ve bir test uygulamasına app.manifest dosyası ekleyerek ve aşağıdaki kodun açıklamasını kaldırarak en son işletim sistemi değişikliklerini kabul edin:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Geliştirilmiş Ekran Okuyucusu desteği

  • Ekran Okuyucusu artık bir metnini duyururken özelliğinin ToolStripMenuItemdeğerini ToolStripMenuItem.ShortcutKeys duyurur.
  • Ekran Okuyucusu artık özelliğinin ToolStripMenuItemEnabled olarak ayarlandığını falsegösterir.
  • Ekran Okuyucusu artık özelliği olarak ayarlandığında trueonay kutusunun durumu hakkında ListView.CheckBoxes geri bildirimde bulunur.
  • Ekran Okuyucusu Tarama Modu odak sırası artık ClickOnce indirme iletişim kutusundaki denetimlerin görsel sırasıyla tutarlıdır.

Geliştirilmiş DataGridView Erişilebilirlik desteği

Geliştirilmiş Görsel ipuçları

  • RadioButton Boş Text özelliği olan ve CheckBox denetimleri artık odağı aldığında bir odak göstergesi görüntüler.

Geliştirilmiş Özellik Kılavuzu Desteği

Veri Akışı Adı Değer
Kapsam Ana
Sürüm 4.7.2
Tür Yeniden Hedefleme

ContextMenuStrip.SourceControl özelliği iç içe geçmiş ToolStripMenuItems durumunda geçerli bir denetim içeriyor

Ayrıntılar

.NET Framework 4.7.1 ve önceki sürümlerde, ContextMenuStrip.SourceControl kullanıcı menüyü iç içe ToolStripMenuItem denetimlerden açtığında özellik yanlış null döndürür. .NET Framework 4.7.2 ve sonraki sürümlerinde SourceControl özellik her zaman gerçek kaynak denetimine ayarlanır.

Öneri

Bu değişiklikleri kabul etme veya devre dışı bırakma Bir uygulamanın bu değişikliklerden yararlanabilmesi için .NET Framework 4.7.2 veya sonraki sürümlerinde çalışması gerekir. Uygulama, bu değişikliklerden aşağıdaki yollardan biriyle yararlanabilir:

  • .NET Framework 4.7.2'yi hedefler. Bu değişiklik, .NET Framework 4.7.2 veya sonraki bir sürümü hedefleyen Windows Forms uygulamalarında varsayılan olarak etkindir.
  • .NET Framework 4.7.1 veya önceki bir sürümü hedefler ve aşağıdaki AppContext Anahtarını<runtime> app.config dosyasının bölümüne ekleyerek ve aşağıdaki örnekte gösterildiği gibi olarak olarak ayarlayarak falseeski erişilebilirlik davranışlarından vazgeçer.
<runtime>
  <AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>

.NET Framework 4.7.2 veya üstünü hedefleyen ve eski davranışı korumak isteyen uygulamalar, bu AppContext anahtarını trueaçıkça olarak olarak ayarlayarak eski kaynak denetimi değerinin kullanımını kabul edebilir.

Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.2
Tür Yeniden Hedefleme

Etkilenen API’ler

PrivateFontCollection.AddFontFile yöntemi Yazı tipi kaynaklarını serbest bırakır

Ayrıntılar

.NET Framework 4.7.1 ve önceki sürümlerinde sınıfı, System.Drawing.Text.PrivateFontCollection yöntemi kullanılarak AddFontFile(String) bu koleksiyona eklenen nesneler için Font atıldıktan sonra PrivateFontCollection GDI+ yazı tipi kaynaklarını serbest bırakmaz. .NET Framework 4.7.2 ve sonraki Dispose sürümlerinde koleksiyona dosya olarak eklenen GDI+ yazı tipleri yayınlanır.

Öneri

Bu değişiklikleri kabul etme veya devre dışı bırakma Bir uygulamanın bu değişikliklerden yararlanabilmesi için .NET Framework 4.7.2 veya sonraki sürümlerinde çalışması gerekir. Uygulama, bu değişikliklerden aşağıdaki yollardan biriyle yararlanabilir:

  • .NET Framework 4.7.2'yi hedeflemek için yeniden derlenir. Bu değişiklik, .NET Framework 4.7.2 veya sonraki bir sürümü hedefleyen Windows Forms uygulamalarında varsayılan olarak etkindir.
  • .NET Framework 4.7.1 veya önceki bir sürümü hedefler ve aşağıdaki AppContext Anahtarını<runtime> app.config dosyasının bölümüne ekleyerek ve aşağıdaki örnekte gösterildiği gibi olarak olarak ayarlayarak falseeski erişilebilirlik davranışlarından vazgeçer.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>

.NET Framework 4.7.2 veya üstünü hedefleyen ve eski davranışı korumak isteyen uygulamalar, bu AppContext anahtarını açıkça olarak ayarlayarak yazı tipi kaynaklarını serbest bırakmamayı truetercih edebilir.

Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.2
Tür Yeniden Hedefleme

Etkilenen API’ler

WinForm'un Etki alanı yukarı düğmesi ve aşağı düğme eylemleri artık eşitleniyor

Ayrıntılar

.NET Framework 4.7.1 ve önceki sürümlerde DomainUpDown denetim metni mevcut olduğunda denetimin DomainUpDown.UpButton() eylemi yoksayılır ve geliştiricinin eylem kullanmadan DomainUpDown.UpButton() önce denetim üzerinde eylem kullanması DomainUpDown.DownButton() gerekir. .NET Framework 4.7.2'den başlayarak ve DomainUpDown.UpButton()DomainUpDown.DownButton() eylemleri bu senaryoda bağımsız olarak çalışır ve eşitlenmiş durumda kalır.

Öneri

Bir uygulamanın bu değişikliklerden yararlanabilmesi için .NET Framework 4.7.2 veya sonraki sürümlerinde çalışması gerekir. Uygulama, bu değişikliklerden aşağıdaki yollardan biriyle yararlanabilir:

  • .NET Framework 4.7.2'yi hedeflemek için yeniden derlenir. Bu değişiklik, .NET Framework 4.7.2 veya sonraki bir sürümü hedefleyen Windows Forms uygulamalarında varsayılan olarak etkindir.
  • Aşağıdaki AppContext Anahtarını <runtime> uygulama yapılandırma dosyasının bölümüne ekleyerek ve aşağıdaki örnekte gösterildiği gibi olarak ayarlayarak falseeski kaydırma davranışını geri alır.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.2
Tür Yeniden Hedefleme

Etkilenen API’ler

Windows Presentation Foundation (WPF)

Klavye odağı artık WinForms/WPF barındırmanın birden çok katmanı arasında doğru şekilde hareket ediyor

Ayrıntılar

Sırayla WPF denetimlerini barındıran bir WinForms denetimini barındıran bir WPF uygulaması düşünün. Bu katmandaki ilk veya son denetim WPF System.Windows.Forms.Integration.ElementHostise, kullanıcılar WinForms katmanından çıkamayabilir. Bu değişiklik bu sorunu düzeltir ve kullanıcılar artık WinForms katmanından çıkabiliyor. WinForms katmanından hiçbir zaman kaçmasına gerek olmayan odak kullanan otomatik uygulamalar artık beklendiği gibi çalışmayabilir.

Öneri

.NET 4.7.2'nin altındaki bir çerçeve sürümünü hedeflerken bu değişikliği kullanmak isteyen bir geliştirici, değişikliğin etkinleştirilmesi için aşağıdaki AppContext bayrakları kümesini false olarak ayarlayabilir.

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

WPF uygulamalarının sonraki geliştirmeleri almak için tüm erken erişilebilirlik geliştirmelerini kabul etmesi gerekir. Başka bir deyişle, hem hem de Switch.UseLegacyAccessibilityFeaturesSwitch.UseLegacyAccessibilityFeatures.2 anahtarları ayarlanmalıdır.NET 4.7.2 veya üzerini hedeflerken önceki işlevselliği gerektiren bir geliştirici, değişikliğin devre dışı bırakılması için aşağıdaki AppContext bayrağını true olarak ayarlayabilir.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.2
Tür Yeniden Hedefleme

WPF'nin İşaretleme Derleyicisi için varsayılan karma algoritması artık SHA256'dır

Ayrıntılar

WPF MarkupCompiler, XAML işaretleme dosyaları için derleme hizmetleri sağlar. .NET Framework 4.7.1 ve önceki sürümlerinde sağlama toplamları için kullanılan varsayılan karma algoritması SHA1'ydi. SHA1 ile ilgili son güvenlik endişeleri nedeniyle, bu varsayılan değer .NET Framework 4.7.2'den başlayarak SHA256 olarak değiştirildi. Bu değişiklik, derleme sırasında işaretleme dosyaları için tüm sağlama toplamı oluşturmayı etkiler.

Öneri

.NET Framework 4.7.2 veya üstünü hedefleyen ve SHA1 karma davranışına geri dönmek isteyen bir geliştiricinin aşağıdaki AppContext bayrağını ayarlaması gerekir.

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

.NET 4.7.2'nin altındaki bir çerçeve sürümünü hedeflerken SHA256 karma özelliğini kullanmak isteyen bir geliştiricinin aşağıdaki AppContext bayrağını ayarlaması gerekir. .NET Framework'ün yüklü sürümünün 4.7.2 veya üzeri olması gerektiğini unutmayın.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
Veri Akışı Adı Değer
Kapsam Saydam
Sürüm 4.7.2
Tür Yeniden Hedefleme

WPF AppDomain Kapatma İşlemeSi Artık Zayıf Olayların Temizlenmesinde Dispatcher.Invoke Çağırabilir

Ayrıntılar

.NET Framework 4.7.1 ve önceki sürümlerde WPF, AppDomain kapatma sırasında .NET sonlandırıcı iş parçacığında bir oluşturur System.Windows.Threading.Dispatcher . Bu, .NET Framework 4.7.2 ve sonraki sürümlerinde, zayıf olayların iş parçacığını algılayan temizliği yapılarak düzeltildi. Bu nedenle, WPF temizleme işlemini tamamlamak için çağırabilir Dispatcher.Invoke . Bazı uygulamalarda, sonlandırıcı zamanlamadaki bu değişiklik AppDomain veya işlem kapatma sırasında özel durumlara neden olabilir. Bu durum genellikle işlem veya AppDomain kapatma işleminden önce çalışan iş parçacıklarında çalışan dağıtıcıları doğru şekilde kapatmayan uygulamalarda görülür. Bu tür uygulamalar dağıtıcıların ömrünü düzgün bir şekilde yönetmeye özen göstermelidir.

Öneri

.NET Framework 4.7.2 ve sonraki sürümlerinde geliştiriciler, temizleme değişikliği nedeniyle oluşabilecek zamanlama sorunlarını hafifletmeye (ancak ortadan kaldırmamaya) yardımcı olmak için bu düzeltmeyi devre dışı bırakabilir. Temizlemedeki değişikliği devre dışı bırakmak için aşağıdaki AppContext bayrağını kullanın.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.2
Tür Yeniden Hedefleme

WPF Ana/Ayrıntı senaryosunda ADO verilerini görüntülerken birincil anahtarı değiştirme

Ayrıntılar

türündeki Orderbir ADO koleksiyonunuz olduğunu ve bunu birincil anahtar "OrderID" aracılığıyla türdeki öğeler Detail koleksiyonuyla ilgili "OrderDetails" adlı bir ilişki içerdiğini varsayalım. WPF uygulamanızda, belirli bir siparişin ayrıntılarına bir liste denetimi bağlayabilirsiniz:

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

burada DataContext bir Orderşeklindedir. WPF, ana öğenin değeriyle eşleşen OrderID tüm Detail öğelerin D koleksiyonu olan OrderID özelliğinin değerini OrderDetails alır. Davranış değişikliği, ana öğenin birincil anahtarını OrderID değiştirdiğinizde ortaya çıkar. ADO, Ayrıntılar koleksiyonundaki etkilenen kayıtların her birinin (yani D koleksiyonuna kopyalanan kayıtların) her birini otomatik olarak değiştirir OrderID . Peki D'ye ne olacak?

  • Eski davranış: D koleksiyonu temizlendi. Ana öğe özelliği OrderDetailsiçin değişiklik bildirimi oluşturmaz. ListBox artık boş olan D koleksiyonunu kullanmaya devam eder.
  • Yeni davranış: D koleksiyonu değişmedi. Öğelerinin her biri özelliği için bir değişiklik bildirimi oluşturur OrderID . ListBox, D koleksiyonunu kullanmaya devam eder ve yeni OrderIDile ayrıntıları görüntüler. WPF, D koleksiyonunu farklı bir şekilde oluşturarak yeni davranışı uygular: bağımsız değişkeni olarak ayarlanmış trueADO yöntemini DataRowView.CreateChildView(DataRelation, Boolean)followParent çağırarak.

Öneri

Bir uygulama, aşağıdaki AppContext anahtarını kullanarak yeni davranışı alır.

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

Anahtar varsayılan olarak true .NET 4.7.1 veya üzerini hedefleyen uygulamalar için (eski davranış) ve false .NET 4.7.2 veya üzerini hedefleyen uygulamalar için (yeni davranış) olarak belirlenmiştir.

Veri Akışı Adı Değer
Kapsam İkincil
Sürüm 4.7.2
Tür Yeniden Hedefleme

Denetimlerde içerik olmadığında RadioButton ve CheckBox için WPF FocusVisual artık doğru görüntülüyor

Ayrıntılar

.NET Framework 4.7.1 ve önceki sürümlerinde WPF System.Windows.Controls.CheckBox ve System.Windows.Controls.RadioButton tutarsız ve Klasik ve Yüksek Karşıtlık temalarında yanlış odak görselleri var. Bu sorunlar, denetimlerde herhangi bir içerik ayarlanmadığı durumlarda oluşur. Bu, temalar arasındaki geçişin kafa karıştırıcı olmasını ve odak görselinin görülmesini zorlaştırabilir. .NET Framework 4.7.2'de bu görseller artık temalar arasında daha tutarlıdır ve Klasik ve Yüksek Karşıtlık temalarında daha kolay görünür.

Öneri

.NET 4.7.1'deki davranışa geri dönmek isteyen .NET Framework 4.7.2'yi hedefleyen bir geliştiricinin aşağıdaki AppContext bayrağını ayarlaması gerekir.

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

.NET 4.7.2'nin altındaki bir çerçeve sürümünü hedeflerken bu değişikliği kullanmak isteyen bir geliştiricinin aşağıdaki AppContext bayraklarını ayarlaması gerekir. Tüm bayrakların uygun şekilde ayarlanması ve .NET Framework'ün yüklü sürümünün 4.7.2 veya üzeri olması gerektiğini unutmayın. WPF uygulamalarının en son iyileştirmeleri almak için önceki tüm erişilebilirlik geliştirmelerini kabul etmek için gereklidir. Bunu yapmak için hem AppContext anahtarlarının 'Switch.UseLegacyAccessibilityFeatures' hem de 'Switch.UseLegacyAccessibilityFeatures.2' anahtarlarının false olarak ayarlandığından emin olun.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.2
Tür Yeniden Hedefleme

WPF TextBox/PasswordBox Metin Seçimi Sistem Renklerini Takip Etmiyor

Ayrıntılar

.NET Framework 4.7.1 ve önceki sürümlerinde WPF System.Windows.Controls.TextBox ve System.Windows.Controls.PasswordBox yalnızca Donatıcı katmanında bir metin seçimi işlenebilir. Bazı sistem temalarında bu, metni tıkar ve okunmasını zorlaştırır. .NET Framework 4.7.2 ve sonraki sürümlerde geliştiriciler, bu sorunu hafifleten Donatıcı tabanlı olmayan bir seçim işleme düzenini etkinleştirme seçeneğine sahiptir.

Öneri

Bu değişikliği kullanmak isteyen bir geliştiricinin aşağıdaki AppContext bayrağını uygun şekilde ayarlaması gerekir. Bu özelliği kullanmak için yüklü .NET Framework sürümü 4.7.2 veya üzeri olmalıdır. Donatıcı tabanlı olmayan seçimi etkinleştirmek için aşağıdaki AppContext bayrağını kullanın.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.2
Tür Yeniden Hedefleme

Windows Workflow Foundation (WF)

IWorkflowInstanceManagement.TransactedCancel ve IWorkflowInstanceManagement.TransactedTerminate için sonsuz özyinelemeden kaçınma

Ayrıntılar

İş akışı hizmet örneğini iptal etmek veya sonlandırmak için veya IWorkflowInstanceManagement.TransactedTerminate API'leri kullanırken IWorkflowInstanceManagement.TransactedCancel bazı durumlarda, çalışma zamanı isteği işlemenin bir parçası olarak hizmet örneğini kalıcı hale getirme girişiminde bulununca Workflow iş akışı örneği sonsuz özyineleme nedeniyle yığın taşmasıyla karşılaşabilir. Sorun, iş akışı örneği başka bir hizmete yönelik bekleyen başka bir WCF isteğinin tamamlanmasını beklediği bir durumdaysa oluşur. ve TransactedTerminate işlemleri, TransactedCancel iş akışı hizmeti örneği için kuyruğa alınmış iş öğeleri oluşturur. Bu iş öğeleri, isteğin işlenmesinin TransactedCancel/TransactedTerminate bir parçası olarak yürütülmedi. İş akışı hizmeti örneği bekleyen diğer WCF isteğinin tamamlanmasını beklerken meşgul olduğundan, oluşturulan iş öğesi kuyruğa alınmış olarak kalır. İşlem TransactedCancel/TransactedTerminate tamamlanır ve denetim istemciye geri döndürülür. İşlemle TransactedCancel/TransactedTerminate ilişkili işlem işlemeye çalıştığında, iş akışı hizmeti örneği durumunu kalıcı hale getirmek gerekir. Ancak örnek için bekleyen WCF bir istek olduğundan, İş Akışı çalışma zamanı iş akışı hizmeti örneğini kalıcı hale getirmez ve sonsuz bir özyineleme döngüsü yığın taşmasına neden olur. TransactedTerminate Ve TransactedCancel yalnızca bellekte bir iş öğesi oluşturduğundan, bir işlemin mevcut olması herhangi bir etkiye sahip değildir. İşlemin geri alınması iş öğesini atmıyor. .NET Framework 4.7.2'den başlayarak bu sorunu gidermek için, iş akışı hizmetine ve TransactedTerminateiçin TransactedCancel işlemleri yoksaymalarını söyleyen bir AppSetting ekledikweb.config/app.config. Bu, işlemin iş akışı örneğinin kalıcı olmasını beklemeden işlemesine olanak tanır. Bu özelliğin AppSetting'i olarak adlandırılır microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate. değeri true , işlemin yoksayılması gerektiğini ve bu nedenle yığın taşmasını önlediğini gösterir. Bu AppSetting'in varsayılan değeridir, falsebu nedenle mevcut iş akışı hizmeti örnekleri etkilenmez.

Öneri

AppFabric veya başka bir IWorkflowInstanceManagement istemci kullanıyorsanız ve bir iş akışı örneğini iptal etmeye veya sonlandırmaya çalışırken iş akışı hizmeti örneğinde yığın taşmasıyla karşılaşıyorsanız, iş akışı hizmeti için web.config/app.config dosyasının bölümüne aşağıdakileri <appSettings> ekleyebilirsiniz:

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

Sorunla karşılaşmıyorsanız, bunu yapmanız gerekmez.

Veri Akışı Adı Değer
Kapsam Edge
Sürüm 4.7.2
Tür Yeniden Hedefleme