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 を取り除くにはどうすればよいでしょうか?IntPtr
unsafe
編集: 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 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。