最新のAutoMapperを使用したいアプリケーションがあります。また、AutoMapper 3.1.1.0を使用するサードパーティのアセンブリも使用しています。私は最新バージョンを使用するには、サードパーティのアセンブリを許可した場合並行して使用する際の問題AutoMapperのバージョン
、それはもはや存在しないメソッドを呼び出そうと、私はこれを取得:
System.TypeInitializationException: 'The type initializer for 'Sif.Framework.Service.Mapper.MapperFactory' threw an exception.'
Inner Exception
MissingMethodException: Method not found: 'AutoMapper.IMappingExpression`2<!!0,!!1> AutoMapper.Mapper.CreateMap()'.
を私はそのために3.1.1.0 DLLを置きますサブフォルダを作成し、このように参照しました。私はcodeBaseディレクティブが実際に動作していることを確認するために、それらを奇妙な場所に置いたディレクトリに置き、アセンブリが他の手段でロードされているというわけではありません。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
<codeBase version="3.1.1.0" href="C:\OldAutomapper\AutoMapper.dll" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="AutoMapper.Net4" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
<codeBase version="3.1.1.0" href="C:\OldAutomapper\AutoMapper.Net4.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
アプリケーションから6.x DLLへの参照を削除し、それを使用するコードをコメントアウトすると、これは機能します。サードパーティのDLLは参照を受け取り、正常に機能します。
6.x DLLをプロジェクトに追加すると、それでも機能します。ねえ、私たちはどこかに行っている!
しかし、AutoMapperを使用するコードのコメントを外すと、TypeInitializationExceptionが再びスローされます。私のコードでAutoMapperを参照するだけで十分ですが、実行時に実行する必要はありません。私はProfileクラス以外のすべてをコメントアウトして、実際にプロファイルをロードすることはできません。それでも、サードパーティのアセンブリを破壊します。
ここで何が起こっているのですか?
編集:AutoMapperのNuGetインストールでbindingRedirect
がapp.configに追加され、AutoMapperのすべてのバージョンが新しくインストールされたバージョンにリダイレクトされることに気づくはずです。私はそれをインストールした後、私の設定ファイルからこのリダイレクトを削除します。