2013-02-08 14 views
6

Birden çok varolan kitaplığı kullanarak Windows 8 64 bit makinede bir Web Uygulaması üzerinde çalışıyorum. Bir yerel DLL başvuran iki C# DLL kullanmak istiyorum. Her iki C# DLL 64bit kullanımı için derlenmiş ve test uygulamalarında test edilmiştir. Web uygulamamda hem C# DLL'leri başvuruyor hem de IIS 8'de çalıştığı varsayılıyor. İki C# DLL dosyasını projeye referans olarak ve yerel DLL'yi web uygulamasının bin klasörüne el ile ekledim. Çözümü oluşturup çalıştırdığımda başlığında gösterilen istisnayı alırım. Bu işlemin bir işlemde 32 bit ve 64 bit kodla ilgili bir sorun olduğuna işaret ettiğini biliyorum. Bu nedenle tüm farklı yapı yapılandırmalarını denedim, ancak sonuç hiç değişmedi.BadImageFormatException: Dosya veya derleme yüklenemedi ... hatalı biçim - Yalnızca Web Uygulaması ile

Web uygulamasında tam olarak neyi denediğimi yapan bir konsol uygulaması oluşturdum ve sorunsuz çalıştı. Tam olarak aynı ayarlara sahip Web uygulaması istisnayı atar, bu gerçekten kafa karıştırıcı olan şeydir.

şimdiye kadar çalıştığım şey:

  • Değişim uygulama havuzu Herhangi CPU ile
  • Yapı tüm DLL "32-bit uygulamaları etkinleştirmek" ayarını, 64Bit veya x86 hedef
  • tüm corflags edin DLL

Bu yapılandırmayı çalıştırmama yardımcı olmak isteyen herkese projenin bir ihracatını sağlayabilirim!

Her yardım için minnettarım!

+0

Bunun için henüz bir çözümünüz var mı?Çünkü aynı sorunu yaşıyoruz ve bugüne kadar çalışan bir çözüm bulamadık. –

+0

Merhaba Saeed, geç cevap için özür dilerim. Projem bir web uygulaması olduğu için, yerel dll'nin işlevselliğini REST aracılığıyla sağlayan bir web hizmeti olarak ikinci bir web uygulaması oluşturmaya karar verdim. Soruna başka bir çözüm bulamadım. – JZet

cevap

0

Uygulamamda da aynı sorunu yaşıyorum. Aşağıdakileri gerçekleştirdikten sonra düzeltildi:

* Web sitemdeki klasörde "Anonim" kullanıcı için izin verme.
* Uygulama havuzunu ".NET v4.5 Classic" adresinden ".NET v4.5" olarak değiştirin.

0

Tüm önerdiğim, neyin yüklenmediğini belirlemede biraz yardımcı oluyor. Eğer bir dev sunucuysa, Fusion Log Viewer'u kullanmak için uygun sdk'yi kurmak faydalı olabilir. bu bir seçenek değil ise aşağıdaki gibi kayıt defterinden montaj bağlayıcı günlüğünü etkinleştirebilirsiniz:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion] 
"LogFailures"=dword:00000001 
"LogPath"="c:\\bindFailureLogs\\" 

sadece işiniz bittiğinde kapatmak için emin olun, montaj bağlama günlüğü kullanarak bir performans cezası var . Kayıt defteri anahtarını girmeden önce klasörün var olduğundan emin olun ve günlüğe kaydetme işlemi için uygulamanın uygulama havuzunu geri dönüştürün. Bu, hangi dll (veya bağımlılık veya hata mesajında ​​listelenen dll olursa olsun her zaman açıkça görülmediğinden) ve yüklenmeye çalışıldığı yer olan dll'nin ayrıntılı bir listesini sağlayacaktır.

Sorunu gideren uygulamaların bölümlendirilmesi, farklı sürümleri hedefleyen derleme üzerinde birden çok bağımlılık olduğunu ve bir uygulamanın yalnızca bir tek bir sürümünün bir uygulama etki alanına yüklenebileceğinden bazı bağımlılıkların karşılanmadığını düşündürmektedir. Yönetilen derlemeler için bir assembly binding redirect kullanabilirsiniz, ancak eğer var ise yönetilmeyen eşdeğerinin ne olduğunu bilmiyorum.