0

プロジェクトをVS2008/.NET 3.5 /PostSharp1.5からVS2010/.NET4.0 /PostSharp2.0にアップグレードしました。

これで、システムの単体テストを実行すると、次の形式で数え切れないほどの例外が発生します。

System.BadImageFormatException:不正な形式のプログラムを読み込もうとしました。(HRESULTからの例外:0x8007000B)COMPANY.Data.NHibernate.BaseRepository.c__Binding`1.Invoke(Object&instance、Arguments arguments、ObjectアスペクトArgs)at PostSharp.Aspects.Internals.MethodInterceptionArgsImpl.Proceed()atCOMPANY.Aop.TransactionAspectAttribute。 OnInvoke(MethodInterceptionArgs context)in C:\ COMPANY \ Code \ COMPANY-NET4.0 \ Core \ Aop \ TransactionAspectAttribute.cs:line 68 at COMPANY.Data.NHibernate.BaseRepository.Save [T](T scoreBigModel)in C:\ COMPANY \ Code \ COMPANY-NET4.0 \ Core \ DataAccess \ NHibernate \ BaseRepository.cs:line 102 atCOMPANY.UnitTests.DataAccess.NHibernate.when_saving_a_canonical_term。<。ctor>b__5()in C:\ COMPANY \ Code \ COMPANY- NET4.0 \ UnitTests \ DataAccess \ NHibernate \ CanonicalTermRepositorySpecs.cs:

アセンブリでpeverify.exeを実行すると、次の形式で何百ものエラーが表示されます。常に一般的なメソッドの問題のようです:

[IL]:エラー:[C:\ COMPANY \ Code \ COMPANY-NET4.0 \ Core \ bin \ Debug \ COMPANY.Core.dll:COMPANY.Data.NHibernate.ActivationRepository + c__Binding :: Invoke] [offset 0x0000008D] [ found ref'PostSharp.Aspects.Internals.MethodBinding'] [expectedref'PostSharp.Aspects.Internals.MethodBinding`1[COMPANY.Models.Activation]']スタック上の予期しないタイプ。

[IL]:エラー:[C:\ COMPANY \ Code \ COMPANY-NET4.0 \ Core \ bin \ Debug \ COMPANY.Core.dll:COMPANY.Data.NHibernate.ActivationRepository + c__Binding :: Invoke] [offset 0x00000056] [ found ref'PostSharp.Aspects.Internals.MethodBinding`1 [COMPANY.Models.Activation]'] [expectedref'PostSharp.Aspects.Internals.MethodBinding']スタック上の予期しないタイプ。

PostSharp2.0RCの最新リリースを実行しています。

4

2 に答える 2

1

この問題はここで対処されています:http://www.sharpcrafters.com/forum/Topic4896-19-1.aspx

于 2010-07-02T18:03:50.997 に答える
0

「System.BadImageFormatException」は通常、64ビット/32ビットの問題を示します。

「AnyCPU」用にコードをコンパイルして64ビットプロセッサで実行すると、64ビットにJITコンパイルされます。次に、32ビットのコード(アンマネージdllなど)を呼び出すと、64ビットから32ビットのコードにジャンプしようとしたときにこの例外が発生します。

したがって、64ビットOSで実行している場合は、アップグレードで何かが原因で、プログラムに32ビットと64ビットのコードが混在している可能性があります。32ビットOSで実行している場合は、問題になることはありません。ただし、その場合は、バイナリが破損している可能性があります。

32/64の場合は、次の操作を実行できます。-使用するすべてのdllがアプリと同じビットであることを確認します。または-一部の32ビットdllを64ビットバージョンに置き換えることができない場合、アプリを「任意のCPU」ではなく「x86」としてコンパイルしてみてください。これにより、64ビットPCでも32ビットコードにコンパイルされます。つまり、WoW64で32ビットアプリとして実行する必要がありますが、32ビットdllと互換性があります。

于 2010-07-02T17:38:42.823 に答える