6

私はこれまで経験したことのない興味深い問題に遭遇しました。Visual Studio2008SP1には大規模な実稼働ASP.NET3.5SP1 Webアプリプロジェクトがあり、Webサイト展開プロジェクトを使用してコンパイルおよび展開されます。昨日のチェックイン後、アプリがで重大な失敗を開始するまで、昨年はすべてが正常に機能していましたBadImageFormatException

問題のチェックインは特に特別なことは何も変更せず、エラーはアプリの変更されていない領域から発生しています。Reflectorを使用して、問題のあるメソッドを調べ、コードにガベージ文字列が含まれていることを確認しました(.NET Reflectorは漢字としてユーモラスに解釈しました)。これは複数のマシンで一貫して再現されているため、ハードウェアに関連しているようには見えません。

さらに詳しく調べたところ、展開中にaspnet_merge.exeへの入力として使用されたアセンブリにこれらのガベージ文字列が存在しなかったことがわかりました。

aspnet_merge.exe / Web配置プロジェクトの出力アセンブリのプロパティ:

  • すべての出力を単一のアセンブリにマージします
  • 個々のフォルダの出力をそれぞれのアセンブリにマージします
  • すべてのページと制御出力を単一のアセンブリにマージします
  • ページごとに個別のアセンブリを作成し、出力を制御します

Web配置プロジェクトのプロパティで、マージオプションを最初のオプション(「すべての出力を単一のアセンブリにマージする」)に設定すると、問題が発生しますが、他のすべてのオプションは完全に機能します。

私の質問:なぜこれが起こっているのか誰かが知っていますか?aspnet_merge.exeの機能にサイズ制限はありますか(結果としてマージされるDLLは約19.3 MBです)?WAPの出力のマージに関する他の既知の問題はありますか?

アセンブリ形式/aspnet_merge.exeの達人が、このような制限について知っていれば、私はそれが大好きです。25MBのアセンブリのように私には思えますが、大きなものですが、とんでもないことではありません。

4

2 に答える 2

2

その上でPEVerifyを実行してみて、何が得られるかを確認してください。

エンコーディングの問題のように思えますが、なぜそうなるのかはわかりません。技術的には、アセンブリ内のメタデータ テーブルに収まるメタデータの量には制限がありますが、それが問題なのかどうかは疑問です。

Ildasmでexe を開くと、メタデータ テーブルのサイズを確認できます。統計 (View->Statistics) またはメタデータ テーブルの数を確認できます。これは 2 段階のプロセスです。 ->Raw:Count,Sizes 2. Ctrl+M を押します。

于 2010-03-27T00:36:24.490 に答える
0

x86 で x64 コードを実行しようとすると、BadImageFormatException がスローされませんか?

于 2010-03-27T00:39:10.943 に答える