System.BadImageFormatException: Dosya veya derleme yüklenemedi (installutil.exe'den)


104

InstallUtil.exe kullanarak bir Windows hizmeti yüklemeye çalışıyorum ve hata mesajı alıyorum

System.BadImageFormatException: Dosya veya derleme ' {xxx.exe}' veya bağımlılıklarından biri yüklenemedi . Yanlış biçime sahip bir program yüklenmeye çalışıldı.

Ne oluyor?


DÜZENLEME: (OP ile değil) Tam mesaj, çok daha fazla isabet elde etmekten çıkarıldı [googleability için]:

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> InstallUtil.exe C: \ xxx.exe Microsoft (R) .NET Framework Kurulum yardımcı programı Sürüm 4.0.30319.1 Telif Hakkı (c) Microsoft Corporation. Tüm hakları Saklıdır.

Kurulum başlatılırken özel durum oluştu: System.BadImageFormatException: Dosya veya derleme 'file: /// C: \ xxx.exe' veya bağımlılıklarından biri yüklenemedi. Yanlış formatta bir program yüklenmeye çalışıldı ..

Yanıtlar:


154

Birine yardımcı olması durumunda eksiksizlik için biraz daha detay ...

Bu günlerde bu istisnanın en yaygın nedeninin, 32 bit'e özgü ( /platform:x86) DLL'yi 64 bit olan bir işleme veya tam tersi olan bir işleme yüklemeye çalışmak olduğunu unutmayın (diğer bir deyişle, 64 bit'e özgü ( /platform:x64) 32 bit). Eğer sizin platformspesifik /platform:AnyCpudeğilse ( ), bu ortaya çıkmayacaktır (referanslı bağımlılıkların yanlış bitlik olmadığı varsayılarak).

Başka bir deyişle, koşarak:

% windir% \ Microsoft.NET \ Framework \ v2.0.50727 \ installutil.exe

veya:

% windir% \ Microsoft.NET \ Framework 64 \ v2.0.50727 \ InstallUtil.exe

çalışmayacaktır (diğer çerçeve sürümlerinde değiştirin: v1.1.4322(yalnızca 32 bit, bu nedenle bu sorun ortaya çıkmaz) ve v4.0.30319yukarıda istendiği gibi).

Açıkçası, diğer yanıtta da belirtildiği installutilgibi, yükleyiciyi çalıştırdığınız EXE / DLL dosyasının> = (tercihen =) olması için çalıştırdığınız .NET sürüm numarasının da olması gerekir .

Son olarak, Visual Studio 2010'da, aracın varsayılan olarak x86 ikili dosyaları oluşturacağını unutmayın ( daha önce olduğu gibi Herhangi bir CPU yerine ).

System.BadImageFormatException ile ilgili tüm ayrıntılar (tek nedenin yanlış eşleşmiş bitlik olduğunu söylemek gerçekten büyük bir aşırı basitleştirmedir!).

Bir x64 yükleyicinin BadImageFormatExceptionaltında bir başka neden , Visual Studio 2010'da, varsayılan Yükleme Projesi türünün , x64 sisteminde bile 32 bitlik bir şim oluşturmasıdır ("64 bit yönetilen özel eylemler bir System.BadImageFormatException istisnası atar" sayfa)..vdprojInstallUtilLib


Aynı sorunu yaşadım, yukarıda söylediklerinize göre hata ayıklamaya başladığımda Platform: x86 olarak ayarlandı. Herhangi bir CPU olarak değiştirdiğimde çalıştı :)
Atta

Özel eylemler içeren Windows yükleyicim var. Kurulumumun x64 sisteminde çalışması gerekiyor, bu nedenle Özel eylemler özelliklerinin "Run64Bit" seçeneğini doğru olarak işaretlemesi gerekiyor. Sorunumu çözdü.
Hagen


9

32 bitlik bir uygulama kurmak için aracın 64 bit sürümünü kullandığınızı düşünüyorum. Bugün de bu sorunla karşılaştım ve bu Çerçeve yolunu kullandım.

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319

ve 32 bit uygulamanızı sorunsuz bir şekilde yüklemelidir.


Benim için senaryo buydu. Çok yardımcı cevap.
Simos Fasouliotis

En azından orijinal yanıtı
bağlayın

8

Anahtar, iki yerde bulunan proje için işlemci ayarlarını eşleştirmektir.

görüntü açıklamasını buraya girin

Ayrıca mimari ayarlarının aşağıda gösterildiği gibi Test menüsü >> Test Ayarları >> Varsayılan İşlemci Mimarisi >> içinde aynı olduğundan emin olun.

görüntü açıklamasını buraya girin

Bu VS2013 içindir, ancak diğer sürümler için de aynı olabilir.

Güncelleme - VS2019 için:

görüntü açıklamasını buraya girin


Bu hatayı düzeltmenin doğru yolu budur. Yani, muhtemelen yüzlerce csproj dosyasıyla uğraşmak istemiyorsanız.
Bizhan

6

Tamam, bu sahip olduğum sorun ve onu düzelten şey, yukarıdakilerle çok alakalı görünüyor.

Visual Studio 2010 Express kullanıyorum. Gerçekten hiçbir şey yapmayan bir test hizmeti yazdım. Daha sonra gerçek şey için pratikti.

Servisi yazdım ve kullanarak kurmaya çalıştım installutil.exeve aşağıdaki hatayı aldım:

System.BadImageFormatException: '{dosyaadı.exe}' dosyası veya derlemesi veya bağımlılıklarından biri yüklenemedi. Yanlış biçime sahip bir program yüklenmeye çalışıldı.

Şimdiye kadar orijinal yazarla aynı.

Ruben'in yukarıdaki 32 bitlik Visual Studio 2010 çıktısı hakkındaki gözlemi burada kurtarıcı oldu.

64 bit sürümünü kullandım installutil.exe ve kesinlikle, Visual Studio 2010 derlemesinin çıktısı 32-bit idi. Sadece son .NET framework 32 bit sürümü ve ilişkili bulabilirsiniz, burada küçük bir ekstra değer katmak için installutil.exede \ Windows \ Microsoft.NET \ çerçevesi: C klasörü. Sorunumu çözmenin bu sürümünü kullanarak installutil.exe; hizmet sorunsuz bir şekilde kurulur!

Umarım bu başka birine yardımcı olur.


32 bit sürümle ne demek istediğini bilmiyorum ama buradaki denedim ve işe yaramadı C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727
user2568374

3

Bahsedilen tüm çözümleri denedikten sonra, projemdeki .csproj yapılandırmasına bir PlatformTargetşekilde eklenmiş buldum AnyCPU.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>x64</PlatformTarget>
</PropertyGroup>

Çizgiyi kaldırmak benim için çalıştı.


Benim durumumda, 64 bitlik bir derleme istediğimde, PropertyGroup düğümlerinden biri <PlatformTarget> x64 </PlatformTarget> düğümünü eksikti, bu nedenle varsayılan olarak 32 bit'e ayarlanıyor ve kötü görüntü formatı hatası veriyordu. Bu eksik düğümü özellik grubuna ekledikten sonra hata ortadan kalktı.
Tom Regan

Bu çözümü denemek benim için başka bir soruna yol açtı; bu, yapılandırma dosyasının çıktı dizininde mevcut olmasına rağmen app.config'in appSettings öğesinin çalışma zamanı sırasında yüklenmemesiydi . ancak zar'ın yaklaşımını ( Processor Architecture for AnyCPU Projects) denedikten sonra her şey yeniden çalışmaya başlar.
Bizhan

1

Bu sorunu VS 2015 kullanan bir WinForms Projesinde yaşadım. Çözümüm şuydu:

  1. Projeye sağ tıklayın
  2. özellikleri seçin
  3. "32 biti tercih et" i işaretleyin
  4. Platform hedefi: Herhangi bir CPU

0

Ben de aynı sorunu yaşadım. Yürütme için standart komutu kullanıyorum. X64 testlerine karşı X64 ro run diyordu. Nunit-runner'ın X64 sürümünü değil, X86'yı belirtmem gerekiyordu.


0

Özetle, 64 bitlik sistemde 64 bit hizmeti başarıyla yüklemek için hem Build hem de Project \ Build \ Platform x64 olarak ayarlanmalıdır.


0

Sorunum farklıydı. Bu, Windows 7 makinemin beklenmedik bir şekilde kapanmasından sonra meydana geldi. Temiz bir çözüm yaptım ve beklendiği gibi çalıştı.


0

Bu mesajın canlı testlerde alınması , ancak birim testlerinde olmaması durumunda , bunun nedeni seçilen montajların anında kopyalanmasıdır $(SolutionDir)\.vs\$(SolutionName)\lut\0\0\x64\Debug\. Ancak bazen birkaç derleme seçilemez , örneğin, birlikte çalışabilen c ++ / c # projeleri durumunda VC ++ dll'leri.

Oluşturma sonrası xcopy, kopyalanan dosya canlı test motoru tarafından silineceği için sorunu çözmez.

Bugüne kadarki tek geçici çözüm (28 Aralık 2018), Canlı testlerden kaçınmak [TestCategory("SkipWhenLiveUnitTesting")]ve test sınıfına veya test yöntemine uygulanan öznitelikle her şeyi birim testlerinde yapmaktır .

Bu hata 15.9.4'e kadar tüm Visual Studio 2017 sürümlerinde görülür ve Visual Studio ekibi tarafından giderilmesi gerekir.


0

Hedef derleme x64 Hedef Sunucu Barındırma IIS 64 Bit

Sağ Tıklama appPool web sitesini / web uygulamasını çalıştıran barındırma ve 32 bit application = false özelliğini etkinleştirin.

görüntü açıklamasını buraya girin


0

Bugün bu sorunla karşılaştım. Benim durumumda, uygulamamın (64 bitlik bir dll'ye referansı vardı) platform hedefi olarak ayarlandı, AnyCPUancak platform hedefi bölümünün altındaki Prefer 32-bit onay kutusu varsayılan olarak işaretlendi. Sorun buydu ve Prefer 32-bitseçeneğin işaretini kaldırdıktan sonra her şey yolunda gitti .


0

Aynı belirtiye sahip bir soruna farklı bir çözüm bulduk:

Projeyi .net 4.7.1'den 4.7.2'ye güncellediğimizde bu hatayı gördük.

Sorun şu ki, projede System.Net.Http'ye artık başvurmuyor olsak da, web.config'imizin bağımlıAssembily bölümünde listeleniyordu. Bunu ve kullanılmayan diğer tüm derleme referanslarını web.config dosyasından kaldırmak sorunu çözdü.


0

Sorun şu ki System.BadImageFormatException: Could not load file or assembly, birbiriyle ilişkili olmayanlar da dahil olmak üzere her biri bu installutil.exekonuya işaret ediyor.

  1. Sorununuz WindowsBaseveya PresentationFramework dll'lerle ilgiliyse ve çözümleyiciler yüklediyseniz, çözümünüzdeki tüm projeler için veya hiçbiri için bunları kurduğunuzdan emin olun.

    görüntü açıklamasını buraya girin

  2. .csprojYalnızca ikisi yerine kitaplığınızın dosyasındaki tüm çerçeveye referans verin dlls:

    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    
      <PropertyGroup>
        <OutputType>Library</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <RazorLangVersion>3.0</RazorLangVersion>
        <UseWpf>True</UseWpf>
      </PropertyGroup>
  3. Çıkarın binve objkirleyin, çözümü temizleyin ve yeniden oluşturun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.