System.BadImageFormatException:ファイルまたはアセンブリを(installutil.exeから)ロードできませんでした


104

InstallUtil.exeを使用してWindowsサービスをインストールしようとすると、エラーメッセージが表示されます

System.BadImageFormatException:ファイルまたはアセンブリ ' {xxx.exe}'またはその依存関係の1つを読み込めませんでした。不正な形式のプログラムを読み込もうとしました。

何ができますか?


編集:(OPによるものではありません)dupから抽出された完全なメッセージは、はるかに多くのヒットを得ています[グーグル性のために]:

C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> InstallUtil.exe C:\ xxx.exe Microsoft(R).NET Frameworkインストールユーティリティバージョン4.0.30319.1 Copyright(c)Microsoft Corporation。全著作権所有。

インストールの初期化中に例外が発生しました:System.BadImageFormatException:ファイルまたはアセンブリ 'file:/// C:\ xxx.exe'またはその依存関係の1つを読み込めませんでした。不正な形式のプログラムを読み込もうとしました。

回答:


154

それが誰かを助ける場合に備えて、完全性のためのもう少し詳細...

最近この例外の最も一般的な理由は、32ビット固有の(/platform:x86)DLLを64ビットのプロセスにロードしようとすること、またはその逆(つまり、64ビット固有の(/platform:x64)DLLを32ビット)。あなたの場合platform、非特異的に(ある/platform:AnyCpu)、これは(なし、参照依存関係が間違っbit化であると仮定した場合)に発生しません。

つまり、次のように実行します。

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

または:

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

機能しません(他のフレームワークバージョンで置き換えます:v1.1.4322(32ビットのみなので、この問題は発生しません)v4.0.30319、上記のとおり)。

明らかに、他の回答でカバーされているinstallutilように、実行している.NETのバージョン番号が、インストーラーを実行しているEXE / DLLファイルの> =(できれば=)であることも必要です。

最後に、Visual Studio 2010では、ツールはデフォルトでx86バイナリーを生成すること注意してください(以前のようにAny CPUではなく)。

System.BadImageFormatExceptionの完全な詳細(唯一の原因は不一致の噛みつきであると言うのは、実際には非常に単純化しすぎです!)

もう一つの理由BadImageFormatExceptionの下のx64インストーラがあることであるVisual Studioの2010年には、デフォルトでは.vdprojインストールプロジェクトの種類は、32ビットの生成InstallUtilLib、シムをも、x64システム上で(検索で「64ビット管理されたカスタムアクションSystem.BadImageFormatException例外を投げます」ページ)。


同じ問題がありました。上記の内容に従ってデバッグを開始すると、Platform:がx86に設定されていることがわかりました。私がそれをAny CPUに変更したとき、それはうまくいった:)
Atta H.

Windowsインストーラーでカスタムアクションを使用しています。私のセットアップはx64システムで実行する必要があるため、カスタムアクションのプロパティは、オプション「Run64Bit」をtrueにチェックする必要があります。それは私の問題を解決しました。
ハーゲン

16

