2016-02-16 3 views
1

Je développe une bibliothèque C# avec .NET Framework 4.0.Microsoft.Threading.Tasks faisant référence à une version incorrecte de System.Threading.Tasks.dll

Sur cette bibliothèque, j'ai ces paquets installés NuGet:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Microsoft.Bcl" version="1.1.10" targetFramework="net40" /> 
    <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net40" /> 
    <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net40" /> 
    <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net40" /> 
    <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net40" /> 
</packages> 

Ceci est mon contenu App.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.2.29.0" newVersion="2.2.29.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.6.10.0" newVersion="2.6.10.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.6.10.0" newVersion="2.6.10.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Sur ce projet, je fais référence System.Threading.Tasks version 2.6.10.0. J'ai créé un installateur et installé ce projet sur un autre ordinateur. J'ai ajouté System.Threading.Tasks version 2.6.10.0 sur le programme d'installation (qui installent cette DLL sur GAC). Mais quand je lance l'exécutable je reçois cette erreur:

Could not load file or assembly 'System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 
    at MyProject.Common.WebApi.Client.AsyncHelpers.<>c__DisplayClass7 1.<RunSync>b__6(Object _) 
    at MyProject.Common.WebApi.Client.AsyncHelpers.ExclusiveSynchronizationContext.BeginMessageLoop() 
    at MyProject.Common.WebApi.Client.AsyncHelpers.RunSync[T](Func 1 task) 
    at MyProjectCodesManagerWindowsService.WebApi.Client.MyProjectCodesManagerClient.PrepareAndStartv2(String orderNumber, String userName, String systemName) 

Mais sur tous les projets auxquels je fais référence System.Threading.Tasks version 2.6.10.0. Pourquoi je reçois cette exception?

Pourquoi? Aucun conseil?

J'ai vérifié tous les problèmes de cette page https://blogs.msdn.microsoft.com/bclteam/p/asynctargetingpackkb/ mais avec le même résultat.

Après cette page, http://pauliom.com/2012/01/30/how-to-log-net-binding-errors-when-you-dont-have-fuslogvw-exe/, je me suis ce journal:

Calling assembly : Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a. 
=== 
LOG: Start binding of native image System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a. 
WRN: No matching native image found. 

Le problème est avec Microsoft.Threading.Tasks, Version=1.0.12.0 il est une dépendance avec System.Threading.Tasks version = 1.5.11.0. J'ai trouvé que dll sur le dossier D:\packages\Microsoft.Bcl.1.1.10\lib\sl4\. Utilisation du programme. NET Reflector J'ai vu que Microsoft.Threading.Tasks, Version=1.0.12.0 a une dépendance avec System.Threading.Tasks version=1.5.11.0. Pourquoi utilise-t-il cette version dll lorsque j'ai modifié tous les fichiers App.config pour utiliser la version 2.6.10.0?

+1

Vous savez déjà ce que Fuslogvw.exe fait, pourquoi n'êtes-vous pas l'utiliser ?? –

+0

Je cours dans une machine sans Visual Studio et le problème est sur un projet avec un contrôle d'utilisateur Windows Form. En passant, je ne sais pas comment utiliser Fuslogvw.exe. Et sur ma machine de développement, je n'ai pas ces problèmes. – VansFannel

+2

La seule erreur que vous pourriez faire est de ne pas l'essayer. –

Répondre

1

J'ai trouvé la solution.

Je dois ajouter ceci:

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

dans App.Config du programme qu'il va utiliser ma bibliothèque.

Le problème était que je devais ajouter dependentAssembly de ma bibliothèque dans le fichier app.config du programme pour qu'il utilise cette bibliothèque.

J'ai trouvé la solution ici: https://social.msdn.microsoft.com/Forums/en-US/f0653a7f-4196-4b5e-8d96-61d75fb8274e/gac-dll-and-appconfig?forum=clr

+0

J'aime quand quelqu'un downvotes et ne dites pas pourquoi. – VansFannel