2015-06-16 15 views
12

ottengo questo errore:Errore: Impossibile caricare il file o il montaggio Microsoft.Practices.ServiceLocation', Version = 1.0.0.0

Could not load file or assembly 'Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Come risolvo questo con un'assemblea reindirizzare vincolante, se ho già un'altra versione esistente di Microsoft.Practices.ServiceLocation nel mio progetto?

+0

Questo ragazzo ha spiegato perfettamente, guarda [questa risposta] (http://stackoverflow.com/a/28789578/2014112) !! – KnowGe

risposta

8

Un metodo è di ricompilare tutti i pacchetti NuGet per utilizzare la stessa versione di Microsoft.Practices.ServiceLocation. A livello pragmatico, questo non è pratico: abbiamo bisogno di un metodo più semplice.

Un metodo migliore consiste nell'utilizzare un reindirizzamento dell'associazione. Funziona molto bene, se l'interfaccia è la stessa. Questa soluzione è provata e testata ed è in produzione in un numero di aziende .

Questo è ciò che l'app.config assomiglia:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Regolare la versione di destinazione per qualsiasi versione che già avete, che in genere è 1.2.0.0 o 1.3.0.0.

Il PublicKeyToken deve corrispondere al gruppo di destinazione. È possibile estrarre utilizzando il seguente comando:

sn.exe -T assembly.dll 

Esempio:

C:\test>"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\sn.exe" -T C:\svn\lib\TargetDll.dll 

Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.17929 
Copyright (c) Microsoft Corporation. All rights reserved. 

Public key token is ac3efa7c033c2bd5 
c:\test> 

Per altri modi di ottenere il PublicKeyToken, vedere Getting the PublicKeyToken of .Net assemblies.

PublicKeyToken non cambia con la versione di assieme, ad es. è lo stesso se l'assemblaggio è v1.0.0.0 o v2.0.0.0.

+0

@Will, grazie per la modifica. Di solito metto la clausola di esclusione di responsabilità all'inizio "Questa è una domanda di stile Q & A", perché ho avuto persone che mi hanno votato perché non capiscono cosa sta succedendo. – Contango

+1

Sì, ho pensato tanto. Sentiti libero di farlo nei commenti, btw! E considera che le domande a volte auto-rispondenti meritano ancora delle downvotes perché le persone li considerano domande povere ... – Will

Problemi correlati