.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.NullReferenceException
P:System.Web.HttpRuntime.AppDomainAppPath
oluşturur. .NET Framework 4.6.1 ve önceki sürümlerinde çalışma zamanı bir T:System.ArgumentNullException
oluş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.ArgumentNullException
oluş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 |
Ağ
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
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
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.DoNotAddrOfCspParentWindowHandle
true
olarak 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 false
ayarlayabilir.
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
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
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
- DataContractJsonSerializer.WriteObject(Stream, Object)
- DataContractJsonSerializer.WriteObject(XmlDictionaryWriter, Object)
- DataContractJsonSerializer.WriteObject(XmlWriter, Object)
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 ekleyerekSwitch.UseLegacyAccessibilityFeatures
ve aşağıdaki örnekte gösterildiği gibi olarak ayarlayarakfalse
eski 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ı true
açı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
- System.Security.Cryptography.Pkcs.CmsSigner
- System.Security.Cryptography.Xml.SignedXml
- System.Security.Cryptography.Xml.Reference
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 ayarlayarakfalse
eski 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ı true
açı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:
ToolStripSplitButton ve ComboBox denetimleri Genişlet/Daralt desenini destekler.
Denetimin ToolStripMenuItem ControlType özellik değeri ControlType.MenuItemvardır.
Denetimi özelliği ToolStripItem ve Genişlet/Daralt desenini desteklerNameProperty.
Denetim, ToolStripDropDownItem açılan menü genişletildiğinde veya daraltıldığında StateChange ve NameChange'i belirtmeyi destekler AccessibleEvents .
Denetimin ToolStripDropDownButtonControlType özellik değeri vardır ControlType.MenuItem.
Denetimi DataGridViewCheckBoxCell destekler TogglePattern.
NumericUpDown ve DomainUpDown denetimleri özelliğini destekler NameProperty ve ControlType değerini içerirControlType.Spinner.
PropertyGrid denetiminde geliştirmeler .NET Framework 4.7.1, PropertyBrowser denetimine aşağıdaki iyileştirmeleri ekler:Kullanıcı denetime yanlış bir değer PropertyGrid girdiğinde görüntülenen hata iletişim kutusundaki Ayrıntılar düğmesi Genişlet/Daralt desenini, durum ve ad değişikliği bildirimlerini ve değeri ControlType.MenuItemolan bir ControlType özelliğini destekler.
Hata iletişim kutusunun Ayrıntılar düğmesi genişletildiğinde görüntülenen ileti bölmesi artık klavyeyle erişilebilir durumdadır ve Ekran Okuyucusu'nun hata iletisinin içeriğini duyurmasına olanak tanır.
AccessibleRole Denetimdeki satırların PropertyGrid sayısı "Satır" olan "Hücre" olarak değiştirildi. Hücre, uygun klavye kısayollarını ve Ekran Okuyucusu duyurularını desteklemesini sağlayan UIA ControlType "DataItem" ile eşler.
Denetimin PropertyGrid ControlType özellik değerine ControlType.Buttonsahip olarak PropertySort.Categorized ayarlanmış bir PropertySort özelliği olduğunda PropertyGrid üst bilgi öğelerini temsil eden denetim satırları.
Denetimin PropertyGrid Genişlet/Daralt desenini PropertyGriddestekleyecek şekilde ayarlanmış PropertySort.Categorized bir PropertySort özelliği olduğunda üst bilgi öğelerini temsil eden denetim satırları.
Kılavuz ile üstündeki ToolBar arasında geliştirilmiş klavye gezintisi. "Shift-Tab" tuşlarına basıldığında, tüm ToolBar yerine ilk ToolBar düğmesi seçilir.
PropertyGrid Yüksek Karşıtlık modunda görüntülenen denetimler artık ToolBar düğmesinin çevresine geçerli PropertySort özellik değerine karşılık gelen bir odak dikdörtgeni çizecek.
PropertyGridYüksek Karşıtlık modunda ve özelliği ayarlanmış PropertySort.Categorized olarak PropertySort görüntülenen denetimler artık kategori üst bilgilerinin arka planını yüksek karşıtlıklı bir renkte görüntüleyecek.
PropertyGrid denetimler, odağı olan ToolBar öğeleriyle özelliğin geçerli değerini PropertySort gösteren ToolBar öğelerini daha iyi ayırt eder. Bu düzeltme, Yüksek Karşıtlık değişikliğinden ve Yüksek Karşıtlık dışı senaryolar için yapılan değişikliklerden oluşur.
PropertyGrid özelliğinin geçerli değerini PropertySort gösteren ToolBar öğelerini denetleme özelliğini destekler TogglePattern.
Hizalama Seçici'de seçili hizalamayı ayırt etmek için geliştirilmiş Ekran Okuyucusu desteği.
Bir formda boş PropertyGrid bir denetim görüntülendiğinde, artık odak daha önce görüntülenmeyeceği bir yere gelecek.
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
- ToolStripDropDownButton.CreateAccessibilityInstance()
- DomainUpDown.DomainUpDownAccessibleObject.Name
- MonthCalendar.AccessibilityObject
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 ayarlayarakfalse
eski 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ı true
açı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
- AutomationElementIdentifiers.LiveSettingProperty
- AutomationElementIdentifiers.LiveRegionChangedEvent
- System.Windows.Automation.AutomationLiveSetting
- AutomationProperties.LiveSettingProperty
- AutomationProperties.SetLiveSetting(DependencyObject, AutomationLiveSetting)
- AutomationProperties.GetLiveSetting(DependencyObject)
- AutomationPeer.GetLiveSettingCore()
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>
, vbMicrosoft.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 ayarlayabilirsinizfalse
.
<?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ı true
açı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 true
bu ö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 ayarlayarakfalse
eski 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ı true
açı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ı
false
gösterir. - Ekran Okuyucusu artık özelliği olarak ayarlandığında
true
onay 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
- Içindeki DataGridView satırlar artık klavye kullanılarak sıralanabilir. Artık bir kullanıcı geçerli sütuna göre sıralamak için F3 tuşunu kullanabilir.
- DataGridView.SelectionMode olarak ayarlandığındaDataGridViewSelectionMode.FullRowSelect, kullanıcı geçerli satırdaki hücreler arasında gezinirken sütun üst bilgisi geçerli sütunu gösterecek şekilde renk değiştirir.
- DataGridViewCell.DataGridViewCellAccessibleObject.Parent özelliği artık doğru üst denetimi döndürür.
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
Denetim PropertyGrid alt öğeleri artık özelliği için IsReadOnlyProperty yalnızca bir PropertyGrid öğesi etkinleştirildiğinde bir döndürür
true
.Denetim PropertyGrid alt öğeleri artık yalnızca bir PropertyGrid öğesi kullanıcı tarafından değiştirilebiliyorsa özelliği için IsEnabledProperty bir
Geliştirilmiş klavye gezintisifalse
döndürür. UI otomasyonuna genel bakış için bkz. UI Otomasyonu Genel Bakış.ToolStripButton artık özelliği olarak ayarlanmış bir ToolStripPanel içinde olduğunda odaklanmaya TabStop
true
izin verir.
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 ayarlayarakfalse
eski 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ı true
açı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 ayarlayarakfalse
eski 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ı true
tercih 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 ayarlayarakfalse
eski 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.ElementHost
ise, 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.UseLegacyAccessibilityFeatures
Switch.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 Order
bir 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
OrderDetails
iç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 yeniOrderID
ile 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ıştrue
ADO 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 TransactedTerminate
iç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, false
bu 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 |