- リフレクションを使用してクラスライブラリ(lib.dll)のメソッドを呼び出すアプリケーション(executor.exe)があります。
- executor.exeには、組み込みリソースとしてNewtonsoft.Jsonバージョン8.0が組み込まれています。
- lib.dllには、Newtonsoft.Jsonバージョン9.0が参照されています。
- lib.dllはsystem.net.http.formattingバージョン4.0.0.21112を参照しています。これはNewtonsoft.Json 4.5を指します。
- 私はexecutor.exe.configを変更する機会がありません(テストを除く)。
私が取得するために何をしたいですか:「メソッドが見つかりません」例外。なぜAppDomain.CurrentDomain.AssemblyResolveが機能しないのですか?
lib.dllから呼び出されnew JsonMediaTypeFormatter().SerializerSettings;
。見つからない
方法: 'Newtonsoft.Json.JsonSerializerSettings System.Net.Http.Formatting.JsonMediaTypeFormatter.get_SerializerSettings()'
私がやろうとしたもの:
しかし、それはで失敗します- AppDomain.CurrentDomain.AssemblyResolve(ModuleInitializerを使用して正しく購読)を処理します。しかし、それは上昇しません。クラッシュ後、2つのNewtonsoft.Json(異なるバージョンを持つ)がAppDomainに読み込まれました。アプリの設定でバインディング
:
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="4.0.0.0-5.0.0.0" newVersion="9.0.0.0" />
はい、それは動作します。しかし、私はこのソリューションを使用することはできません。合格後、2つのNewtonsoft.Json(バージョンが異なる)がAppDomainにロードされます。
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="8.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
例外「方法:
私はこの作品理由を理解していない(oldVersion = "8.0.0.0-9.0.0.0")が、
-
見つからない "とはスローしません。合格後、1 Newtonsoft.Json(9.0)がAppDomainにロードされます。しかし、私には適していません。
なぜAppDomain.CurrentDomain.AssemblyResolveが機能しないのですか?私は2つの読み込まれたアセンブリに問題があると思いますが、この動作を変更することはできません。
あなたは、バージョン8が埋め込みリソースとして格納されていると述べました。どうして?どのように使用されていますか? – Evk