0

ここ数日、私は .NET Framework、特に Visual Basic プログラミング言語に触れていました。今日、解決できない例外が発生しました。これは BadImageException です。もちろん、親友の Google にサポートを依頼しました。抽出した結果から、間違ったプラットフォーム (x86 と x64) が原因でエラーになるようです。したがって、これらの設定を確認したところ、「任意の CPU」に設定されていることがわかったので (明らかに、これは x64 と x86 の両方を意味する必要があります)、おそらくそれが私のエラーの原因ではありません。誰かがそれを解決する別のアイデアを持っていますか?

VB 部門は、Java および C++ 部門よりもはるかに小さいようですが、誰かが私を助けてくれることを願っています。私を幸せにして、あなたの答えを楽しみにしています。

すみません、これを忘れていました。Childkat.ftp2 を使用して FTP サーバーに接続しています。

ftp As New Chilkat.Ftp2
Try 
    success = ftp.Connect() 
    If (success <> True) Then 
        Dim failReason As Integer 
        failReason = ftp.ConnectFailReason 
        MessageBox.Show(ftp.LastErrorText) 
        End 
    End If 
Catch e As BadImageFormatException 
End Try 
4

3 に答える 3

1

この例外は、x86 としてマークされているか、ネイティブ 32 ビット コードを使用しているアセンブリに依存している場合にも発生します。この Chilkat コンポーネントがそのような設定または依存関係を持つ可能性が高いです。彼らは、通常 C++ で記述された種類の ActiveX コントロールから始めました。その .NET バージョンを出荷するのは簡単です。C++ コードの周りに .NET ラッパーを作成することは、ActiveX として始まったときはそれほど難しくありません。ただし、マネージド コードのみを使用するように完全に書き直すことは、大きな投資です。だから彼らはおそらくそれをしませんでした。

このコンポーネントを使用する限り、AnyCPU を使用することはできません。EXE プロジェクト、[プロパティ]、[コンパイル] タブを右クリックし、下にスクロールします。Advanced Compile Options ボタンをクリックし、Target CPU 設定を AnyCPU から x86 に変更します。これが気になる場合は、ベンダーに連絡して 64 ビット バージョンを要求してください。すべきではありません。

于 2013-06-06T12:12:59.723 に答える
0

Google経由でアクセスする他の人にとって、このリンクが役立つことがわかりました:

http://blogs.msdn.com/b/distributedservices/archive/2009/06/17/badimageformatexception-or-typeinitializationexception-when-using-mixed-mode-vc-dlls-in-managed-services-applications.aspx

私の問題は、.NET2で実行されているユーザーコントロールを介してロードしようとする.NET4でコンパイルされたマネージDLLへのCOM参照でした。COM リファレンスがサード パーティの dll に埋もれていて、ソースがなかったので、Windbg は非常に役に立ちました。

于 2014-03-07T08:20:06.297 に答える
0

デプロイされた ChillKat DLL は、おそらく、使用しているドット ネット フレームワークよりも古いバージョンに対してビルドされたものです。これは、開発マシンでライブラリを更新し、本番環境で対応するバージョンを更新するのを忘れているときに見られました。

この例外は、ダイナミック リンク ライブラリ (.dll ファイル) または実行可能ファイル (.exe ファイル) のファイル形式が、共通言語ランタイムで期待される形式に準拠していない場合にスローされます。特に、例外は次の条件下でスローされます。

ILDasm.exe や installutil.exe などの以前のバージョンの .NET Framework ユーティリティは、新しいバージョンの .NET Framework で開発されたアセンブリと共に使用されます。

この例外に対処するには、アセンブリの開発に使用された .NET Framework のバージョンに対応するバージョンのツールを使用します。これには、Path 環境変数を変更するか、正しい実行可能ファイルへの完全修飾パスを指定する必要がある場合があります。

アンマネージ ダイナミック リンク ライブラリまたは実行可能ファイル (Windows システム DLL など) を .NET Framework アセンブリであるかのように読み込もうとします。

http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspxを参照してください。

于 2013-06-06T11:45:29.293 に答える