2013-06-04 27 views
41

nugetは私のアプリケーションMicrosoft.Bcl.Asyncをインストールした後app.configファイルに次のコードを追加した理由私は思っていた:Microsoft.Bcl.Asyncパッケージを追加した後にapp.configファイルに「bindingRedirect」が追加されるのはなぜですか?

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
      <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
      <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

私は設定から​​、このXML要素を削除すると、アプリが正常に動作しません。

私が理解している限り、bindingRedirectを使用すると、EXEのコンパイル時に使用していたバージョンがなくなった場合に、新しいバージョンまたは古いバージョンのアセンブリを読み込むことができます。
しかし、私は正確にバージョン2.5.19.0を使用していますが、なぜリダイレクトが必要なのでしょうか?

the version of my dll

は、なぜ私はこのbindingRedirectが必要なのです

答えて

36

アセンブリMicrosoft.Threading.TasksMicrosoft.Threading.Tasks.ExtensionsはまだSystem.RuntimeSystem.Threading.Tasksのv1.5.11.0を参照しています。

bindingRedirectがないと、Microsoft.*アセンブリは、古いバージョンのSystem.*アセンブリを読み込もうとしますが、失敗する可能性があります。

+1

私はリダイレクトされたアセンブリが他の場所では使用されていないのに同様の状況がありますが、bindingredirectはまだ必要ですか? - または、アセンブリの古いバージョンが参照されていない場合は、bindingredirectがまったく必要ないと主張することはできますか? – zinking

4

あなたは単にさんがあなたを言ってみましょう2.5.19.0に0.0.0.0 間にある古いバージョンがあるたびに、2.5.19.0

ある新しいバージョンでそのバージョンを交換してくださいと言っていますあなたのプロジェクトで使用可能な古いバージョンを持っておらず、そのファイルにアクセスしようとすると、 "System.IO.FileLoadException: 'ファイルやアセンブリを読み込めませんでした"というエラーが表示されます。

プロジェクトはそのDLLの古いバージョンを探しています新しいものが利用可能です

関連する問題