11

直し方?

NewtonSoftJson.dll を使用する 2 つのサードパーティ アセンブリがあります。問題は、そのうちの 1 つは古い 3.xx を使用し、もう 1 つは 4.5.x を使用していることです。そのため、実行時に 2 つのアセンブリのうち少なくとも 1 つが他のアセンブリについて不平を言います。

どうすればこれを解決できますか? サービスをセットアップできましたが、コードと環境は現在そのようにセットアップされていません。また、一定の時間内に安全に実行できるリファクタリングが多すぎます。

4

4 に答える 4

4

私はたまたま、Newtonsoft と別のサードパーティのライブラリで正確な問題を抱えていました。Newtonsoft v3.x および v4.x の問題は、新しいライブラリに公開鍵トークンが付属していることです。これにより、アセンブリ リダイレクト ソリューションが役に立たなくなりました。しかし、それは他のほとんどの場合に完全に有効な解決策です。

サードパーティのライブラリを自分で再実装することになりました。サードパーティ ライブラリのソース コードにアクセスできる場合は、新しい Newtonsoft DLL を使用していつでもライブラリを再構築できます。メソッド シグネチャのいずれかが変更された場合は、小さな変更が必要になる場合があります。

于 2013-02-06T22:21:45.370 に答える
3

Microsoft の記事「Redirecting Assembly Versions」には、次のように書かれています。

次の例は、myAssembly のあるバージョンを別のバージョンにリダイレクトし、mySecondAssembly の発行元ポリシーをオフにする方法を示しています。

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="myAssembly"
          publicKeyToken="32ab4ba45e0a69a1"
          culture="en-us" />
        <!-- Assembly versions can be redirected in application, 
          publisher policy, or machine configuration files. -->
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
      <assemblyIdentity name="mySecondAssembly"
        publicKeyToken="32ab4ba45e0a69a1"
        culture="en-us" />
        <!-- Publisher policy can be set only in the application 
          configuration file. -->
        <publisherPolicy apply="no" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
于 2013-02-06T22:16:35.580 に答える
2

通常、これはアプリ/Web 構成の構成によって解決します。probing 要素を使用してプライベート パスを指定し、2 つのバージョンを別々のフォルダーに配置できます。

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

もう 1 つの方法は、アセンブリ バインディングのリダイレクトを使用することです。ただし、バージョンに互換性があることがわかっている場合にのみ機能します。あなたはそれらを直接使用していないので、あなたがそれを知っているかどうかはわかりません.また、発行元は、アセンブリのバージョンを変更することにより、いくつかの非互換性を示しています.

于 2013-02-06T22:17:56.743 に答える
1

逆コンパイラを使用して終了し、プロジェクトをソリューションに追加し、新しいdllを参照し、バグを修正し、再コンパイルして、最近追加されたプロジェクトをポイントします。

公開キー トークンが変更されたため、アセンブリ リダイレクトを使用できませんでした。参照されているアセンブリの 1 つをコンパイルするために別のキーが使用されたようです。より抜本的な対策に頼らなければなりませんでした。

于 2013-02-06T23:44:50.473 に答える