0

私たちが持っているとしましょう:

  • アセンブリ A は、アセンブリ NH バージョン 2.0.0.0 を参照します。
  • アセンブリ B は、アセンブリ NH バージョン 2.0.0.0 を参照します。
  • アセンブリ C はアセンブリ NH バージョン 1.0.0.0 を参照します (誤って)
  • 私たちのテスト Web プロジェクトは、アセンブリ A、B、C、および NH 2.0.0.0 を参照しています。

Nuget には、これらのアセンブリの競合を自動的に検出し、バインディング リダイレクト命令を作成する優れた機能があります。Nuget コマンドAdd-BindingRedirectは、そのような文字列を追加して、プロジェクトの web.config ファイルをテストします。

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="NH" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

ここで、NH を参照するさらに多くのライブラリがあるとします。問題は、奇妙なバージョンを識別するための最良の (手動ではない方が望ましい) 方法は何ですか?

4

1 に答える 1

1

バインディング エラーを調査するには、 Fusion Log Viewerを利用できます。

すべてのバインドをログに記録するように構成できます。これにより、基本的に、どのアセンブリがどこからロードされるかについての洞察が得られます。

典型的な出力は次のようになります。

=== Pre-bind state information ===
LOG: DisplayName = graphicfailtest.resources, Version=0.0.0.0, Culture=en-US, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = C:\bla\graphic\cs\
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : graphicfailtest, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.
===

LOG: Processing DEVPATH.
LOG: DEVPATH is not set. Falling through to regular bind.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Post-policy reference: graphicfailtest.resources, Version=0.0.0.0, Culture=en-US, PublicKeyToken=null
LOG: Attempting download of new URL file:///C:..../graphicfailtest.resources.DLL.
LOG: All probing URLs attempted and failed.
于 2013-10-24T16:23:30.433 に答える