3

Visual Studio からサービスを実行しようとすると、常に BadImageFormatException をスローする Web サービスがあります。 別の質問に対するこの回答では、DLL に対して peverify を実行して、問題があるかどうかを確認することを提案しました。私の Web サービスの DLL は問題ありませんが、Web サービスは ILMerged アセンブリに依存しており、エラーがあります。

[IL]: エラー: [C:\blah\MyILMergedAssembly.dll: 暗号化

Utils.SecureStringExtensions::SecureEquals][オフセット 0x00000055][アンマネージド ポインターが見つかりました] [アンマネージド ポインターが予期されました] スタックに予期しない型がありました。

[IL]: エラー: [C:\blah\MyILMergedAssembly.dll: 暗号化

Utils.SecureStringExtensions::SecureEquals][オフセット 0x0000005D][アンマネージド ポインターが見つかりました][予期されたアンマネージド ポインター] スタックに予期しない型があります。

[IL]: エラー: [C:\blah\MyILMergedAssembly.dll: 暗号化

Utils.SecureStringExtensions::SecureEquals][offset 0x0000007E] アンマネージ ポインターは検証可能な型ではありません。

3 エラー .\MyILMergedAssembly.dll の検証中

(188警告)

これらは、 MyILMergedAssemblyのMarshalとでの使用に起因すると思いますが、それを行うすべての場所で、メソッドを として宣言しています。peverify が与えるエラーを取り除くにはどうすればよいですか? また、できれば Web サービスを実行しようとしたときに表示される BadImageFormatException を取り除くにはどうすればよいでしょうか?IntPtrunsafe

編集: ILMerge を使用して、安全でないコードを含むアセンブリをマージできないようです。そのため、Web サービスで MyILMergedAssembly の個々の DLL をすべて参照するようにしましたが、それでも BadImageFormatException が発生します。これで、個々のアセンブリの 1 つで例外が発生します。その個々のアセンブリで peverify を実行すると、次のようになります。

[IL]: エラー: [C:\blah\Connection.dll : 接続

.ConnectionBase::.ctor] [HRESULT 0x80070002] - 指定されたファイルが見つかりません。

それConnectionBaseが参照しているクラスは Connection.dll にあります。または、クラスが Connection 名前空間/プロジェクトで定義されているため、少なくともそうあるべきです。接続のビルド オプションで [安全でないコードを許可する] がオンになっています。ConnectionBase参照している可能性のあるコンストラクターは、としてマークされていinternalます。

編集:安全でないコードで DLL を使用する Web サービス プロジェクトで、「安全でないコードを許可する」をチェックしてみました。compilerOptions="/unsafe"また、system.codedom > compilers > compiler ノードの Web サービスの Web.config ファイルに追加してみました。ただし、Web サービスを実行すると、次のようなページが表示されます。

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

4

1 に答える 1

1

おお、これは面倒だ。それは安全でないコードではなく、VS のプロジェクトの 32/64 ビット ターゲット プラットフォーム設定でもなく、ILMerge でもありませんでした。IIS 7 のアプリケーション プールで [32 ビット アプリケーションを有効にする] 設定を [True] に設定する必要がありました (私は Windows 7 64 ビットを使用しています)。アプリ プールを再起動すると、Web サービスが正常に読み込まれます。正しい方向に私を送ってくれたこのブログに感謝します。

于 2011-05-10T19:08:04.587 に答える