2017-05-22 1 views
0

最新の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のすべてのバージョンが新しくインストールされたバージョンにリダイレクトされることに気づくはずです。私はそれをインストールした後、私の設定ファイルからこのリダイレクトを削除します。

答えて

0

私自身の質問に答える。後での.NET Framework 4.5.1を対象とし、その伝統的なデスクトップアプリケーションのための

自動 バインディングリダイレクトデフォルトで有効になってい :問題は、.NET 4.5.1以降でのみ、従来のデスクトップアプリケーションのための、Visual Studio ignores what you put in app.config and quietly adds its own bindingRedirect to the output config fileがあることですバージョン。 アプリケーションがコンパイルされ、それ以外の場合は が発生するかもしれないアセンブリの統一を無効にすると、バインディング リダイレクトが出力構成(app.config)ファイルに追加されます。ソースapp.configファイルは変更されません。

こんにちは、ありがとうございます。私の設定ファイルを静かに変更しようとするなら、ソースファイルを少なくとも変更して、それが起こっていることを伝えることができます。

自動バインディングリダイレクトを無効にすると、機能しました。

関連する問題