アセンブリ バインドの問題に関するいくつかの投稿を読み、提案された解決策の多くを試しましたが、すべてうまくいきませんでした。
私は比較的古い asp.net Web フォーム Web サイトを持っています。これは、NewtonSoft.Json に依存する .Net Framework 4.6 Analytics アセンブリに依存します。その Analytics アセンブリは私たち自身のものであり、NewtonSoft.Json v7.0.1 で構築されました。これは、Web サイトの bin フォルダーにあるアセンブリのバージョンです。
.Net Framework WebApi サービスに依存する新しい Web サイト、Angular SPA があります。サービスは、別のロギング サービスを呼び出すロギング ヘルパー コンポーネントに依存しています。ログ ヘルパー コンポーネントは Microsoft.AspNet.WebApi.Client に依存してサービス呼び出しを行います。これは、NewtonSoft.Json v6.0.4 に依存する System.Net.Http.Formatting に依存します。
Web サイトで新しいロギング ヘルパー コンポーネントを使用しようとすると、実行時にロギングが失敗し、NewtonSoft.Json の v6.0.0.0 またはその依存関係の 1 つを読み込めません。
v7.0 ファイルを Web サイトの bin フォルダーにドロップすると、Analytics アセンブリが NewtonSoft.Json の v7.0.0.0 またはその依存関係の 1 つを読み込めないため、Web サイトが失敗します。
理想的には、Microsoft.AspNet.WebApi.Client と System.Net.Http.Formatting を新しいバージョンの NewtonSoft.Json とうまく連携させたいと考えていますが、これらのアセンブリがどのように機能するかについてはあまり制御できません。Analytics コンポーネントを NewtonSoft.Json v6.0.4 で再構築しようとしましたが、ビルドしてデプロイすると、Web サーバーで何らかの形で v7.0.0.0 を探してしまいます。
岩と固いところの間に挟まっているような気がします。Analytics または Logging のいずれかを機能させることができますが、両方を機能させることはできません。a) ソリューションのためにどの方向を追求するかについての提案はありますか?Analytics コンポーネントが古いバージョンを受け入れるようにするか、Logging コンポーネントが新しいバージョンで動作するようにするか、b) これらのアプローチのいずれかを達成する方法はありますか?
更新 1 - 上記以外に試したことのいくつか: ロギング ヘルパー コンポーネントの .csproj プロジェクト ファイルで、NewtonSoft.Json 参照からバージョン情報を削除しようとしました。NewtonSoft.Json v7.0 ファイルを使用して Web サイトにデプロイしましたが、v6.0 を読み込めないと言って失敗しました。Assembly Binding Log Viewer fuslogvw.exe を使ってみました。正しく使用していなかったのかもしれませんが、アセンブリ バインディング エラーを再現でき、Assembly Binding Log Viewer には何も表示されませんでした。
更新 2 - ロギング ヘルパー コンポーネントにアセンブリ バインディング リダイレクトを追加して 6.0.0.0 から 7.0.0.0 にリダイレクトしようとしましたが、コンポーネントをビルドして Web サイトの bin フォルダーにドロップすると、NewtonSoft.Json 7.0 が追加されました。 v6.0.0.0 をロードできると言って、ロガーはまだ失敗します。ここから抜け出す方法はありませんか?
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NewtonSoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="6.0.0.0"
newVersion="7.0.0.0" />
</dependentAssembly>
</assemblyBinding>
更新 3 - 以下は、ログ ヘルパー コンポーネントの packages.config です。packages.config のすべては、Microsoft.AspNet.WebApi.Client パッケージの追加に基づいていると思います。NuGet のパッケージ情報によると、NewtonSoft.Json >= 6.0.4 で動作するはずですが、常に 6.0.0.0 の検索に失敗します。
<packages>
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.6" targetFramework="net461" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.5" targetFramework="net461" />
<package id="Microsoft.Net.Compilers" version="2.4.0" targetFramework="net461" developmentDependency="true" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net461" />
<package id="System.Net.Http" version="2.0.20126.16343" targetFramework="net461" />
</packages>