33

パブリック.NET APIに基づいた別のプログラムのプラグインを作成しています。通常、これらのプラグインは、APIアセンブリを参照するクラスライブラリDLLを作成することによって作成されます。次に、APIアセンブリの基本コマンドクラスから継承してコマンドクラスを作成します。アプリケーションは、プラグインDLLファイルを参照するように設定され、ユーザーが要求したときに実際にカスタムコマンドクラスを起動する役割も担います。System.BadImageFormatException不正な形式のプログラムを読み込もうとしました。

しかし、私はSystem.CodeDOMでいくつかのコード生成を自動化しようとしており、APIアセンブリ内の型に基づいて新しいクラス型を自動的に生成する単純なコンソールアプリケーションを作成したいと考えています。

ただし、アプリケーションを実行しようとすると次の例外が発生します。

System.BadImageFormatExceptionは 未処理のメッセージだった。 'RevitAPI、 バージョン= 2011.0.0.0、文化=中立、 なPublicKeyToken = nullを' またはその依存関係の1つ ファイル またはアセンブリをロードできませんでした。 不正なプログラムを読み込もうとしました。 形式です。

通常、プラグインアセンブリのターゲットフレームワークを3.5に設定する必要があります。しかし、私は私のコンソールアプリケーションのターゲットフレームワークを2.0に設定すると、上記のエラーがなくなることがわかりました。しかし、私のコンソールアプリケーションはすでにターゲットフレームワークが3.5に設定されている私の他のクラスライブラリを参照しています。そして、私は実際には2.0フレームワークの周りにそれらを書き直すつもりはないです。

+1

解決され、私のbinフォルダに追加したものを同じ問題を抱えています、サイモンの答えが受け入れられた時が来たのですか、それとも正しいものではありませんか? –

答えて

45

おそらく32-64ビットのミスマッチです。

64ビットOSで実行している場合、アセンブリRevitAPIは32ビットとして、プロセスは64ビットまたは "任意のCPU"としてコンパイルできます。

RevitAPIは64ビットとしてコンパイルされ、プロセスは32ビットまたは "Any CPU"としてコンパイルされ、32ビットOSで実行されます。

+0

私はWindows XP x64を使用していますが、他のすべてのプロジェクトのプラットフォームは「任意のCPU」に設定されていますが、コンソールアプリケーションのプラットフォームは「x86」に設定されています。これを「Any CPU」に変更しました。例外が発生しました。-FileNotFoundExceptionが処理されませんでした:指定されたモジュールが見つかりませんでした。 (HRESULTからの例外:0x8007007E)。しかし、私はファイルやモジュールが見つからないものについては詳細を見ません。 –

+0

RevitAPIのコンパイル方法を確認しましたか? –

+1

申し訳ありませんが、私はこれを初めて知っています。どこでチェックしますか? –

36

あなたのサイトが使用するものを選択して、アプリケーションプール にIIS、 Go]を使用して、アドバンス設定 は、32ビットアプリケーションを有効にしますが、私はとの問題を抱えていた真の

11

に設定されていることを確認してください]をクリックした場合x64のプロジェクトでVSの新しいインストール - Visual Studioの2013およびVisual Studio 2015のために:別のマシン上で実行している私のソフトウェアを取得するとき

Tools 
    -> Options 
    -> Projects and Solutions 
    -> Web Projects 
    -> Check "Use the 64 bit version of IIS Express for web sites and projects" 
+1

+ 1.workedがこのエラーを修正しました。私は構成をx64に設定しようとしましたが、新しいバージョンのアセンブリにリンクしても無駄になりました。これは最終的に働いた解決策です – raghav710

0

私は同じ問題がありました。私の開発者のPC(Windows 7)にはVisual Studio 2015がインストールされていましたが、ターゲットPCはWindows 10(.Netがインストールされている)のクリーンインストールでした。私はまた、.Net Frameworkを含む別のきれいなWindows 7のPCでそれをテストしました。しかし、両方のターゲットPCで、私はVisual C++ Redistributable for Visual Studio 2015パッケージをx86またはx64用にインストールする必要がありました(あなたのアプリケーションが何を構築するかによって異なります)。それは私の開発者PCに既にインストールされていました。

私のアプリケーションは、Visual Studioで/ clrと/ TPオプションを使用してC++アプリケーションにコンパイルされたCライブラリを使用していました。また、アプリケーションはdllexportメソッドのシグネチャを使用してC#に関数を提供していました。 C#の統合が私にそのエラーをもたらすかどうか、あるいはC++アプリケーションが私に同じものを与えてくれたかどうかは分かりません。

誰にでも役立つことを願っています。

0

これらの提案は正確ですが、私はメモを追加したいと思います。私は複数の出版構成を持っていたので、単純に立ち往生しました。私は "Debug - Any CPU"を編集し、 "Debug - x64"設定を展開していました。同じ設定を編集して展開していることを確認してください。公開を開始して[公開する]ダイアログがポップアップした後で[設定]タブをクリックして確認します。編集した設定と一致していることを確認してください。 (それは私が戻って取得することはありません私の人生の4時間です!)

-1

私はちょうど32ビットのDLLをダウンロードし、私が思うこれは私の問題

関連する問題