Système.Net.Le paquet Http NuGet 4.3.0 la référence génère le système.IO.FileLoadException sur le système.Diagnostic.Source de diagnostic ver 4.0.0.0 référence

Description du problème:

une bibliothèque partagée".dll" système de références du projet.Net.Paquet Http NuGet 4.3.0. L'application qui fait référence à "partagé.dll" échoue avec

Système.IO.FileLoadException

ne pouvait pas charger le système de fichiers ou d'assemblage.Diagnostic.DiagnosticSource, Version=4.0.0.0, Culture=neutre, PublicKeyToken = cc7b13ffcd2ddd51' ou l'une de ses dépendances. L'assemblée manifeste définition ne correspond pas à l'assemblée de référence. (Exception de HRESULT: 0x80131040)

système at.Net.Http.WinHttpHandler.SendAsync ( ... )

après avoir étudié cette question, nous sommes arrivés à la cause suivante de l'échec ci-dessus:

  • la page d'information sur le paquet pour système.Net.Http v 4.3.0 États dépendant de Système.Diagnostic.DiagnosticSource v 4.3.0 ou au-dessus. Ce paquet est automatiquement téléchargé lorsque Système.Net.Http v 4.3.0 est référencé à partir du projet.
  • NuGet paquet de système.Net.En fait, Http v 4.3.0 inclut System.Net.Http.dll v 4.1.1.0 (en date du 8 janvier 2017).
  • NuGet paquet de système.Diagnostic.Diagnostiksource v 4.3.0 en fait comprend le système.Diagnostic.Diagnostiksource v 4.0.1.0 (en date du 8 janvier 2017).
  • système.Net.Http ver 4.1.1.0 système de références.Diagnostic.Diagnostiquessource C. 4.0.0.0 enter image description here
  • Système.Diagnostic.Diagnostiksource v. 4.0.0.0 n'est pas une correspondance exacte à la dll téléchargée v 4.0.1.0.
  • lorsque la version d'une référence de bibliothèque fortement nommée n'est pas en correspondance exacte, le temps D'exécution .NET essaie toujours de trouver l'assemblage référencé. Si elle ne peut pas: l'exception de la bibliothèque load est générée. Voir aussi le suivant commentaire

il y a un couple solutions de contournement:

  1. app.option de configuration: déclarer les versions compatibles (jusqu'où devrions-nous aller avec cela?) avec liaison de redirection dans l'app.config "partagé.dll " - application de référencement.
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
  </dependentAssembly>
</assemblyBinding>
  1. Système De Force.Diagnostic.DiagnosticSource.dll à la version 4.0.0.0: Ajouter une référence NuGet au système.Diagnostic.Source de diagnostic v. 4.0.0.0 au système de référencement des projets.Net. préempt téléchargement automatique de dll version 4.0.1.0. Cette option supprime la possibilité de mettre à jour automatiquement la dépendance NuGet, mais rend le déploiement de la configuration des applications moins important.

Il y a un sentiment lancinant cependant que la solution appropriée réside dans la correction des incohérences des paquets NuGet mentionnées ci-dessus par les propriétaires du paquet. Lorsqu'il est fixé à la source, aucune solution de contournement pour le système.Net.Le code de consommation du paquet Http serait requis.

Questions:

  1. Pourquoi Système.Net.Le paquet Http v 4.3.0 contient un décalage System.Net.Http.dll v 4.1.1 alors qu'il existe une version antérieure exacte du paquet 4.1.1?
  2. devrions-nous procéder à l'une ou l'autre des deux solutions de rechange mentionnées ci-dessus?
  3. Lequel est le mieux?
  4. Ou: Est-il une autre solution au problème?
  5. ou: y a-t-il une mise à jour imminente des paquets NuGet qui corrige l'incohérence?

Merci.

13
demandé sur Serge Pavlov 2017-01-09 17:48:12

3 réponses

j'ai résolu ce problème en installant Système.Net. 2--> (version 4.3.1) from NuGet.

5
répondu Sasha Fentsyk 2017-04-10 08:50:41

je pense qu'il serait correct de répondre à ma propre question parce que 99% de la réponse est déjà là.

L'équipe de développement sur github/corefx reconnu ce problème résolution serait un effet secondaire d'un autre problème connu corrigé par la nature de la suppression de la dur de référence du Système.Diagnostic.DiagnosticSource.dll du système.Net.Projet Http.

jusque là: n'importe laquelle des deux solutions de rechange fournies est acceptable à utiliser basé sur préférences personnelles.

4
répondu Serge Pavlov 2017-01-11 15:01:02

Dans mon cas, le

FileLoadException: impossible de charger le fichier ou l'assemblage 'Système.Diagnostic.DiagnosticSource, Version=4.0.3.0, Culture=neutre, public KeyToken = cc7b13ffcd2ddd51". La situé assemblée manifeste définition ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)

commencé quand à Asp.Net le projet Core 2.0 a été ajouté Microsoft.AspNetCore.Paquet TestHost "2.1.0-preview2-final". Le correctif a été installez la version stable "2.0.2"

0
répondu Michael Freidgeim 2018-05-09 13:22:37