Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede , .NET Framework 4.7, 4.7.1ve 4.7.2ile sunulan uygulama uyumluluk sorunları listelenir.
.NET Framework 4.7
ASP.NET
HttpRuntime.AppDomainAppPath NullReferenceException Oluşturur
Detaylar
.NET Framework 4.6.2'de, null karakterler içeren bir T:System.NullReferenceException değeri alınırken çalışma zamanı bir P: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 .NET Framework 4.6.2 üzerinde çalışıyorsa
T:System.NullReferenceException'ı işleyin. - Önceki davranışı geri yükleyen ve bir
T:System.ArgumentNullExceptionoluşturan .NET Framework 4.7'ye yükseltin.
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| Sürüm | 4.6.2 |
| Tür | Yeniden Hedefleme |
Etkilenen API'ler
Oturum başına eşzamanlı istekleri azaltma
Detaylar
.NET Framework 4.6.2 ve önceki sürümlerinde, ASP.NET aynı Sessionid ile olan istekleri sıralı olarak yürütür ve ASP.NET, varsayılan olarak Sessionid'yi her zaman tanımlama bilgileri aracılığıyla verir. Bir sayfanın yanıt vermesi uzun sürerse, yalnızca tarayıcıda F5 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, yeni davranışı geri çevirmek için web.config dosyanıza aşağıdaki ayarı ekleyebilirsiniz.
<appSettings>
<add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| Sürüm | 4.7 |
| Tür | Yeniden Hedefleme |
Ağ
ServicePointManager.SecurityProtocol'un varsayılan değeri SecurityProtocolType.System.Default'dır
Detaylar
.NET Framework 4.7'yi hedefleyen uygulamalardan başlayarak, ServicePointManager.SecurityProtocol özelliğinin varsayılan değeri 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, ServicePointManager.SecurityProtocol özelliğinin 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Ö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, ServicePointManager.SecurityProtocol özelliğinin 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 <runtime> bölümü hem de Switch.System.Net.DontEnableSystemDefaultTlsVersions geri çevirme anahtarı gösterilmektedir:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| Sürüm | 4.7 |
| Tür | Yeniden Hedefleme |
Etkilenen API'ler
SslStream TLS Uyarılarını destekler
Detaylar
Başarısız bir TLS el sıkışmasının ardından, ilk G/Ç Okuma/Yazma işlemi tarafından iç System.IO.IOException özel durumu olan bir System.ComponentModel.Win32Exception oluşturulur.
.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
Read(Byte[], Int32, Int32)
/
Write(Byte[], Int32, Int32) gibi ağ I/O API’lerini çağıran uygulamalar IOException veya System.TimeoutExceptionele almalıdır.
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
falseolarak ayarlayın.Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
.NET Framework 2.0'da sunulan ParentWindowHandle değeri, 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, Windows Forms uygulaması aşağıdaki gibi kodla ParentWindowHandle özelliğini ayarlayabilir:
cspParameters.ParentWindowHandle = form.Handle;
.NET Framework'ün önceki sürümlerinde, değerin bellekte System.IntPtr değerinin bulunduğu konumu temsil eden bir olması beklenirdi. Özelliği Windows 7 ve önceki sürümlerde form.Handle olarak ayarlamanın hiçbir etkisi yoktu, ancak Windows 8 ve sonraki sürümlerde "System.Security.Cryptography.CryptographicException: Parametre yanlış." sonucunu verir.
Öneri
.NET Framework 4.7 veya daha üstünü hedefleyen ve üst pencere ilişkisini kaydetmek isteyen uygulamalara, basitleştirilmiş şekli kullanmaları önerilir:
cspParameters.ParentWindowHandle = form.Handle;
Geçirecek doğru değerin, değeri tutan bir bellek konumunun adresi olduğunu form.Handle kullanıcılar, AppContext anahtarını Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandletrueolarak ayarlayarak davranış değişikliğini geri çevirebilir:
- Build 2015'teki .NET Duyuruları'nda açıklandığı gibi AppContext'te programatik olarak compat 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ı falseolarak ayarlayabilir.
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| Sürüm | 4.7 |
| Tür | Yeniden Hedefleme |
Etkilenen API'ler
SslStream TLS Uyarılarını destekler
Detaylar
Başarısız bir TLS el sıkışmasının ardından, ilk G/Ç Okuma/Yazma işlemi tarafından iç System.IO.IOException özel durumu olan bir System.ComponentModel.Win32Exception oluşturulur.
.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
Read(Byte[], Int32, Int32)
/
Write(Byte[], Int32, Int32) gibi ağ I/O API’lerini çağıran uygulamalar IOException veya System.TimeoutExceptionele almalıdır.
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
falseolarak ayarlayın.Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
.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 <runtime> bölümüne aşağıdaki satırı ekleyerek bu özelliği geri çevirebilirsiniz:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
.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>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
Bazı durumlarda, dokunmatik özellikli sistemlerde içindeki System.Windows.Intput.PenContext.Disable yöntemine çağrılar, yeniden giriş nedeniyle işlenmeyen bir T:System.ArgumentException oluşturabilir.
Ö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.
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| Sürüm | 4.6.1 |
| Tür | Yeniden Hedefleme |
ImageSourceConverter.ConvertFrom'dan özel durum işleme kodunda NullReferenceException
Detaylar
ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) için özel durum işleme kodundaki bir hata, hedeflenen özel durum (System.NullReferenceException veya System.IO.DirectoryNotFoundException) yerine yanlış bir System.IO.FileNotFoundException oluşturmasına 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 System.NullReferenceException oluşturmaya devam eder. .NET Framework 4.7 ve üzerini hedefleyen geliştiriciler uygun istisnaları görmelidir.
Öneri
.NET Framework 4.7 veya sonraki sürümleri hedeflerken System.NullReferenceException almaya 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>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| Sürüm | 4.7 |
| Tür | Yeniden Hedefleme |
Etkilenen API'ler
WPF Grid'de uzayın yıldız sütunlarına tahsisi
Detaylar
.NET Framework 4.7'den başlayarak WPF, Grid *-sütunlara alan ayırmak için kullandığı algoritmanın 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 kararsızlığı (taşma, altında kalma, duyarlık kaybı) ile karşılaşacak kadar yeterince farklı olduğunda.
- Düzen yuvarlama etkinleştirildiğinde ve etkin ekran 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 Izgara'nın 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 kalmadıysa, toplam tahsis çok büyük olacaktır.
Toplam ayırma, Kılavuz genişliğini karşılamakta yetersiz kalabilir. Bu, #1 numaralı çift sorunun karşılığıdır ve oransal paylaşımı maksimum boyutunu aşan bir sütuna ayrılırken, eksikliği tamamlayacak başka sütunlar olmadığında ortaya çıkar.
İ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 pay oranının min (veya max) kısıtlamasını ihlal ettiği *sütunlar A, B ve C'ye (bu sırayla) ayrım yapıldığında ortaya çıkar. Yukarıda olduğu gibi, bu, C sütununun kullanılabilir alanını değiştirir. Sütun C, A sütununa kıyasla daha az (veya daha fazla) orantılı pay alır.
Son derece büyük ağırlıkları (> 10^298) olan sütunların tümü 10^298 ağırlığında 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 ağırlıklara sahip sütunlar doğru bir şekilde ele alınmaz. (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, alt akış, hassasiyet kaybı ve benzer kayan nokta sorunlarını önlerken 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 minimum genişliğinden daha küçük veya maksimum genişliğinden daha büyük olmaz.
- 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, sınırlı sütunlara (sabit, otomatik ve *-sütunlar, en küçük veya en fazla genişlikleri ayrılmış olanlar) ayrıldıktan sonra kullanılabilir genişliğe 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>
true değeri eski algoritmayı seçer false yeni algoritmayı seçer.
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| Sürüm | 4.7 |
| Tür | Yeniden Hedefleme |
WPF Pointer-Based Dokunma Yığını
Detaylar
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ı kalemle çizim desteği yok.
- Mürekkep oluşturma ve StylusPlugins çalışmaya devam etse de, bu işlemler kullanıcı arabirimi iş parçacığında gerçekleştirileceğinden 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
- Manipülasyon 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 ve Bırak artık dokunma/ekran kalemi etkinliklerinde 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.
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| Sürüm | 4.7 |
| Tür | Yeniden Hedefleme |
Windows Workflow Foundation (WF)
İş akışı kontrol toplamları MD5'ten SHA1'e değiştirildi
Detaylar
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' AppContext anahtarını true olarak ayarlamayı denemeyi düşünebilirsiniz. Kodda:
System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true);
Veya yapılandırmada:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
</runtime>
</configuration>
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| 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
Detaylar
.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 Designer'ın 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.
-
Switch.UseLegacyAccessibilityFeaturesAppContext anahtarını devenv.exe.config dosyasındaki<runtime>bölümüne ekleyerek ve aşağıdaki örnekte gösterildiği gibifalseolarak ayarlayarak eski erişilebilirlik davranışlarını devre dışı bırakın.
<?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ı açıkça trueolarak ayarlayarak eski erişilebilirlik özelliklerinin kullanımını kabul edebilir.
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| Sürüm | 4.7.1 |
| Tür | Yeniden Hedefleme |
Çekirdek
SerialPort arka plan iş dizisi özel durumları
Detaylar
SerialPort akışlarla oluşturulan arka plan iş parçacığı, işletim sistemi istisnaları oluştuğunda artık işlemi sonlandırmıyor.
.NET Framework 4.7 ve önceki sürümlerini hedefleyen uygulamalarda, SerialPort akışıyla oluşturulan bir arka plan iş parçacığında bir işletim sistemi özel durumu oluştuğunda bir işlem sonlandırılır.
.NET Framework 4.7.1 veya sonraki bir sürümü hedefleyen uygulamalarda arka plan iş parçaları etkin seri bağlantı noktasıyla ilgili işletim sistemi olaylarını bekler ve bazı durumlarda, örneğin seri bağlantı noktasının aniden kaldırılması gibi, kilitlenebilir.
Öneri
.NET Framework 4.7.1'i hedefleyen uygulamalar için, <runtime> dosyanızın app.config bölümüne aşağıdakileri ekleyerek özel durum işlemeyi devre dışı bırakabilirsiniz:
<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, <runtime> dosyanızın app.config bölümüne aşağıdakileri ekleyerek özel durum işlemeyi kabul edebilirsiniz:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| Sürüm | 4.7.1 |
| Tür | Yeniden Hedefleme |
Etkilenen API'ler
ServiceBase, OnStart özel durumlarını iletmiyor
Detaylar
.NET Framework 4.7 ve önceki sürümlerinde, hizmet başlangıcında oluşan istisnalar ServiceBase.Runçağırana iletilmez.
.NET Framework 4.7.1'i hedefleyen uygulamalardan başlayarak, çalışma zamanı başlatılamayan hizmetler için ServiceBase.Run'a özel durumları yayar.
Ö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 AppContextSwitchOverrides bölümüne aşağıdaki runtime öğesini ekleyerek bunu 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 AppContextSwitchOverrides bölümüne aşağıdaki runtime öğesini ekleyin:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| 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
Detaylar
.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.Güvenli Olmayan Hash Algoritmalarını Kullan
- 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, uygulama yapılandırma dosyanızın çalışma zamanı bölümüne aşağıdaki yapılandırma anahtarını 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ümleri 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" />
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| 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
Detaylar
.NET Framework 4.6.2'den başlayarak, SignedXml.GetPublicKey yöntemi tarafından 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 kullanmaktan, certificate.GetAnyPublicKey'ye ileten iç RSACertificateExtensions.GetRSAPublicKey'i kullanmaya değiştirilmesidir.
Ö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" />
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
.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>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| Sürüm | 4.7.1 |
| Tür | Yeniden Hedefleme |
Windows Forms
Windows Forms denetimlerinde erişilebilirlik geliştirmeleri
Detaylar
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:
- Klavye ile çeşitli açılır seçim pencerelerinde daha iyi gezinme.
- Gereksiz sekme durakları azaltıldı.
- Denetim türlerinin daha iyi raporlanması.
- Geliştirilmiş anlatıcı 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 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:
- .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.
- Eski erişilebilirlik davranışlarından vazgeçer; aşağıdaki AppContext anahtarını, app.config dosyasının
<runtime>bölümüne ekleyipfalseolarak ayarlayarak.
<?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ı açıkça trueolarak ayarlayarak eski erişilebilirlik özelliklerinin kullanımını kabul edebilir.
UI otomasyonuna genel bakış için bkz. UI Otomasyonuna 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. İstemciİle 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 desenidestekler.
ToolStripMenuItem denetimi, ControlType özellik değerine ControlType.MenuItemsahiptir.
ToolStripItem denetimi NameProperty özelliğini veGenişletme/Daralt deseninidestekler.
ToolStripDropDownItem denetimi, açılır menü genişletildiğinde veya daraltıldığında durum değişikliği (StateChange) ve ad değişikliği (NameChange) belirten AccessibleEvents'i destekler.
ToolStripDropDownButton denetiminin, ControlType özellik değeri ControlType.MenuItem'tür.
DataGridViewCheckBoxCell denetimi TogglePatterndestekler.
PropertyGrid denetimine iyileştirmeler .NET Framework 4.7.1 aşağıdaki geliştirmeleri PropertyBrowser denetimine ekler:ve denetimleri, özelliğini destekler ve olarak ControlType vardır. Kullanıcı denetimine yanlış bir değer girdiğinde görüntülenen hata iletişim kutusundaki PropertyGrid düğmesi, Genişletme/Daralt deseni, durum ve ad değişikliği bildirimlerini ö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 ve Ekran Okuyucusu'nun hata iletisinin içeriğini duyurmasına olanak tanır.
AccessibleRole denetimindeki satırların PropertyGrid terimi "Satır"dan "Hücre"ye değiştirildi. Hücre, uygun klavye kısayollarını ve Anlatıcı duyurularını desteklemesini sağlayan UIA ControlType "DataItem" ile ilişkilendirir.
PropertyGrid denetiminin PropertyGrid özelliği PropertySort olarak ayarlandığında, başlık öğelerini temsil eden PropertySort.Categorized denetim satırlarının ControlType özellik değeri ControlType.Buttonolur.
PropertyGrid denetiminin PropertyGrid özelliği PropertySort olarak ayarlandığında, üst bilgi öğelerini temsil eden PropertySort.Categorized denetim satırları, Genişlet/Daralt düzeninidestekler.
Izgara ile üstündeki Araç Çubuğu arasında geliştirilmiş klavye gezintisi. "Shift-Tab" tuşlarına basıldığında, tüm ToolBar yerine ilk ToolBar düğmesi seçilir.
Yüksek Karşıtlık modunda görüntülenen PropertyGrid denetimleri artık ToolBar düğmesinin çevresine geçerli PropertySort özellik değerine karşılık gelen bir odak dikdörtgeni çizecektir.
Yüksek Karşıtlık modunda ve PropertyGrid özelliği PropertySort olarak ayarlanmış PropertySort.Categorized denetimleri artık kategori başlıklarının arka planını yüksek karşıtlıklı bir renkte görüntüler.
PropertyGrid denetimleri, odağı olan ToolBar öğeleri ile PropertySort özelliğinin geçerli değerini gösteren ToolBar öğeleri arasında daha iyi ayrımlar sağlar. 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 gösteren ToolBar öğelerini PropertySortTogglePatterndestekler.
Hizalama Seçici'de seçili hizalamayı ayırt etmek için geliştirilmiş Anlatıcı desteği.
Formda boş bir PropertyGrid denetimi görüntülendiğinde, artık daha önce almadığı bir şekilde odak alacaktır.
Yüksek Karşıtlık temalarında işletim sistemi tanımlı renklerin kullanılması
- varsayılan stil olan Button özelliği CheckBoxolarak ayarlanmış FlatStyle ve FlatStyle.System denetimleri 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.
-
Button, CheckBox, RadioButton, Label, LinkLabelve GroupBox denetimleri Enabled özelliği false olarak ayarlanmış tır, metni Yüksek Karşıtlık temalarında işlemek için gölgeli bir renk kullanarak arka planda düşük karşıtlık elde eder. Şimdi bu denetimler işletim sistemi tarafından tanımlanan "Devre Dışı Metin" rengini kullanır. Bu düzeltme,
FlatStyleözelliği FlatStyle.Systemdışında bir değere ayarlanmış denetimler için geçerlidir. "İkinci denetimler işletim sistemi tarafından sağlanır." - DataGridView artık 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 Enabled denetimleri artık işletim sistemi tarafından tanımlanan "Devre Dışı Metin" rengini kullanın.
- ToolStripMenuItem özelliği true olarak ayarlanmış denetimleri Checked artık ilişkili onay işaretini karşıt bir sistem renginde işleyebilirsiniz. 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 gezinti
- Bir ComboBox denetiminin DropDownStyle özelliği ComboBoxStyle.DropDownList olarak ayarlandığında ve formdaki sekme sırasındaki ilk denetim olduğunda, ana form klavye kullanılarak açıldığında odak dikdörtgeni görüntülenir. Bu değişiklik öncesinde klavye odağı bu denetimdeydi, ancak odak göstergesi gösterilmedi.
Narrator için geliştirilmiş destek
MonthCalendar denetimi, 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.
CheckedListBox denetimi artık bir CheckBox.CheckState özelliği değiştirildiğinde Ekran Okuyucusu'nu bilgilendiriyor. Daha önce Anlatıcı bildirim almıyordu ve sonuç olarak, kullanıcılara CheckState alanının güncellendiği bildirilmiyordu.
LinkLabel denetimi, kontrol içerisindeki metnin Ekran Okuyucusu'na bildirilme şeklini değiştirdi. Daha önce Ekran Okuyucusu bu metni iki kez duyurmuştu ve "&" simgelerini bir kullanıcı tarafından görülemese bile gerçek metin olarak okuyordu. Yinelenen metin Anlatıcı duyurularından ve gereksiz "&" sembollerinden kaldırıldı.
DataGridViewCell denetim türleri artık salt okunur durumu Ekran Okuyucusu'na ve diğer yardımcı teknolojilere doğru şekilde bildirmektedir.
Anlatıcı artık [Multiple-Document Arabirimi]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md) uygulamalarında alt pencerelerin Sistem Menüsünü okuyabilir.
Ekran Okuyucusu artık ToolStripMenuItem özelliği ToolStripItem.Enabledolarak ayarlanmış denetimleri okuyabilir. Daha önce Ekran Okuyucusu, içeriği okumak için devre dışı bırakılmış menü öğelerine odaklanamadı.
| İsim | Değer |
|---|---|
| Kapsam | Binbaşı |
| Sürüm | 4.8 |
| Tür | Yeniden Hedefleme |
Etkilenen API'ler
- ToolStripDropDownButton.CreateAccessibilityInstance()
- DomainUpDown.DomainUpDownAccessibleObject.Name
- AyTakvimi.ErişilebilirlikNesnesi
Windows Presentation Foundation (WPF)
WPF'de erişilebilirlik geliştirmeleri
Detaylar
Yüksek Karşıtlık iyileştirmeleri
- Expander denetiminin odak noktası artık görünür durumda. .NET Framework'ün önceki sürümlerinde değildi.
- CheckBox ve RadioButton denetimlerindeki metinler seçildiğinde önceki .NET Framework sürümlerinden daha kolay görülebilir.
- Devre dışı bırakılmış bir ComboBox kenarlığı artık devre dışı 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.
- Açılan düğme, bir ComboBox denetiminin stili ToolBar.ComboBoxStyleKeyolarak ayarlandığında görünür olur. .NET Framework'ün önceki sürümlerinde değildi.
- DataGrid denetimindeki sıralama göstergesi oku artık tema renklerini kullanmaktadır. .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.
- DataGrid denetiminin 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 ComboBox ve ListBox denetimlerde görünür. .NET Framework'ün önceki sürümlerinde değildi.
Ekran okuyucu etkileşimi iyileştirmeleri
- Expander denetimleri, artık ekran okuyucular tarafından gruplar halinde (genişletme ya da daraltma) doğru bir şekilde duyurulmaktadır.
- DataGridCell denetimleri artık ekran okuyucular tarafından yerelleştirilmiş olarak veri ızgarası hücresi şeklinde doğru şekilde duyuruluyor.
- Ekran okuyucular artık düzenlenebilir bir ComboBoxadını duyurur.
- PasswordBox denetimleri artık ekran okuyucular tarafından "görünümde öğe yok" olarak duyurulmuyor.
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. Önerilen yaklaşım budur. Bu erişilebilirlik değişiklikleri ,NET Framework 4.7.1 veya sonraki sürümleri hedefleyen WPF uygulamalarında varsayılan olarak etkindir.
Uygulama yapılandırma dosyasının bölümüne aşağıdaki
<runtime>'i ekleyerek ve aşağıdaki örnekte gösterildiği gibifalseolarak ayarlayarak önceki 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" /> </runtime> </configuration>
.NET Framework 4.7.1 veya üstünü hedefleyen ve eski erişilebilirlik davranışını korumak isteyen uygulamalar, bu AppContext anahtarını açıkça trueolarak ayarlayarak eski erişilebilirlik özelliklerinin kullanımını kabul edebilir.
UI otomasyonuna genel bakış için bkz. UI Otomasyonuna Genel Bakış.
| İsim | Değer |
|---|---|
| Kapsam | Binbaşı |
| 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 etkinliği ve SelectedValue özelliği
Detaylar
.NET Framework 4.7.1'den başlayarak, Selector seçimi değiştiğinde SelectedValue olayını oluşturmadan önce SelectionChanged özelliğinin değerini her zaman 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ğinin SelectedValue özelliğinin değiştirilmesinden kaynaklandıysa olay sonrasında 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 <runtime> bölümüne aşağıdaki satırı ekleyerek yeni davranışı etkinleştirebilir:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| Sürüm | 4.7.1 |
| Tür | Yeniden Hedefleme |
Etkilenen API'ler
TabControl'un SelectionChanged olayı ve SelectedContent özelliği
Detaylar
.NET Framework 4.7.1'den başlayarak, bir TabControl seçimi değiştiğinde SelectedContent olayını oluşturmadan önce SelectionChanged özelliğinin 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 <runtime> bölümüne aşağıdaki satırı ekleyerek yeni davranışı etkinleştirebilir:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| 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
Detaylar
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>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
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:
- InitializeCorrelation etkinliği için bağıntı verilerini ayarlamaya yönelik bağıntıyı başlatma penceresi
- Receive, Send, SendReplyve ReceiveReply etkinlikleri için içerik tanımı penceresi
- Klavye aracılığıyla daha fazla işlev kullanılabilir:
- Bir etkinliğin özelliklerini düzenlerken, özellik grupları ilk odaklandıklarında klavye kısayoluyla daraltılabilir.
- Uyarı simgelerine artık klavyeyle erişilebilir.
- Özellikler penceresindeki Diğer Özellikler düğmesine artık klavyeyle erişilebilir.
- Klavye kullanıcıları artık İş Akışı Tasarımcısı'nın 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ımcısı ve etkinlik tasarımcıları tarafından kullanılan veri kılavuzlarına satır ekleme.
- ReceiveReply ve SendReply etkinliklerindeki alanlar arasında sekmeli 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.
- Receive etkinliğinin içeriği.
- InvokeMethod etkinliği için Hedef Tipi.
- TryCatch etkinliğindeki Exception 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.
- FlowDecision etkinlikleriyle ilgili 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ımcısı'ndaki yakınlaştırma yüzdesi.
- Parallel ve Pick etkinlikleri arasındaki ayırıcı.
- InvokeDelegate etkinliği.
- Sözlük etkinlikleri (
Microsoft.Activities.AddToDictionary<TKey,TValue>,Microsoft.Activities.RemoveFromDictionary<TKey,TValue>vb.) için Türleri Seç penceresi. - Göz At ve .NET Türünü Seç penceresi.
- İş Akışı Tasarımcısı'ndaki içerik haritaları.
- Yüksek Karşıtlık temalarını seçen kullanıcılar, İş Akışı Tasarımcısı'nın 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 hedef alıyorsa ancak .NET Framework 4.7.1 üzerinde çalışıyorsa, aşağıdaki AppContext anahtarını app.config dosyasının
<runtime>bölümüne ekleyerek ve aşağıdaki örnekte gösterildiği gibifalseolarak ayarlayarak bu eski erişilebilirlik davranışlarını geri çevirebilirsiniz.
<?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ı açıkça trueolarak ayarlayarak eski erişilebilirlik özelliklerinin kullanımını kabul edebilir.
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| Sürüm | 4.7.1 |
| Tür | Yeniden Hedefleme |
.NET Framework 4.7.2
Çekirdek
URI'lerde Unicode Çift Yönlü Denetim Karakterlerine İzin Ver
Detaylar
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
Ö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 <runtime> anahtarını ekleyerek bu değişikliği 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. Uygulama yapılandırma dosyasının bölümüne aşağıdaki <runtime> ekleyerek etkinleştirebilirsiniz:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| 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
Detaylar
.NET Framework 4.7.2'den başlayarak, T:System.IO.Compression.DeflateStream sınıfında sıkıştırmayı kaldırma uygulaması varsayılan olarak yerel Windows API'lerini kullanacak şekilde değiştirilmiş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, fırlatılan istisna 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 farklılıklar vardır (not: yalnızca
GZipStreamsıkıştırma açma için ayarlanan etkilenir): - Geçersiz başlıklar ayrıştırılırken farklı zamanlarda özel durumlar atılabilir.
- Yerel uygulama, gzip üst bilgisi içindeki bazı ayrılmış bayraklar için değerlerin (FLG) 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, Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression anahtarını app.config dosyanızın runtime bölümüne ekleyerek ve trueolarak ayarlayarak 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>
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| 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
Detaylar
System.Uriiçinde, bazen kodu çözülen belirli yüzdeyle kodlanmış karakterler artık her zaman kodlanmış halde bırakılıyor. 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 <runtime> anahtarını ekleyerek bu değişikliği 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 <runtime> ekleyerek etkinleştirebilirsiniz:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| Sürüm | 4.7.2 |
| Tür | Yeniden Hedefleme |
Etkilenen API'ler
Resgen web'den içerik yüklemeyi reddediyor
Detaylar
.resx dosyaları ikili biçimlendirilmiş giriş içerebilir. Güvenilmeyen bir konumdan indirilen bir dosyayı yüklemek için resgen'i kullanmayı denerseniz, varsayılan olarak yükleme girişimi başarısız olur.
Öneri
Resgen kullanıcıları, güvenilmeyen konumlardan ikili biçimlendirilmiş girdileri yüklemeleri gerektiğinde, giriş dosyasındaki web işaretini kaldırabilir veya devre dışı bırakma özelliğini uygulayabilirler. Makine genelinde devre dışı bırakma özelliğini uygulamak için aşağıdaki kayıt defteri ayarını ekleyin: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
.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, <runtime> dosyanızın app.config bölümüne aşağıdakileri 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, <runtime> dosyanızın app.config bölümüne aşağıdakileri ekleyerek taşınabilir PDB'leri kullanırken kaynak dosya ve satır bilgilerini kabul edebilirsiniz:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
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ı uygulama yapılandırma dosyasının
<runtime>bölümüne ekleyerek ve aşağıdaki örnekte gösterildiği gibifalseolarak ayarlayarak 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ı açıkça trueolarak ayarlayarak eski erişilebilirlik özelliklerinin kullanımını kabul edebilir.
Yüksek Karşıtlık temalarında işletim sistemi tanımlı renklerin kullanılması
- ToolStripDropDownButton açılan oku artık Yüksek Karşıtlık temasında işletim sistemi tanımlı renkleri kullanıyor.
- Button, RadioButton ve CheckBox denetimleri FlatStyleFlatStyle.Flat olarak ayarlanmış veya FlatStyle.Popup artık seçildiğinde yüksek karşıtlık temasında işletim sistemi tanımlı renkler kullanıyor. Daha önce metin ve arka plan renkleri karşıt değildi ve okunması zordu.
-
GroupBox özelliği Enabled olarak ayarlanmış bir
falseiçindeki denetimler artık Yüksek Karşıtlık temasında işletim sistemi tanımlı renkler kullanacak. - ToolStripButton, ToolStripComboBoxve ToolStripDropDownButton denetimleri, Yüksek Karşıtlık Modunda artırılmış parlaklık karşıtlığı oranına sahiptir.
- DataGridViewLinkCell, DataGridViewLinkCell.LinkColor özelliği için işletim sistemi tanımlı renkleri varsayılan olarak Yüksek Karşıtlık modunda 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}" />
Narrator için geliştirilmiş destek
- Anlatıcı, artık bir ToolStripMenuItem.ShortcutKeysmetnini duyururken ToolStripMenuItem özelliğinin değerini bildirir.
- Ekran Okuyucusu artık bir ToolStripMenuItem'ın Enabled özelliğinin
falseolarak ayarlandığını belirtir. - Narrator artık ListView.CheckBoxes özelliği
trueolarak ayarlandığında onay kutusunun durumu hakkında geri bildirim verir. - Anlatıcı tarama modu odak sırası artık ClickOnce indirme iletişim kutusundaki denetimlerin görsel sırasıyla tutarlıdır.
İyileştirilmiş DataGridView Erişilebilirlik desteği
- DataGridView'da 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 DataGridViewSelectionMode.FullRowSelectolarak ayarlandığında, 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 ana denetimi döndürüyor.
Geliştirilmiş Görsel İpuçları
- Boş RadioButton özelliğine sahip CheckBox ve Text denetimleri, odak aldıklarında artık bir odak göstergesi görüntüleyecektir.
Geliştirilmiş Özellik Kılavuzu Desteği
PropertyGrid denetimi alt öğeleri artık yalnızca bir PropertyGrid öğesi etkinleştirildiğinde
trueözelliği için bir IsReadOnlyProperty döndürür.PropertyGrid denetimi alt öğeleri artık
Geliştirilmiş klavye gezintifalseözelliği için yalnızca bir PropertyGrid öğesi kullanıcı tarafından değiştirilebildiğinde bir IsEnabledProperty döndürür. UI otomasyonuna genel bakış için bkz. UI Otomasyonuna Genel Bakış.ToolStripButton, ToolStripPanel özelliği TabStopolarak ayarlanmış bir
trueiçinde olduğunda artık odaklanmaya izin verir.
| İsim | Değer |
|---|---|
| Kapsam | Binbaşı |
| 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
Detaylar
.NET Framework 4.7.1 ve önceki sürümlerinde, kullanıcı iç içe ContextMenuStrip.SourceControl denetimlerinden menüyü açtığında ToolStripMenuItem özelliği yanlış null döndürür. .NET Framework 4.7.2 ve sonraki sürümlerinde SourceControl özelliği her zaman gerçek kaynak denetimine ayarlanır.
Öneri
Bu değişiklikleri kabul etme veya geri çevirme 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 daha önceki sürümleri hedefler ve aşağıdaki örnekte gösterildiği gibi, AppContext Anahtarı'i app.config dosyasının
<runtime>bölümüne ekleyipfalseolarak ayarlayarak eski erişilebilirlik davranışlarını devre dışı bırakır.
<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ı açıkça trueolarak ayarlayarak eski kaynak denetimi değerini kullanmayı kabul edebilir.
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
.NET Framework 4.7.1 ve önceki sürümlerinde System.Drawing.Text.PrivateFontCollection sınıfı, PrivateFontCollection yöntemi kullanılarak bu koleksiyona eklenen Font nesneler için AddFontFile(String) atıldıktan sonra GDI+ yazı tipi kaynaklarını serbest bırakmaz. .NET Framework 4.7.2 ve sonraki sürümlerde Dispose koleksiyona dosya olarak eklenen GDI+ yazı tiplerini yayınlar.
Öneri
Bu değişiklikleri kabul etme veya geri çevirme 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 daha önceki sürümleri hedefler ve aşağıdaki örnekte gösterildiği gibi, AppContext Anahtarı'i app.config dosyasının
<runtime>bölümüne ekleyipfalseolarak ayarlayarak eski erişilebilirlik davranışlarını devre dışı bırakır.
<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 trueolarak ayarlayarak yazı tipi kaynaklarını serbest bırakmamayı tercih edebilir.
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| Sürüm | 4.7.2 |
| Tür | Yeniden Hedefleme |
Etkilenen API'ler
WinForm'un "Domain Up" ve "Down" düğme eylemleri artık senkronize durumda.
Detaylar
.NET Framework 4.7.1 ve önceki sürümlerde, denetim metni mevcut olduğunda DomainUpDown denetiminin DomainUpDown.UpButton() eylemi yoksayılır ve geliştiricinin DomainUpDown.DownButton() eylemi kullanmadan önce denetimde DomainUpDown.UpButton() eylemi kullanması gerekir. .NET Framework 4.7.2'den başlayarak DomainUpDown.UpButton() ve 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.
- Uygulama yapılandırma dosyasının bölümüne aşağıdaki
<runtime>eklenip bu örnekte gösterildiği gibifalseolarak ayarlanarak, eski kaydırma davranışının dışında kalır.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
Birbirini barındıran WPF denetimlerini içeren 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 Switch.UseLegacyAccessibilityFeatures hem de 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>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
WPF MarkupCompiler, XAML işaretleme dosyaları için derleme hizmetleri sağlar. .NET Framework 4.7.1 ve önceki sürümlerinde özetler için kullanılan varsayılan karma algoritması SHA1'di. 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 belirtme dosyaları için tüm doğrulama kodu 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>
| İsim | 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
Detaylar
.NET Framework 4.7.1 ve önceki sürümlerinde WPF, AppDomain kapatma sırasında .NET sonlandırıcı iş parçacığında büyük olasılıkla bir System.Windows.Threading.Dispatcher oluşturur. Bu, .NET Framework 4.7.2 ve sonraki sürümlerinde, zayıf olayların temizlenmesi iş parçacığına duyarlı hale getirilerek düzeltildi. Bu nedenle, WPF temizleme işlemini tamamlamak için Dispatcher.Invoke çağırabilir. 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 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>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
Ordertüründe bir ADO koleksiyonunuz olduğunu ve bunu birincil anahtar "OrderID" aracılığıyla Detail türünde bir öğe koleksiyonuyla ilişkilendiren "OrderDetails" adlı bir ilişki olduğunu varsayalım. WPF uygulamanızda, belirli bir siparişin ayrıntılarına bir liste denetimi bağlayabilirsiniz:
<ListBox ItemsSource="{Binding Path=OrderDetails}" >
DataContext'in bir Orderolduğu yer. WPF, OrderDetails ana öğenin Detail eşleşen tüm OrderID öğelerinin D koleksiyonu olan OrderID özelliğinin değerini alır. Davranış değişikliği, ana öğenin birincil anahtar OrderID değiştirdiğinizde ortaya çıkar. ADO, Ayrıntılar koleksiyonundaki (yani D koleksiyonuna kopyalananlar) etkilenen kayıtların her birinin OrderID otomatik olarak değiştirir. Peki D'ye ne olacak?
- Eski davranış: D koleksiyonu temizleniyor. Ana öğe, özelliği için bir değişiklik bildirimi
OrderDetails. ListBox artık boş olan D koleksiyonunu kullanmaya devam eder. - Yeni davranış: D koleksiyonu değişmedi. Öğelerinin her biri
OrderIDözelliği için bir değişiklik bildirimini tetikler. ListBox, D koleksiyonunu kullanmaya devam eder ve yeniOrderIDile ayrıntıları görüntüler. WPF, D koleksiyonunu farklı bir şekilde oluşturarak yeni davranışı uygular: DataRowView.CreateChildView(DataRelation, Boolean) bağımsız değişkenifollowParentolarak ayarlanmıştrueADO yöntemini ç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 .NET 4.7.1 veya üzerini hedefleyen uygulamalar için true (eski davranış) ve .NET 4.7.2 veya üzerini hedefleyen uygulamalar için false (yeni davranış) olarak belirlenmiştir.
| İsim | Değer |
|---|---|
| Kapsam | Küçük |
| Sürüm | 4.7.2 |
| Tür | Yeniden Hedefleme |
İçerik olmadığında WPF RadioButton ve CheckBox için FocusVisual artık doğru olarak görüntüleniyor.
Detaylar
.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 vardır. 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>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| Sürüm | 4.7.2 |
| Tür | Yeniden Hedefleme |
WPF TextBox/PasswordBox Metin Seçimi Sistem Renklerini Takip Etmiyor
Detaylar
.NET Framework 4.7.1 ve önceki sürümlerinde WPF System.Windows.Controls.TextBox ve System.Windows.Controls.PasswordBox yalnızca Adorner katmanında bir metin seçimini işleyebilirdi. 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>
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| 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
Detaylar
Bazı durumlarda, bir iş akışı hizmet örneğini iptal etmek veya sonlandırmak için IWorkflowInstanceManagement.TransactedCancel veya IWorkflowInstanceManagement.TransactedTerminate API'leri kullanıldığında, Workflow çalışma zamanı isteği işlemenin bir parçası olarak hizmet örneğini kalıcı hale getirmeye çalışırken, iş akışı örneği, sonsuz özyinelemenin neden olduğu yığın taşması ile karşılaşabilir. Sorun, iş akışı örneğinin, başka bir hizmete ilişkin beklemekte olan bir WCF isteğinin tamamlanmasını beklediği bir durumda olması halinde oluşur.
TransactedCancel ve TransactedTerminate işlemleri, iş akışı hizmeti örneği için kuyruğa alınmış iş öğeleri oluşturur. Bu iş öğeleri, TransactedCancel/TransactedTerminate isteğinin işlenmesinin bir parçası olarak yürütülmedi. İş akışı hizmeti örneği diğer bekleyen WCF isteğinin tamamlanmasını beklerken meşgul olduğundan, oluşturulan iş öğesi kuyruğa alınmış olarak kalır.
TransactedCancel/TransactedTerminate işlemi tamamlanır ve denetim istemciye geri döndürülür.
TransactedCancel/TransactedTerminate işlemiyle ilişkili işlem, gerçekleştirilmeye çalışıldığında, iş akışı hizmeti örneği durumunun kalıcı hale getirilmesi gerekir. Ancak örnek için bekleyen bir WCF isteği 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. TransactedCancel ve TransactedTerminate 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 AppSetting eklenebilecek ve web.config/app.config ve TransactedCancelişlemlerini yok sayması için bir TransactedTerminate kullanıma sunmuş olduk. Bu, işlemin iş akışı örneğinin kalıcı olmasını beklemeden işlemesine olanak tanır. Bu özelliğin AppSetting'i microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminateolarak adlandırılır.
true değeri, işlemin yoksayılması gerektiğini ve bu nedenle yığın taşmasını önlemeyi gösterir. Bu AppSetting'in varsayılan değeri falseolduğundan, mevcut iş akışı hizmeti örnekleri etkilenmez.
Öneri
AppFabric veya başka bir IWorkflowInstanceManagement istemcisi 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 <appSettings> bölümüne aşağıdakileri ekleyebilirsiniz:
<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>
Sorunla karşılaşmıyorsanız, bunu yapmanız gerekmez.
| İsim | Değer |
|---|---|
| Kapsam | Kenar |
| Sürüm | 4.7.2 |
| Tür | Yeniden Hedefleme |