Nugetが私のアプリケーションに次のコードを追加した理由が不思議でしたapp.config
ファイル、インストール後Microsoft.Bcl.Async
:
<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要素を構成から削除すると、アプリは正常に動作しなくなります。
私が理解している限り、EXEのコンパイル時に使用していたバージョンがなくなった場合に、bindingRedirect
を使用して、新しいバージョンまたは古いバージョンのアセンブリをアプリにロードできます。
しかし、私は正確にバージョンを使用しています2.5.19.0
、なぜリダイレクトが必要なのですか?
なぜこれが必要なのかbindingRedirect
?
アセンブリMicrosoft.Threading.Tasks
およびMicrosoft.Threading.Tasks.Extensions
は、System.Runtime
およびSystem.Threading.Tasks
のv1.5.11.0を引き続き参照しています。
bindingRedirect
がないと、Microsoft.*
アセンブリはSystem.*
アセンブリの古いバージョンをロードしようとしますが、失敗します。
.0.0.0から2.5.19.の間にある古いバージョンがある場合は、単にそのバージョンを2.5.19.0の新しいバージョンに置き換えてください。
プロジェクトで使用可能な古いバージョンがなく、それにアクセスしようとすると、「System.IO.FileLoadException: 'Could not load file or Assembly」のようなエラーが発生します。
したがって、プロジェクトがその古いバージョンを探している場合、DLL