2013-06-04 14 views
41

Mi chiedevo perché NuGet aggiunto il seguente codice per le mie applicazioni app.config di file, dopo l'installazione del Microsoft.Bcl.Async:Perché un "bindingRedirect" è stato aggiunto al file app.config dopo aver aggiunto il pacchetto 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> 

Se rimuovo questo XML-elemento dalla configurazione, l'applicazione non funzionerà correttamente.

Per quanto ho capito, possiamo usare bindingRedirect per far sì che l'app carichi una versione più recente o più vecchia di un assembly nel caso in cui la versione che stavamo usando durante la compilazione dell'EXE sia scomparsa.
Tuttavia sto usando esattamente la versione 2.5.19.0, perché dovrei avere bisogno di un reindirizzamento, allora?

the version of my dll

Perché ho bisogno di questa bindingRedirect?

risposta

36

I complessi Microsoft.Threading.Tasks e Microsoft.Threading.Tasks.Extensions referenziano v1.5.11.0 di System.Runtime e System.Threading.Tasks.

Senza la bindingRedirect, il Microsoft.* assemblee avrebbero cercato di caricare una versione dei System.* assemblati, che fallirebbe.

+1

Ho una situazione simile, in cui l'assembly reindirizzato non viene utilizzato altrove, ma il bindingeredirect è ancora necessario? - oppure posso affermare che se la vecchia versione dell'assembly non è referenziata da nessuna parte allora il bindingredirect non è affatto necessario. – zinking

4

Siete semplicemente dicendo ogni volta che c'è versione precedente che è compreso tra 0.0.0.0 a 2.5.19.0, si prega di sostituire questa versione con la nuova versione che è 2.5.19.0

Diciamo che si non hanno la versione precedente disponibili nel progetto e si sta tentando di accedervi, allora si finirà con un errore del tipo "System.IO.FileLoadException: 'Impossibile caricare il file o l'assembly"

Così, quando il vostro progetto sta cercando una versione più vecchia di quella DLL che semplicemente sostituirà quella wi il nuovo che è disponibile

Problemi correlati