2010-07-14 13 views
5

Yazılımımızı vs2008/.net 3.5 veya vs2010/.Net 4.0 sürümüne yükselttim. Tüm üçüncü parti kütüphaneleri (en alakalı: nhibernate 2.1.2 veya 3.0.0, nunit 2.5.2) hala vs2008 kullanılarak derlenmiştir. Yazılımımızın hata ayıklama yapısı için birim testlerini çalıştırdığımda her şey iyi çalışıyor. Serbest bırakma yapısında rahibe, 228 testin 33'ünde istisnalar rapor ediyor: System.InvalidProgramException : Common Language Runtime detected an invalid program. Her iki rahibe konsolu ve Resharper 5.0 test koşucusu için her zaman aynı testlerde oluyor. Resharper "debug unit-tests" komutunu kullanarak bunları çalıştırdığımda, tüm testler geçer. Testleri tek başıma mı çalıştırdığımı mı yoksa toplu mı yaptığımı fark etmez. İstisna her zaman nhibernate sorgu çağrılarına yakın olur, ancak sürüm oluşturma yığın izinin biraz seyrek olduğundan emin olamıyorum. Bu nhibernate bytecode jeneratör bağlı değildir, aynı istisna kale ve linfu için görünür. Bunun nasıl hata ayıklanacağı konusunda bir fikri olan var mı?nunit: "Ortak Dil Çalışma Zamanı, geçersiz bir program algıladı."

Düzeltme: Spring.NET'i kaldırma, bu sorun üzerinde hiçbir etki yapmamıştır.

Düzenleme: tam yerine pdb için serbest bırakma yapılandırma ayıklama çıktısını geçtiğinizde sadece ve optimize kod onay kutusunu devre dışı bırakmak, istisna kaybolur. Her iki ayar gereklidir, bunlardan sadece birini değiştirirsem hata kalır. Ancak, sadece bir tane değiştirirsem farklı bir test kümesi başarısız olur. Tüm sınıf kitaplıkları Herhangi bir CPU için derlenmiştir.

+0

Projenin sürüm ve hata ayıklama yapılandırmalarının farklı olup olmadığını kontrol edebilir misiniz? Bazı durumlarda, yapılandırmada hata ayıklamak için X'i eklediğimiz bazı durumlar gördüm ... – Gishu

+0

@Gishu: Farkı, hata ayıklama çıktısına kadar izleyebildim ve kod ayarlarını optimize ettim - başka hiçbir ayar görünmüyor bu sorunu etkiler. –

+0

Hmm .. Burada kesin bir yön yok. Birkaç çirkin aramadan, üçüncü taraf dll çağrıları ile ilgili gibi görünüyor. http://bit.ly/g3iwnK Stacktrace almaya ve doğru MS forumu gönderme deneyin-bir niş alanı gibi görünüyor (tam olarak SO's forte değil) – Gishu

cevap

0

Bu muhtemelen aptalca bir sorudur: tüm derlemelerin aynı mimariye (x86/x64) derlendiğinden emin misiniz? Bunu bir ara geri döndüm.

+0

Tüm montajlar için derlendiğinde çalışması gerekir * Any CPU *, ya da Hedefi açıkça belirtmek zorunda mıyım? –

+0

Herhangi bir CPU çalışmalıdır. JIT derleyicisi, işleri yürütmek için uygun mimariye derler. – Amy

0

"NET Framework 4.0 İstemci Profili" ni seçtiğimde benzer bir şey yaşadım. Hedef çerçevesi için "NET Framework 4.0" değiştirmeye çalışın

+0

Zaten tam 4.0 profili, CP değil. –

0

başvurum da serbest bırakma yapılandırmasına aynı hariç ayıklama ama kazasında aday olacağını. Nedeni, bir değer döndürdü koşullu "DEBUG" özniteliği ile bir yöntem vardı ...

Elbette, serbest bırakma yapılandırmasında, koşullu "DEBUG" özniteliği olan tüm yöntemler, dönüşü olmayan saplamalar olarak değiştirilir değer. Bu nedenle IDE, türlerinizin kod analizi ile ince bir gong olduğunu ve hiçbir uyarı sunmadığını düşünebilir, ancak derlenmiş uygulamada getiri türü eşleşmeleri vardır!

Sadece bu konuyla kafalarını duvara çarpanlar için bunu eklemeliyim.

İlgili konular