スケジュールされたタスクとして実行される非常に単純なコンソール アプリを .NET 4.0 で作成しました。一定期間変更されていないローカル ファイルを探し、ファイルを解析し、MySQL データベースにレコードを挿入し、ファイルをネットワークにコピーします。ローカル SQLite データベースを使用して、既に処理されたファイルを追跡していますが、残念ながら、最初の SQLite 操作で 1 つのシステムで問題が発生しています。
System.BadImageFormatException: Could not load file or assembly 'System.Data.SQLite.dll' or one of its dependencies. is not a valid Win32 application. (Exception from HRESULT: 0x800700C1) File name: 'System.Data.SQLite.dll'
at FileDatabase.CreateDatabaseAndTable()
at Program.Main(String[] args)
この例外は、1 つのシステム (Windows 7 x64 Home Premium と .NET 4.0 フル) でスローされますが、他の 2 つのシステム (開発システム + もう 1 つ、両方とも Windows 7 x64 Professional と .NET 4.0 フル) ではスローされません。
他の質問を参照すると、SQLite DLL は 32 ビット バージョンであるため、プログラムが 64 ビット モードで実行されている場合にこれが発生する可能性があることがわかります。最初に確認したのは、アクティブなプラットフォームが Visual Studio 構成マネージャーで x86 であることです。また、IL DASM を使用して、出力 exe が 32 ビットであることを確認しました (.corflags 0x00000003 // ILONLY 32BITREQUIRED)。32 ビットと 64 ビットのコンピューター用に異なるバージョンのアプリケーションを作成する必要がないように、32 ビットの SQLite DLL とターゲット プラットフォームを x86 のままにしたいと考えています。
また、この例外は DLL ファイルの破損が原因で発生する可能性があることも読みましたが、一部のコンピューターでは動作するため、そうではないと思います。
問題のシステムで私が試した他のことは役に立ちませんでした:
- GAC および Windows ディレクトリで誤った SQLite DLL を検索しましたが、何も見つかりませんでした。
- AVG アンチウイルスをオフにします。
- 公開された ClickOnce アプリケーションの代わりに、exe を直接実行します。
- ClickOnce アプリケーションのアンインストールと再インストール。
任意の提案をいただければ幸いです - ありがとう!