2016-04-05 14 views
10

.NET Native derleyicisiyle bir UWP uygulaması derlediğimde ve kod eniyilemelerini (temelde serbest bırakma modu) açtığımda, buradaki özel özel duruma erişmeye çalıştığımda NullReferenceException alırım yakalama bloğu.Filtrelenen özel durum işleyicisindeki kod, istisnai duruma erişirken NullReferenceException atar

Kod örnek:

try 
{ 
    throw new ArgumentNullException("Param"); 
} 
catch (ArgumentNullException ex) when (ex.ParamName == "Param") 
{ 
    ErrorBlock.Text = ex.ParamName; // ErrorBlock is a TextBlock in the xaml 
} 
catch (Exception) 
{ 
} 

Doğru catch bloğuna girer ve ben ex eriştiklerinde bir NullReferenceException atar. Bu yalnızca hem .Net Native hem de kod optimizasyonları açıksa başarısız olur.

Bu soruna neden olan nedir?

+1

@Pan neden etiketleri kaldırılsın? Bu oluşturma modu ve bu nedenle .NET yerli ile bir derleyici sorunu ile ilgili görünüyor. –

+0

Çünkü bunlar alakasız. exc.Message' boş. Bu sade bir NulLReferenceException. OP, yalnızca –

+3

No parametre adını kabul eden yapıcıyı çağırdı, bu değil ... İleti varsayılan. Lütfen bu kodu kendiniz deneyin. –

cevap

2

.NET Native çalışma zamanı ve derleyici ekibinde çalışıyorum.

Bu, derleyicimizin içindeki bir hatadır. Her özel durum işleme bölgesini (küçük bir işlev veya "işlev" olarak düşünebilirsiniz). "Ne zaman" için yığın oluştururken (aka filtre bloğu) özel durum nesnesinin izini kaybederiz. Bu hata, büyük bir aksaklık olmaması durumunda, bir veya iki hafta içinde gönderilmesi gereken Windows Tools 1.3'te düzeltilmiştir. VS 2015 Güncelleştirmesi 2'yi yükleyen kişiler için bir güncelleştirme olarak görünecektir.

Başka sorularınız olursa bize bildirin.

+0

Teşekkürler @Matt! Bunun etrafında 3 senaryoda biraz farklı davranışlar gördüm: asenkron, asenkron ama beklenmeyen ve async + beklenmiyor. Güncelleme çıktığında 3'lük bir çekim yapacağım. – FUR10N

+0

Mükemmel. Lütfen nasıl gittiğini bize [email protected] adresinden milletten duymayı çok seviyoruz. –

5

Niçin yanlış gittiğinden tam olarak emin değilim (şimdi bir süre hata ayıklama olmuştur), ancak await eksikliği beni meraklandırdı.

(Açıkçası eğer bunu henüz yapmadıysa yöntemi async yapmak gerekir) bir sorun olmadan kod çalıştırır ShowAsync yöntemini bekliyor yoksa:

await new MessageDialog("Argument null exception: " + argEx.Message).ShowAsync(); 

iken await olmadan kod bloğu başarısız oldu. Bu bir hata veya düzeltmeniz gereken bir şey olup olmadığından emin değil ...

+0

Hmm, bu benim için de çalıştı! Async/wait ile ilgili olduğunu bilmiyordum. Bunu bulduğum asıl kod, tasarımın belirli bir sonucunu beklemiyor (her şey ICommands'ta zaten var, bu yüzden async void olurdu). Bunu beklemek zorunda olman gerektiğini düşünmüyorum, tamam mı? – FUR10N

+0

Evet, her "eşzamansız" beklemeli. –

+0

Bu uzun süren bir görevdir ve daha sonra bir devamlılık planlamam gerekmez. Yangın-ve-unutma davranışını burada istiyorum. Onu beklemek gerçekten bir seçenek değil. – FUR10N

İlgili konular