ファイルまたはアセンブリを読み込めませんでした ... 不正なフォーマットでプログラムをロードしようとしました。
i. エラー
このエラーは、少し前に発生したものです。
" ファイルまたはアセンブリ 'R.. .tools, Version=1.0.0.0, Culture=neutral, PublicKeyToken=21ef81843f5d77b6' またはその依存関係の 1 つをロードできませんでした。不正なフォーマットでプログラムをロードしようとしました。 "
非常に汎用的なクラスをDLLに追加したところです。
あまりに当たり前すぎて、呼び出したらエラーになりました。そこで、そのクラスを削除したのですが、やはりエラーになりました。でもdllは正常に動いているので、ググってみたらまた64bitの問題だった!?なぜ、"again"があるのか、そう、windows server 2008 R2でSharePointを開発していると、32bitと64bitの互換性の問題に何度も遭遇しているのです。
II. その理由
その上の普通のクラスを追加する前に、下記を使ってエクセルアクセスクラスを追加しました。
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fullFilePathAndName + @";Extended Properties=""Excel 12.0;HDR=YES;""""
この excel access クラスを正しく呼び出せるようにするには、プロジェクトのプラットフォームターゲットを x86 に変更する必要があり、そうしないと以下のエラーが発生します。
System.InvalidOperationException: Microsoft.ACE.OLEDB.12.0' プロバイダがローカルマシンに登録されていません。
そこで、DLLとDLLを呼び出すアプリケーションのプラットフォーム・ターゲットの両方をx86に変更したところ、Excelアクセス・クラスを正しく呼び出すことができました - これが最初のエラーでした。
他のクラスやメソッドをテストしていないので、中にはx64環境でしか動作しないものがあるかもしれません。
III. 解決方法
- DllのプラットフォームターゲットをAny CPUに戻す。
- そのDLLを呼び出すアプリケーションをx86に変更します。
これで解決です。つまり、呼び出し側だけがプラットフォームターゲットをx86に変更する必要があり、呼び出し側は何もする必要がなく、任意のCPUのままなのです。
しかし、メインアプリケーションが、x64環境でしか利用できないDLL内のクラスも呼び出したい場合、同じエラーが発生するため、どうすればいいのか?x86のメソッドを使わずに、エクセルにアクセスする方法を変えるしかないでしょうね。
IV. その他の解決策
ネットで見つけたので、まだ試していませんが、また同じようなエラーが発生したときに役に立つかもしれません。
- 使用方法 ProcMon.exe (マイクロソフトの無料ツール)を使って、どのDLLがどこで呼び出されているかを正確に確認することができます。
- 64ビット環境で32ビットプログラムを許可するようにIISで設定する。
(1) コマンドラインで以下のディレクトリを開きます。
cd システムドライブ%/Inetpub/AdminScripts
(2)以下のコマンドを入力します。
cscript.exe adsutil.vbs set W3SVC/AppPools/Enable32BitAppOnWin64 1
V. 参考文献
関連
-
[解決済み】andiとoriはこのプログラムで何をするのですか?
-
[解決済み】単純なforループのためのMIPSアセンブリ
-
[解決済み】x86アセンブリ。AT&Tの構文で「subl」コマンドはどのように動作するのか
-
[解決済み] ミップスアセンブリの文字列の長さ
-
[解決済み] なぜ、addiではなくaddiuを使うのか?
-
[解決済み] MIPSでディブディブ
-
[解決済み] アセンブリで数字をASCIIに変換する
-
[解決済み] x86-64におけるmovqとmovabsqの違いについて
-
[解決済み] ビットシフト演算子を使って10進数を2進数で表示するMIPS
-
[解決済み] SRLとSRAの違いは何ですか?[重複しています]。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MIPSで整数の絶対値?
-
[解決済み] MIPSの大、小、大
-
[解決済み] アセンブリで値をnullに設定する
-
[解決済み] アセンブリ - CMP後のJG/JNLE/JL/JNGE
-
[解決済み] Binary Bomb Phase_6 Node Order?
-
[解決済み] なぜSet on Less ThanはALU演算なのか?
-
[解決済み] アセンブリ命令のトラップは何をするのですか?
-
[解決済み] ARMはSDIVとUDIVを区別していますが、ADD、SUB、MULでは区別していないのはなぜですか?
-
[解決済み] BL命令ARM - その仕組み
-
[解決済み] cmovlオペコードの中で何と何が比較されるのですか?