最新のフレームワーク(アプリをコンパイルしたフレームワーク)がPATHの最初にあることを確認してください。これで問題は解決しました。(フォーラムで見つかりました


そのリンクはなくなっているようです。それほど驚くことではありません。6年前。
Al Lelopath 2014年


9

64ビットバージョンのツールを使用して32ビットアプリケーションをインストールしていると思います。また、本日この問題に直面し、このフレームワークパスを使用して対応しました。

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

そして、それはあなたの32ビットアプリケーションをうまくインストールするはずです。


それが私のシナリオでした。非常に役立つ答え。
Simos Fasouliotis

少なくとも元の回答をリンクする:stackoverflow.com/revisions/5229405/1
粗雑な

8

重要なのは、2つの場所にあるプロジェクトのプロセッサ設定を一致させることです。

ここに画像の説明を入力してください

また、次に示すように、[アーキテクチャ]設定が[テスト]メニュー> [テスト設定]> [デフォルトのプロセッサアーキテクチャ]で同じであることを確認してください。

ここに画像の説明を入力してください

これはVS2013の場合ですが、他のバージョンでも同じかもしれません。

アップデート-VS2019の場合:

ここに画像の説明を入力してください


これは、このエラーを修正する正しい方法です。つまり、何百ものcsprojファイルをいじりたくない場合。
ビザン

6

OK、これは私が抱えていた問題であり、それを修正したものは、上記に非常に関連しているようです。

Visual Studio 2010 Expressを使用しています。実際には何もしないテストサービスを作成しました。あとは本物のための練習でした。

私はサービスを書き、それを使用installutil.exeしてそれをインストールしようとすると、次のエラーが発生しました:

System.BadImageFormatException:ファイルまたはアセンブリ '{filename.exe}'またはその依存関係の1つを読み込めませんでした。不正な形式のプログラムを読み込もうとしました。

これまでのところ、元の作者と同じです。

ルーベンの観察Visual Studio 2010の32ビット出力に関する上記のは、ここでの救い主でした。

私は64ビットバージョンのを使用しましたinstallutil.exeが、Visual Studio 2010ビルドの出力は32ビットでした。ここに少し余分な値を追加するだけで、最新の.NETフレームワークの32ビットバージョンとinstallutil.exeC:\ Windows \ Microsoft.NET \ frameworkフォルダーに関連付けられたものが見つかります。このバージョンのinstallutil.exe修正された私の問題を使用します。問題なくインストールされたサービス!

これが他の誰かの役に立つことを願っています。


32ビットバージョンの意味がわかりませんが、ここで試してみましたが、C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727
user2568374

3

言及されたすべてのソリューションを試した後、プロジェクト.csprojの構成にPlatformTarget何とか追加されたことがわかりました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>

行を削除すると、うまくいきました。


私の場合、64ビットのビルドが必要な場合、PropertyGroupノードの1つに<PlatformTarget> x64 </ PlatformTarget>ノードがなかったため、おそらくデフォルトで32ビットになり、不正な画像フォーマットエラーがスローされました。この不足しているノードをプロパティグループに追加すると、エラーが消えました。
トム・リーガン

この解決策を試すと、別の問題が発生しました。それは、構成ファイルが出力ディレクトリにあるにもかかわらず、実行時app.configのappSettingsが読み込まれないことでした。ただし、zarのアプローチ(Processor Architecture for AnyCPU Projects)を試した後、すべてが再び機能し始めます。
ビザン

1

VS 2015を使用するWinFormsプロジェクトでこの問題が発生しました。私の解決策は次のとおりです。

  1. プロジェクトを右クリック
  2. プロパティを選択
  3. 「32ビット優先」をチェック
  4. プラットフォームターゲット:任意のCPU

0

同じ問題がありました。標準コマンドで実行しています。X86テストに対してX64 ro runを呼び出していました。nunit-runnerのX64バージョンではなく、X86を指定する必要がありました。


0

まとめると、64ビットシステムに64ビットサービスを正常にインストールするには、BuildとProject \ Build \ Platformの両方をx64に設定する必要があります。


0

私の問題は異なっていました。これは、Windows 7マシンの予期しないシャットダウン後に発生しました。クリーンソリューションを実行したところ、期待どおりに実行されました。


0

ライブテストではこのメッセージが表示されますが、単体テストでは表示されない場合は、選択されたアセンブリがにコピーされているため$(SolutionDir)\.vs\$(SolutionName)\lut\0\0\x64\Debug\です。しかし、選択できないアセンブリがいくつかあります、interop c ++ / c#プロジェクトの場合、VC ++ dllなど、ます。

ビルド後 xcopyコピーされたファイルはライブテストエンジンによって消去されるため、は問題を修正しません。

これまでの唯一の回避策(2018年12月28日)は、ライブテストを回避し、ユニットテストで属性を使用してすべてを実行することです [TestCategory("SkipWhenLiveUnitTesting")]し、テストクラスまたはテストメソッドに適用してです。

このバグは、15.9.4までのVisual Studio 2017で見られ、Visual Studioチームが対処する必要があります。


0

ターゲットビルドx64ターゲットサーバーホスティングIIS 64ビット

ウェブサイト/ウェブアプリケーションを実行しているappPoolホスティングを右クリックし、32ビットアプリケーションを有効にする= falseに設定します。

ここに画像の説明を入力してください


0

今日、私はこの問題に直面しました。私の場合、私のアプリケーションの(64ビットdllへの参照があった)プラットフォームターゲットはに設定されてAnyCPUいましたが、プラットフォームターゲットセクションの下のPrefer 32-bit チェックボックスはデフォルトでチェックされていました。これは問題であり、Prefer 32-bitオプションをオフにした後、すべて正常に動作しました。


0

同じ症状の問題に対する別の解決策が見つかりました:

プロジェクトを.net 4.7.1から4.7.2に更新したときに、このエラーが発生しました。

問題は、プロジェクトでSystem.Net.Httpを参照しなくなったにもかかわらず、web.configのdependentAssembilyセクションにリストされていることでした。これと他の未使用のアセンブリ参照をweb.configから削除すると、問題が解決しました。


0

問題は、System.BadImageFormatException: Could not load file or assemblyまったく関連付けられていないものも含めて、installutil.exeすべてこのスレッドにリンクしていることです。

  1. 問題が DLLに関連していてWindowsBasePresentationFrameworkアナライザーがインストールされている場合は、ソリューション内のすべてのプロジェクトにそれらがインストールされているか、どれにもインストールされていないことを確認してください。

    ここに画像の説明を入力してください

  2. .csproj2つだけではなく、ライブラリのファイルでフレームワーク全体を参照しますdlls

    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    
      <PropertyGroup>
        <OutputType>Library</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <RazorLangVersion>3.0</RazorLangVersion>
        <UseWpf>True</UseWpf>
      </PropertyGroup>
  3. 取り外しbinobj汚し、溶液をきれいにして再構築します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.