webdevqa.jp.net

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

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

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

何が得られますか?


編集:(OPではない)より多くのヒットを取得しているdupから抽出された完全なメッセージ[googleability]:

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つをロードできませんでした。不正な形式のプログラムをロードしようとしました。

94
Epaga

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

16
Epaga

それが誰かを助ける場合の完全性のためのいくつかの詳細...

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

つまり、次を実行します:

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

または:

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

動作しません(他のフレームワークバージョンの代わりに:v1.1.4322(32ビットのみ。この問題は発生しません)およびv4.0.30319上記の必要に応じて)。

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

最後に、 Visual Studio 2010では、ツールはデフォルトでx86バイナリAny CPUではなく )を生成します。以前 )。

System.BadImageFormatException の完全な詳細(唯一の原因が不一致であると言うことは、実際に過度の単純化です!)。

x64インストーラーの下でBadImageFormatExceptionを使用するもう1つの理由は、Visual Studio 2010の 、デフォルトの.vdproj Install Projectタイプは、32ビットのInstallUtilLib shimを生成します。x= 64システム上でも ( 64ビットのマネージカスタムアクションは、ページでSystem.BadImageFormatException例外をスローします)。

142
Ruben Bartelink

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

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

32ビットアプリケーションが正常にインストールされます。

10
Sachin Kalia

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

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

サービスを作成し、installutil.exeを使用してインストールしようとすると、次のエラーが発生しました。

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

これまでは元の著者と同じです。

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

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

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

6
James Crowther

上記のすべてのソリューションを試した後、プロジェクト.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>

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

1
SohamC

それが誰かを助ける場合、私は this answer を使用してこの同じ例外を同様の質問に修正することができましたが、installutil.exeを使用することから例外を取得しませんでした。

1
Joseph Snow

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

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

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

0
mabiyan

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

0
dermot kirk

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

0
GregN

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

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

enter image description here

0
VK_217

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

0
Daniel D

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

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

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

0
Logan

このメッセージがlive testsであるがnit testsではないの場合、選択されたアセンブリが$(SolutionDir)\.vs\$(SolutionName)\lut\0\0\x64\Debug\に即座にコピーされるためです。ただし、相互運用c ++/c#プロジェクトの場合のVC++ dllなど、一部のアセンブリを選択できないことはできません

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

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

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

0
Soleil

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

enter image description here

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

enter image description here

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

0
zar