2010-08-29 33 views
18

IIS 7.0'da bir web sitesinde (Windows Server 2008'de VSTS 2010 + .Net 4.0 kullanılarak geliştirilen) bir sayfaya (default.aspx) erişmeye çalıştığımda, aşağıdaki hatayla karşılaştım: mesaj. Herhangi bir fikir yanlış nedir? BadImageFormatException nedir?BadImageFormatException sırasında. Net derleme yük sorunu

BTW: Windows Server 2008 64 bit (R2 değil) çalıştırıyorum ve Windows Server 2008 etkinleştirilmemiş, bu bir kök neden olabilir mi?

 
[BadImageFormatException: Could not load file or assembly 'test.foo' or one of its dependencies. Try to load bad formatted program. ] 
    System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0 
    System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) +567 
    System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +192 
    System.Reflection.Assembly.Load(String assemblyString) +35 
    System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +118 

[ConfigurationErrorsException: Could not load file or assembly 'test.foo' or one of its dependencies. Try to load bad formatted program. ] 
    System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +11392147 
    System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +484 
    System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +127 
    System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +334 
    System.Web.Compilation.BuildManager.CallPreStartInitMethods() +280 
    System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1087 

[HttpException (0x80004005): Could not load file or assembly 'test.foo' or one of its dependencies. Try to load bad formatted program. ] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11524352 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4782309 
+1

Derleme adınızın ".dll" eksik olduğunu düşünüyorum. Lütfen kod snippet'ini sağlayın. –

+3

64-bit/32 bit uyumsuzluğu? Meclislerinizi belirli bir platform için mi derlediniz? – Alex

+0

"Derleme adınızın eksik olduğunu düşünüyorum. .dll". Lütfen kod parçacığını sağlayın. " - Yığın parçasından, tüm kod yığın izinin kendi kodumda olmadığını düşünüyorum, öyle görünüyor. Net kendi kodu? Bu sorunu analiz etmek için ne .dll'yi sağlamaya ihtiyacım var ve hangi kod snippet'ini ihtiyacınız var? – George2

cevap

15

.net framework çalıştığını doğrulamak ASP .Net v4.0 web sitesinin uygulama havuzu ayarlamayı deneyin Eğer öyleyse Derleme dosyası bulunabilir, ancak uygun bir derleme değil veya bozuk. Örneğin, dosyaları sunucuya yönlendirdiyseniz ve aktarım kesintiye uğradıysa, DLL dosyası yalnızca kısmen aktarılmış olabilir ve bu hatanın gerçekleşmesine neden olabilir.

64 bit'e karşı 32 bit: P/Invoke veya COM Interop kullanırken, belirli bir hedef derlemeye geçiş yapan some blogger reports durumunuza yardımcı olabilir. Bu, eğer: Eğer bir 32 bit dll ile arayüzeyseniz, x86 için derlemenizi, WoW32 altında çalışmayı zorladığınızdan emin olun, aksi halde bu istisnayı alırsınız. Bu düzeltme, confirmed here ve here.

Alternatif olarak, komutu çalıştırarak 32-bit varsayılan tüm sistemi ayarlayabilirsiniz:

 
Ldr64.exe setwow 

Framework64 dizinden. Genel bir çözüm, dosyayı yeniden oluşturmak veya en azından yeniden yayımlamaktır. Genel bir çözüm, dosyayı yeniden oluşturmak veya en azından yeniden yayımlamaktır. 64 bit sunucu çalışan üzerine 32 bit dll dağıtırken Sadece bu var

+0

Test.foo.dll dosyasının bozuk ya da başka bir DLL dosyası olduğunu – George2

+1

@ George2: Ben test.foo.dll bozuk demek, ama yeni sezgilerimi, karşı-sezgisel görünebilir 32 bit vs 64 bit üzerinde görüyorum. – Abel

+0

@Abel güncellemeniz için teşekkürler, çözümü 64 bit platformuna (Windows Server 2008 64 bit olduğundan) yeniden kurmalıyım? – George2

2

Web siteniz DefaultAppPool kullanıyor mu? , bir özelleştirilmiş uygulama havuzu kullanıyorsanız Veya, BadImageFormatException zaman yükseltilir 4,0

+0

Yeni bir uygulama havuzu kullanıyorum. Ben zaten. Net 4.0 Framework kullanmak ve entegre modunu kullanmak için ayarlayın. Herhangi bir fikir? – George2

+0

Bu sorun Windows Server 2008 işletim sistemim tarafından etkinleştirilmemiş olabilir (henüz bir lisans numarası girmedim)? – George2

+1

Çözümünüzü hangi platformda oluşturuyorsunuz? Herhangi bir CPU? x86? Bir aktivasyon sorunu olduğunu düşünmüyorum. Üçüncü taraflar kullanıyor musunuz? – sagie

6

düzeltmek için 7.

IIS, ben set başvurumun Gelişmiş Ayarlar kısmında True "32 bit Uygulamaları Etkinleştir" zorunda havuzu.

+0

Bu benim için oldu, teşekkürler +1 – Lee

İlgili konular