Hata: Visual C++ bileşeni uzantıları kullandığınızda AppDomainUnloaded özel durum yönetilen...
(الشرق الاوسط (العربية Brasil (Português) Deutschland (Deutsch) España, Latinoamérica (Español) France (Français) Indonesia (Bahasa Indonesia) Italia (Italiano) Portugal (Português) Slovenská Republika (Slovenčina) United States (English) Việt Nam (Tiếng Việt) Česká republika (Čeština) Россия (Русский) भारत (हिंदी) ไทย (ไทย) 中国 (简体中文) 台灣 (繁體中文) 日本 (日本語) Makale numarası: 309694 - Bu makalenin geçerli olduğu ürünleri görün.Otomatik tercüme makalelerin ne olduğunu açıklayan yazıyı okumak için buraya tıklayınMicrosoft destek sayfalarında makine çevirisiIf you are a Small Business customer, find additional troubleshooting and learning resources at the Support for Small Business site.Hepsini aç | Hepsini kapaBu SayfadaBelirtilerÇağrı yönetilmeyen kod içinde tek bir DLL DOSYASıNı doğrudan yönetilen için yönetilmeyen aramaları da dahil olmak üzere, yönetilen kod yapıldığında, bu sorun oluşur. Örneğin, bu sorun oluşabilir, MEC + +/ IJW ASP.NET'te kullanılan uygulamalar. ASP.NET'te, çeşitli olayları, uygulamaların yeni bir AppDomain yeniden yüklenmesi neden olabilir. Bu uygulamada MEC ++ bileşenleri ve IJW kullanıyorsanız, AppDomainUnloadException hata iletisi alabilirsiniz. Üste | Geri Bildirim VerNedenC++ derleyicisi kullanarak oluşturduğunuz yönetilen bir DLL DOSYASıNı yüklediğinde, IJW uygulamasının bir parçası olarak, çalışma zamanı thunks geçişleri için yönetilmeyen kod için yönetilen kod oluşturur. Bu thunks, DLL yükler uygulama etki alanı için bir başvuru içerir. DLL yeniden yüklenirse, çalıştırma modülünün bu thunks yeniden değil; ayrıca, çalışma zamanı başvuru özgün uygulama etki alanı kaldırır ve başka bir AppDomain içinde DLL yükler güncelleştirmez. Program bir geçiş yönetilmeyen kod yönetilen kod, güncel olmayan uygulama başvuru yönetilen kod çalıştırma için programın kullandığı gerçekleştirdiğinde. Özgün uygulama halen yüklü olsa bile kodu alanları, uygulama için özel olduğundan statik alanları erişemiyor. Üste | Geri Bildirim VerPratik ÇözümAşağıdaki geçici çözümlerden iki senaryonun göre gruplandırılmıştır: Bir geçiş iki DLL üzerinden yönetilen koda yönetilmeyen kodAynı dll'de yönetilen koda yönetilmeyen kod BIR geçişYönetilmeyen kod için kod geçiş iki DLL arasında yönetilenBu özel sorunu gidermek için aşağıdaki yöntemlerden birini kullanın. Geçici Çözüm 1ASP.NET istemcileri için ASP.NET ana bilgisayar işlemi DomainUnload olay yakalayarak kapatmaya izin verir. Ancak, öncelikle DomainUnload olay bir temsilci kaydetmeniz gerekir. Bunu yapmak için şu adımları izleyin: ASP.NET Uygulama</a0> sınıfının <a1>Application_Start</a1> yönteminde, uygulama kaldırır, adlı bir temsilci kaydı.Aspnet_wp.exe kayıtlı temsilci, kapatma işlemi.Not Bu geçici çözümü tüm ASP.NET uygulamaları bilgisayarı yeniden başlatmaya neden olur; bu uygulamaları için işlem içindeki oturum durumu verileri kaybolur. Internet ınformation Service (IIS) 6.0 Windows Server 2003 çalıştıran bir bilgisayarda, program her işlem modunda bir uygulama için yapılandırabilirsiniz. Configuing uygulama havuzları hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/2a231dcb-d786-4b6d-b3ba-bda04061a5e7.mspx?mfr=true
Geçici çözüm 2Yönetilen koda yönetilmeyen kod gelen tüm geçişler çağrıları (AppDomain belirli olan) bir temsilci kullanarak oluşturduğunuz bir yönetilmeyen işlev işaretçisi ile değiştirin. Temsilci IJW yerine Platform çağırma Hizmetleri (P/ınvoke) kullanarak Yönetilmeyen koda sıralanmış.Bu makalenin "Daha fazla bilgi" bölümünde açıklanan yönetilmeyen DLL için aşağıdaki örnek kodu P/ınvoke geri arama yöntemi kullanmak üzere kullanımı gösterilmiştir:
Aynı dll'de kod geçiş yönetilmeyen kod için yönetilenBu senaryoda, yöntemleri, (# pragma yönetilmeyen ile işaretli) yönetilmeyen bu makalenin "Daha fazla bilgi" bölümünde gösterilen bir yönetilen bileşende aynı dll'de yöntemleri çağırmadan. Bu özel sorunu gidermek için aşağıdaki yöntemlerden birini kullanın: Geçici Çözüm 1Işlev işaretçisini bir temsilci olarak sıralama ve bu temsilciyi kullanın. Aynı DLL üzerinde P/ınvoke kullanamazsınız, çünkü bir sarmalayıcı bir işlev işaretçisini bir temsilciye sıralamakta yardımcı DLL DOSYASı oluşturun. Verilen bu işlev, kendisine geçirilen temsilci adresini döndürür. Aşağıdaki örnek kod, bu geçici çözümü bir örnektir:
C++ için yönetilen uzantılar için aşağıdaki örnek kodu olan önceki Helper.dll kullanan bir derleme:
Geçici çözüm 2Iki DLL içinde MEC ++ derleme, bölme, bileşenleri yalnızca içeren bir yönetilen ve diğer, yalnızca yönetilmeyen bileşenleri içerir ve P/ınvoke Senaryo 1, 2 geçici çözümde anlatıldığı biçimde kullanın. Üste | Geri Bildirim VerDurumMicrosoft, Microsoft bir hata olduğunu onaylamıştır bu makalenin başında listelenen ürünlerden. Üste | Geri Bildirim VerDaha fazla bilgiSorun, ana bilgisayar ya da istemci uygulamasını kaldırmak ve uygulama etki alanları'nı yeniden yükleyin ve uygulama MEC ++ ve IJW bileşenleri kullanan geçişleri yönetilmeyen kod tarafından yönetilen kod içeriyorsa daha yaygın olarak karşılaşılan bazı kaynaklanmaktadır. ASP.NET iyi bir ana örneğidir. ASP.NET'te, bir şey belirli dosyaları (örneğin, Machine.config) temas için bellek kullanım eşik geçmesini AppDomain unload olayı tetikleyen olaylar olabilir. Davranışı yeniden oluşturma adımlarıBu örnekte, MEC ++ bileşenini çağıran bir ASP.NET uygulaması varsa, ve bu bileşen MEC ++ bileşenindeki yöntemlerden işaret eden bir işlev işaretçisi var. Bileşeni, işlev işaretçisi aşağıdakilerden birini geçirir: bir işlev bir yönetilmeyen DLL tarafından verildiaynı dll'de yönetilmeyen bir yöntemiYönetilmeyen kod sonra MEC ++ bileşeninden alınan işlev işaretçisi kullanarak bir geri arama yapar. Aşağıdaki senaryolarda, işlev işaretçisi yönetilmeyen işlevini çağırır önce özgün AppDomain içinde DLL yüklendi kaldırılır, olanaklıdır. Bu gibi koşullarda yönetilmeyen kod hala özgün uygulama başvurur ve bu bağlamda yönetilen koda çağrı açılmaya çalışılır. Yönetilmeyen kod için yönetilen kod geçiş arasında iki DLLVerilen yönetilmeyen bir DLL işlevi bir MEC ++ çağrı aşağıdaki yollardan biriyle bir derlemede: IJW kullanarakP/ınvoke kullanarakAşağıdaki örnek kodu bir yöntem verir yönetilmeyen bir DLL (Win32.dll) kullanır.
yönetilen BIR C++ derlemesi için Win32.lib bağlantı kurarak ve uygun üstbilgi dosyasına ekleyerek bu yöntemle IJW çağırabilirsiniz. Aşağıdaki örnek kod, verilen yönteminin nasıl kullanılacağını gösterir. # include sonra "win32.h" <a1>Ad</a1> sistem kullanılarak <mscorlib.dll> # kullanarak
Yönetilmeyen kod için yönetilen kod geçiş aynı dll'deBu senaryoda, aşağıdaki örnek kodda gösterildiği gibi MEC ++ derleme üzerinde aynı dll'de bir MEC ++ bileşen yöntemlerini çağıran (# pragma yönetilmeyen ile işaretli) yönetilmeyen yöntem içerir.
Üste | Geri Bildirim VerReferanslarDaha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerini ziyaret edin: Uygulama etki alanlarıhttp://msdn2.microsoft.com/en-us/library/cxk374d9(vs.71).aspx?frame=true
C++ programı için Yönetilen Uzantılarhttp://msdn2.microsoft.com/en-us/library/aa712574(vs.71).aspx
ASP.NET Web uygulamaları oluşturmahttp://msdn.microsoft.com/en-us/library/aa719794.aspx
Alt işlem yalıtım moduhttp://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/34604f82-9175-4d48-b5ea-1e11f19db5f3.mspx?mfr=true
Üste | Geri Bildirim VerÖzelliklerMakale numarası: 309694 - Last Review: 17 Mayıs 2007 Perşembe - Gözden geçirme: 4.7Bu makaledeki bilginin uygulandığı durum:Microsoft Visual C++ .NET 2002 Standard EditionMicrosoft .NET Framework 1.0Anahtar Kelimeler: kbmt kbbug kbijw kbmanaged kbpending KB309694 KbMttrMachine-translated ArticleÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.Makalenin İngilizcesi aşağıdaki gibidir:309694