.NET Framework 4.5 için bir güncelleştirme kullanılabilir. Bu güncelleştirme, bazı güvenilirlik, uyumluluk, kararlılık ve performans sorunlarını giderir. Bu güncelleştirmenin çözdüğü sorunları hakkında daha fazla bilgi için "Bu güncelleştirme çözümlendiğini sorunlar" bölümüne bakın.
Windows Presentation Foundation (WPF)Sorun 1
Varsayar ICommand
arabirimini uygular ve ardından aşağıdaki işlemlerden birini gerçekleştirin:
- Farklı bir nesneye CanExecuteChanged olayını temsilci.
- Gönderen parametresi ile birlikte CanExecuteChanged olayı oluşturun ve parametre null veya farklı bir nesneye ayarlanır.
Bu durumda, olay dinleyicileri, CanExecuteChanged
olayın almazsınız. Bu davranış tipik belirtileri şunlardır:
Sorun 2
- Düğmeler, MenuItems veya köprüler IsEnabled durumlarına değiştirmeyin.
- Düğmeler, MenuItems veya köprüler fare tıklatmaları veya klavye girişi için yanıt vermez.
Aşağıdaki senaryoyu düşünün:
- Odağı bir DataGrid kenarında bir hücre (örneğin, üst veya alt satır hücresinde) veya soldaki veya sağdaki sütunda bir hücreyi ayarladığınız.
- Kenar sütuna karşılık gelen ok tuşuna basın (örneğin, Yukarı üst satırındaki bir hücrede bulunan basın).
- Hücre bir Odaklanabilir öğe (örneğin, metin kutusu, köprü, düğme veya CheckBox öğesi) içerir.
Bu senaryoda, Odaklanabilir öğesine odağı taşır. Ancak, odak DataGrid hücrenin kalması beklenir.Sorun 3
Aşağıdaki senaryoyu düşünün:
- IScrollInfo arayüzünü uygulayan özel bir panel oluşturun.
- VerticalOffset özelliği ExtentHeight özelliğinin değeri aşan bir değer döndürür.
- Otomatik kaydırma özelliği trueolarak ayarlanır.
- "Otomatik kaydırma için" paneli deneyin. Örneğin, iç bölme fare düğmesini tıklatın ve ardından panelin aşağıdaki eylemlerden birini gerçekleştirerek bir konum için fareyi sürüklemeden:
- İçeriğinin sonuna kadar panel kaydırın.
- Fare düğmesini bıraktığınızda Masası gidin.
- Fare başka bir yere taşıyın.
Bu senaryoda, sonsuz bir döngü oluşabilir. Bu bellek tüketir ve çıkmak uygulama neden olan durum bir System.OutOfMemoryException
özel neden olabilir.Sorun 4
Aşağıdaki senaryoyu düşünün:
- Bir liste kutusu veya bir DataGrid ScrollIntoView yöntemini çağırın.
NotBu arama birçok yolla oluşabilir. Örneğin, ScrollIntoView yöntemi SelectionChanged olayı için bir işleyici çağırın.
- Liste kutusu veya DataGrid düzeni görev bekleyen yok.
Bu senaryoda, uygulama çıkmak bir System.InvalidCastException
özel durumuna neden olabilir.Sayı 5
Aşağıdaki senaryoyu düşünün:
- Bir nesne üzerinde INotifyDataErrorInfo arabirimini uygular.
- Veri bir UI öğesinin bazı özellikler nesnenin bir özelliği yerine nesnenin için bağlama.
- Aşağıdaki eylemlerden birini gerçekleştirerek bağlamayı devre dışı:
- Bağlama farklı bir bağlama ile değiştirin.
- (Tek yönlü bağlama ise) ile farklı bir değer özelliğin UI öğesinin üzerine.
- UI öğesinin görsel ağaç kaldırır ve tüm başvuruları bırakın.
- Nesneniz ErrorsChanged olayını oluşturur.
Bu senaryoda, çıkmak uygulama bir System.NullReferenceException
özel durumuna neden olabilir.
Ortak dil çalışma zamanı (CLR)Sorun 1
Array.Sort
yöntemi gerektiren işlemleri düşük performansla karşılaşıyorsunuz. Örneğin, bir aşağı açılan listeyi sıralamak ne zaman bir program çalışır.Sorun 2
.NET Framework 4'ten .NET Framework 4.5'e yükselttikten sonra önceden yüklenmiş .NET Framework 4 tabanlı uygulamalar çökebilir. Ayrıca, aşağıdakine benzer bir hata iletisi alırsınız:
"Ortak dil çalışma zamanı geçersiz bir program algılandı"Sorun 3
.NET Framework 4.5'e bir bilgisayara .NET Framework'ün daha önceki bir sürümden yükseltme varsayın. Yükseltme işleminden önce ASP performans sayaçları okuyabilen bir uygulama yoktur. .NET Framework yükselttikten sonra ancak, bu özellik artık performans sayaçlarını ASP okuyabilir.Sorun 4
.NET Framework 4.5'e bir bilgisayara .NET Framework 4'ten yükseltme varsayın. Yükseltme işleminden önce Type.IsAssignableFrom
yöntemi bir değeri döndürür true.
Ancak, yükseltme sonrasında, yöntemi bir false
değeri yanlış döndürür.
Bu sorunu yeniden oluşturmak için şu kodu kullanın:
public class TestConstraint where T: U{ public T t;}Class Program { static void Main( string[] args ) { Type t = typeof( TestConstraint ).GetGenericArguments()[ 0 ]; Type u = typeof( TestConstraint ).GetGenericArguments()[ 1 ]; Console.WriteLine( u.IsAssignableFrom(t) );// The .NET Framework 4.0 displays "true." However, the .NET Framework 4.5 displays "false." } }Sayı 5CryptoStream
sınıfı, .NET Framework 4'te olduğu gibi CryptopgraphicException
özel durum oluşturmak yerine .NET Framework 4.5 içinde bir ArgumentNullException
istisna atar. CryptoStream
sınıfı geçersiz verilerin şifresini çözmek çalışır ve iki kez bir desen kullanılarak elden aşağıdakine benzeyen, ikinci çağrı Dispose
yöntemi için bir ArgumentNullException
istisna atar:
using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)){ using (StreamReader sr = new StreamReader(cs)) { }}Sorun 6
Bir bilgisayarda .NET Framework 4.5 için .NET Framework'ün önceki bir sürümünü yükseltme varsayın. Bazı üçüncü taraf denetimleri bir uygulama kullandığınızda, System.Security.SecurityException
özel durum alabilirsiniz ve uygulama çöker.
Windows FormsSorun 1
Bir .NET Framework 4.5 tabanlı Windows Form uygulaması bulunduğunu varsayalım. Uygulama içinde bir alt pencereyi açmak için menü öğesini tıklattığınızda, menü ve alt windows ile etkileşimleri hatalı davranırlar.
Örneğin, aşağıdaki karşılaşabilirsiniz:
Sorun 2
- Bir kısayol menüsü alt pencereyi açtığınızda, ana pencerenin form odağı alır.
- Bir menü öğesine erişmek için anımsatıcıları kullanamazsınız.
TableLayoutPanel Windows Forms denetimi ile aynı hücrede görünmesini iki denetim ayarladığınızda, iki denetim farklı bir hücreye konumlandırılmış olabilir.Neden
Gerçek denetimler konumlarını farklı .NET Framework 4 ve .NET Framework 4. 5'de giderilen nedeniyle bu sorun oluşur.Sorun 3System.Windows.Forms.FontDialog.Color
özelliği System.Drawing.SystemColors
sınıfı olarak bir renk
değeri döndürür. Bu renk nesneleri standart renk adları, örneğin "SystemText." farklı adlara sahip
Standart renk adları renk
yapısını statik üyeleri üzerinde tanımlanan ve yalnızca Windows Forms ile de .NET Framework tarafından tanınan olabilir.Renk
yapısı hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesine gidin:
XMLSorun 1
XSL dönüşümü sırasında varsayılan XML ad alanını yeniden tanımlamak çalıştığınızda, bir özel durum oluşturulur. Ayrıca, aşağıdaki hata iletisini alırsınız:
Ad alanı bildirimi xmlns kurulamıyor ='URI:schema1'.Sorun 2
Önek '' ad alanına zaten eşlendi ' URI:schema2'.
XmlSerializer
sınıf IEnumerable
arabirimini uygulayan yapı dizisini seri hale getirmek için kullandığı varsayılır
açıkça. Bu durumda, .NET Framework 5'te bir System.Reflection.TargetInvocationException
istisnası atılır.
Ağ sınıf kitaplığıSorun 1
.NET Framework 4.5 tabanlı yığın halinde yanıtlarını okumak için zaman uyumsuz API kullanan bir uygulama çalıştırmak varsayalım. Bu durumda, yığın halinde yanıtları eşzamanlı olarak okunabilir.NedenHttpWebRequest
sınıfı bir HTTP yanıtı zaman uyumlu veya zaman uyumsuz olarak okumak arayanlar olanak sağlar. Hatta eşzamanlı g/ç (Winsock çağrıları) kullanarak yanıt bölümlerini okuyun ve sonra yanıt yığın halinde bir HTTP yanıtı ise ancak ne zaman arayan zaman uyumsuz kod yolu kullanır. Bu durumda, ağda veri alınıncaya kadar arama iş parçacığı engellenir.Sorun 2HttpWebRequest
veya SslStream
sınıfını kullanarak bir sunucuyla Aktarım Katmanı Güvenliği/Güvenli Yuva Katmanı (TLS/SSL) protokolü üzerinden iletişim kuran bir .NET Framework 4.5 tabanlı bir uygulamaya sahip olduğunu varsayalım. Sunucu bir SSL yeniden anlaşmasını isterse, uygulama veri gönderme sırasında uygulama işlenmeyen bir özel durum karşılaşma ve sonra kilitlenme.Sorun 3
Bir HTTPS isteğine beklenirken bir yazma işlemi sırasında bir SSL yeniden anlaşmasını iptal edilmişse HttpWebRequest
sınıfında bir iş parçacığı havuzu dondurur.NedenHttpWebRequest
sınıftan veya SslStream
SSL yeniden anlaşmasını işlediğinde ortaya çıkabilecek bir yarış durumu bu sorun oluşur. Bu durumda, daha fazla ve daha fazla iş parçacığı iş parçacığı havuzu oluşturabilirsiniz. Ayrıca bellekte tutulan kaynakları temizlenmez.Sorun 4
.NET Framework 4.5 tabanlı bir sunucu üzerinden bir proxy sunucu ile iletişim kuran bir uygulama olduğu varsayılır. Bir istek iptal edilir ve proxy kimlik doğrulaması aynı anda anlaşılan, uygulama işlenmeyen bir özel durum karşılaşma ve sonra kilitlenme.Neden
Bu sorun için Thread.Abort()
yöntemini işleme bir önceki düzeltme oluşur. Bu düzeltme, yeni bir özel durum oluşturabilir bir işlevi ekledi. Bu nedenle, Thread.Abort()
yöntemi, artık bu özel durum atar.
ASP.NETSorun 1
Aşağıdaki senaryoyu düşünün:
- Tarayıcının dil ayarına göre farklı içerik görüntüleyen bir ASP.NET web uygulaması vardır.
- Bir kullanıcı Internet Explorer 10 Windows 8'in Geleneksel Çince sürümü, web uygulaması için göz atmak için kullanır.
Bu senaryoda, web uygulaması için kullanıcı içeriği Geleneksel Çince sürümü görüntülemez.Sorun 2
Uzak bir bilgisayarda (örneğin, çalışan uygulama performans sayaçları) belirli ASP.NET performans sayaçları izlemek için yerel bilgisayarınızda Perfmon.exe programını çalıştırdığınızda, her zaman 0
değerini alırsınız. Uzak bilgisayarda çalışan birden çok ASP.NET uygulamaları bile, bu değer alırsınız.Sorun 3
Aşağıdaki senaryoyu düşünün:
- Eklediğiniz bir Microsoft Visual Studio 2012 web sitesi projesi <thead></thead> bir .aspx sayfasında HTML tablo denetimi ime. Örneğin, aşağıdakileri yapın:
<table id="Table1" runat="server"><thead></thead></table>
- Tüm web sitesi oluşturmak deneyin.
Bu senaryoda, aşağıdakine benzer bir derleme hatası alırsınız:
"'System.Web.UI.HtmlControls.HtmlTableRowCollection.Add(System.Web.UI.HtmlControls.HtmlTableRow)' için en iyi eşleşen fazla yüklenmiş yöntem bazı geçersiz bağımsız değişkenler var"Sorun 4CachedRolesInCookie
özelliğinin değeri doğru
web uygulamanızda ayarladığınız varsayalım. Uygulama tanımlama bilgisinin RolePrincipal
nesne seri hale getirir ve sonra yanıt olarak gönderir. Bu durumda, uygulamanın aşağıdaki istekte rolü tanımlama bilgisi değeri boştur.Sayı 5
Aşağıdaki senaryoyu düşünün:
- Bir ASP.NET web uygulaması ve AntiXssEncoder türü olanuygulamada açık.
- NavigateUrl özelliğini kullanan bir Köprü Web sunucusu denetimi uygulama web sayfalarında sahip"mailto:email@example.com" için işaretleyin.
- Bir kullanıcı Web sayfasını kendi tarayıcısı kullanarak erişir ve sonra köprüyü tıklattığında.
Bu senaryoda, kullanıcı varolmayan bir sayfaya yönlendirileceksiniz.
Entity FrameworkSorun 1
Aşağıdaki senaryoyu düşünün:
- Microsoft Visual Studio 2010 Microsoft SQL Server Compact 3.5 veya SQL Server Compact 4.0 ve Entity Framework kullanan bir uygulama geliştirme.
- Birden çok birleştirme gerçekleştirmek için uygulama "için LINQ varlıklar" sorgu kullanırifadeleri varlığını verileri elde etmek için ayarlar.
- Uygulamayı .NET Framework 4.5 yüklü olan bir bilgisayara taşıyın.
- Uygulamayı çalıştırmayı deneyin.
Bu senaryoda, uygulama, SQL Server Compact 3.5 veya SQL Server Compact 4.0 karşı iyi yapma SQL deyimlerinde Entity Framework nesil nedeniyle düşük performansı karşılaşabilirsiniz.Sorun 2
Aşağıdaki senaryoyu düşünün:
- .NET Framework 4.5 yüklü olan bir bilgisayarda Entity Framework kullanarak verileri için sorgular bir uygulamayı çalıştırın.
- Sorgu "görünümü tarafından Grup" yapıları kullanır.
Bu senaryoda, zayıf sorgu performans kaybı yaşayabilirsiniz.Not
.NET Framework 4'te uygulama çalışırken bu sorun oluşmaz.
Windows Workflow Foundation (WF)Sorun 1
Aşağıdaki senaryoyu düşünün:
- Varolan bir Visual Studio 2010 etkinlik Kitaplığı projesine sahip veya yeni bir etkinlik kitaplık projesi oluşturun.
- Bazı kaynak dosyaları bütünleştirilmiş koda gömülü projesinde vardır.
- Visual Studio 2012 projesinde oluşturun.
Bu senaryoda, oluşturma işlemi başarılı olur. Ancak, kaynak dosyaları bütünleştirilmiş koda doğru katıştırılmamış.Sorun 2
Aşağıdaki senaryoyu düşünün:
- "WorkflowConsoleApplication1" adlı bir iş akışı konsol uygulama projesi oluşturma
- Varsayılan iş akışı açın ve dize türünde bir değişken ekleyin.
- "Örnek" gibi belirli değer için yeni bağımsız değişkenin varsayılan değeri ayarlama
- Kod aşağıdaki satırı ekleyin:
[assembly:System.Windows.Markup.XmlnsDefinition("foobar", "WorkflowConsoleApplication1")]
- Çözümü oluşturun ve sonra varsayılan iş akışı yeniden açmayı deneyin.
Bu senaryoda, iş akışı Tasarımcısı loade olamaz ve aşağıdaki hata iletisini alırsınız:
"İş Akışı Tasarımcısı belgenizi sorunlarla karşılaştı"
Windows Communication Foundation (WCF)Sorun 1
Aşağıdaki senaryoyu düşünün:
- Hedefleyen .NET Framework 4.0 yüklü .NET Framework 4.5 olan bir bilgisayarda bir WCF hizmeti proje geliştirmek.
- Web.config dosyasında doğru olarak aspNetCompatibilityEnabled özelliğinin değerini ayarlayın.
- .NET Framework 4.0 yüklü olan başka bir bilgisayarda WCF hizmeti projesi dağıtın.
Bu senaryoda, System.ServiceModel.ServiceActivationException
özel durum oluşturulur.Not
WCF hizmeti projesi .NET Framework 4.5 yüklü olan bir bilgisayara dağıtırken, bu sorun oluşmaz.Neden
.NET Framework 4.0 sahipAspNetCompatibilityRequirements
özniteliğinin varsayılan değeri olduğu için bu sorun oluşur. Ancak, bu varsayılan değeri izin verilen
.NET Framework 4.5 olarak değiştirilir.Geçici çözüm
Bu soruna geçici bir çözüm için açıkça hizmet için ASP.NET uyumluluğu modu servis sözleşmesinde aşağıdaki kodu ekleyerek ayarlayın:
Sorun 2
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
Ortak API ByteStreamMessageEncoder.CreateMessageXmlDictionaryReaderQuotas.Max
içinde tanımlanan maksimum kotaları yerine varsayılan XmlDictionaryReaderQuotas
kullanan bir XmlDictionaryReader
sınıfı oluşturur. Bu bir System.Xml.XmlException
(en yüksek kota aşıldı) özel durumu oluşmasına neden olabilir.Sorun 3
Karşıya akış özelliği (örneğin, HttpRequest.InputStream
özelliği) erişmeye çalıştığınızda
bir hizmet işlemi, aşağıdaki hata iletisini alırsınız:
HttpRequest.GetBefferlessInputStream çağırdı sonra bu yöntem veya özellik desteklenmiyor"Sorun 4
WCF proxy'leri oluşturmaya çalıştığınızdaHizmet Başvuru Ekle
iletişim kullanarak ASMX Hizmetleri için
veya .NET Framework 4.5 Svcutil.exe yardımcı programı, üretilen servis başvurusu eksik türleriyle geçersiz.Sayı 5
Aşağıdaki senaryoyu düşünün:
- Visual Studio 2012'de ASP.NET MVC4 Web API projesi oluşturun.
- Projede bir WCF hizmeti başvuru ekleyin.
Bu senaryoda, hizmet başvuru için Reference.cs
dosyası boştur.NedenDataContractSerializer
sınıfı uygulamasının desteklemediği bir türü (Newtonsoft.Json.Linq.JToken
) karşılaştığından bu sorun oluşur. Bu durumda, bu bir istisna atar ve hizmet başvuru oluşturmadan sonra durur.