5

ここで報告されているのと同じ問題が発生しています: ASP.NET MVC アプリケーションの「Bad binary signature」

ASP.Net MVC サイトはローカル コンピューターでは正常に動作しますが、aspnet_compiler、aspnet_merge、および msdeploy の組み合わせを使用して展開すると、ページの読み込みが次のエラーで失敗します。

System.BadImageFormatException バイナリ署名が正しくありません。(HRESULT からの例外: 0x80131192)

リンクされた質問で受け入れられた解決策は、間違ったバージョンの aspnet_merge を使用したことが問題の原因であることを示唆しており、デプロイから aspnet_merge ステップを削除すると問題が解決することを確認しました。

私の問題は、正しい aspnet_merge バージョンを使用しても問題が解決しないように見えることです。

Web アプリケーションは .Net 4.0 64 ビットを対象としています。使用される aspnet_merge パスは次のとおりです。「C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\aspnet_merge.exe」

[編集]

ローカル開発者は次のとおりです。

  • VS2010 SP1
  • カッシーニ
  • x64
  • VS11 Beta と .Net 4.5 がインストールされています

ビルド パスは次のとおりです。

  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\
  • C:\Program Files (x86)\IIS\Microsoft Web Deploy V2\
4

2 に答える 2

2

また、VS2010 (.NET 4.0) で ASP.NET Web サイト プロジェクトをプリコンパイルするために Web 配置プロジェクトを使用して同様の問題を経験しました。

VS2012(.NET 4.5をインストールします-関連していると思われます)をインストールするまで、すべてがうまくいきました。

System.BadImageFormatException: Bad binary signature. (Exception from HRESULT: 0x80131192)

いくつかのデバッグと分離されたテスト ケースの後、.NET 4.0 Web サイトと別の .NET 3.5 プロジェクトの間でラムダが渡されるまで問題を追跡しました。

3.5 プロジェクトで定義されたメソッドには、次のような署名がありました。

public IEnumberable<T> ExecuteAsEnumerable(Func<IDataReader, T> func)
{
  //..
}

これは、プロパティ ゲッターの 4.0 Web サイトで使用されていたため、aspnet_merge 経由でマージするとエラーが発生しました。

public IList<MyObject> MyListOfItems
{
  get
  { 
    return _myListOfItems ?? (_myListOfItems = new SomeQueryBuilder()
      //.build statement
      .ExecuteAsEnumerable(reader => new MyObject(reader))
      .ToArray());
  }
}

私のテスト ケースではExecuteAsEnumerable、4.0 の Web サイト内で別の名前付きの拡張メソッドとして再作成し、事前にコンパイルしたところ、機能しました。プロジェクトの「Target .NET Framework」をチェックして、それが 3.5 であることを認識した後 (以前は認識していませんでした)、すべてを 4.0 に切り替えたところ、すべてが再び機能しました。

.NET 4.5 アップデート (4.0 のインプレース アップグレード) で何かが明らかに変更されました。私の場合、問題のプロジェクトを再コンパイルすることができました - 誰もがその贅沢を持っているかどうかはわかりません (それは正しい言葉ですか?)。

それが役立つことを願っています。

于 2012-12-04T11:37:28.730 に答える
0

私もこの例外に遭遇しました。私が知る限り、それは aspnet_merge のバージョンの問題でも、ターゲット フレームワークの問題でもありませんでした。ただし、最近MVC 5に更新された古いプロジェクトにあります。

Razorビューに次のコードがありました:

var companies = users.Select(u => u.Company).DistinctBy(c => c.Id)
                             .OrderBy(c => c.Id == CurrentUser.Company.Id ? 0 : 1)
                             .ThenBy(c => c.Name);

Linq とDistinctByMoreLinq ライブラリを使用します。とにかくこれはビューにあってはならないので、コントローラーに移動すると例外が消えました。

于 2015-02-05T15:48:30.960 に答える