Newtonsoft.Conflit De L'Assemblée Json

J'utilise Netonsoft.Json dans mon projet. Cela fonctionne très bien jusqu'à ce que je commence à intégrer Paypal SDK dans mon projet. Mon code est comme ci-dessous.

         String AccessToken =
  new PayPal.OAuthTokenCredential("", "").GetAccessToken(); ---->>>> This Line Throwing An Error
            PayPal.Api.Payments.Address add = new PayPal.Api.Payments.Address();
            add.city = TextBoxCity.Text;
            add.line1 = TextBoxAddress.Text;
            add.phone = TextBoxPhoneNumber.Text;
            add.postal_code = TextBoxZipcode.Text;
            add.state = TextBoxState.Text;
            PayPal.Api.Payments.CreditCard cc = new PayPal.Api.Payments.CreditCard();
            cc.number = TextBoxCreditCardNumber.Text;
            cc.first_name = TextBoxFirstName.Text;
            cc.last_name = TextBoxLastName.Text;
            cc.expire_month = Convert.ToInt16(TextBoxExpiryMonth.Text);
            cc.expire_year = Convert.ToInt16(TextBoxExpiryYear.Text);
            cc.cvv2 = TextBoxCVVNumber.Text;
            cc.billing_address = add;
            cc.Create(AccessToken);

et j'obtiens l'erreur ci-dessous

       System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

je cherche sur internet et j'ai trouvé une solution pour changer le fichier de configuration. Donc je change mon fichier de configuration comme ci-dessous

        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
     <bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="4.5.0.0" />
  </dependentAssembly>
</assemblyBinding>

je joue aussi avec les propriétés d'assemblage comme copie locale, Version spécifique, mais rien ne m'aide à résoudre cela. Comment résoudre Assemblée le conflit?

29
demandé sur Luke 2013-07-21 23:35:30

5 réponses

je viens d'avoir le même problème et je l'ai résolu en mettant à jour le Newtonsoft.Json à la dernière version en utilisant

Update-Package Newtonsoft.Json

et ensuite aller sur le Web.config et d'ajouter:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
</dependentAssembly>
60
répondu Harold 2013-12-06 02:26:22

+1 à zbarrier pour sa solution. Voici les raisons pour lesquelles il a travaillé...

+1 pour zbarrier pour sa réponse qui m'a aidé à résoudre mon problème. Les questions de référence de l'Assemblée sont les pires...alors j'ai pensé que je mettrais en ligne les mesures que j'ai prises, ainsi que certaines choses que j'ai apprises, et j'espère que cela aidera:


  1. TENTATIVE RATÉE: coller les lignes suivantes dans mon web.config:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
            <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    

    ^^ ^ ^^ ^ N'ONT PAS


  1. SOLUTION: navigation ~/Bin/Newtonsoft.Json.dll, et a ouvert le fichier dans Visual Studio. Par défaut, l'interface du fichier affiche un dossier nommé d'après l'assemblée -- je double cliqué pour étendre, et finalement, vu ceci: assembly-file interface puis, j'ai double-cliqué sur le 1 [Neutral] icône qui m'a amené à l'information de l'assemblée, vu ici: assembly-file information

    Le qui dit Assembly Version est ce que vous aurez besoin d'entrer dans le newVersion l'attribut <bindingRedirect> balise. J'ai donc pris la section I collé (dans l'étape un) et de changer le "5.0.8" à "6.0.0.0". Mon nouveau <runtime> section ressemble à ceci:

      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
            <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="6.0.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    

    ^^ ^ ^ ^ ÇA A MARCHÉ!! Enfin...


autres notes au cas où quelqu'un serait encore confus:

  • <runtime> balise va dans le <configuration></configuration> étiquette dans le Web.config. Le la section que je montre ci-dessus a été collée directement sous l'étiquette d'ouverture de mon web.config <configuration> section.
  • xmlns l'attribut représente L'espace de noms XML correspondant. Il est utilisé par les développeurs de l'assemblée pour éviter les problèmes avec contradictoires des balises. Dans ce cas, vous devriez vous sentir en sécurité xmlns="schemas-microsoft-com:asm.v1" listés ci-dessus.
  • vous pouvez modifier le oldVersion attribut à transmettre supplémentaire les versions de l'assemblée. Par exemple, je vais probablement modifier le mien pour regarder de plus comme réponse de zbarrier.
  • publicKeyToken est un autre attribut qui reste à peu près même quand il s'agit de Newtonsoft.Json. Le publiceytoken est juste un version abrégée de la clé publique -- un peu comme un titre livre-et dans ce cas ne change pas vraiment. Si jamais vous voulez connaître la clé publique à l'assemblée, il suffit d'ouvrir le Developer Command Prompt qui se trouve dans le menu Démarrer, puis utilisez la commande prompt pour naviguer emplacement du fichier d'assemblage (dans ce cas ~\Bin\), et d'exécuter les SN-T assembly_file_name la commande. Donc, dans ce cas, la commande est SN-T Newtonsoft.Json.dll. Vous devriez obtenir une réponse comme ceci: sn command response comme vous pouvez le voir, le Newtonsoft public clé ( 30ad4fe6b2a6aeed) est situé juste à la fin.
32
répondu Lopsided 2017-05-23 12:34:30

j'ai rencontré le même problème pour assembler la version 6.0.1. J'ai collé les lignes suivantes dans le web.config comme dirigé par Harold:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
</dependentAssembly>

j'ai ensuite supprimé la référence de projet à Newtonsoft.Json et a supprimé la référence à Newtonsoft.Json dans les paquets.fichier de configuration.

j'ai ouvert le Gestionnaire Nuget et réinstallé Newtonsoft.Json.

l'installation a changé le web.paramètres de configuration à la suivante et tout a bien fonctionné:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
22
répondu zbarrier 2014-02-07 23:36:06

au début, je pensais que mon cas était la même vieille référence de l'Assemblée ... a fait la désinstallation, réinstaller, installer force, reconstruire, ajouter l'assemblage de redirection ...etc

rien n'a fonctionné jusqu'à ce que je découvre qu'un autre assemblage causait le problème.

dans mon cas, mon code était défaillant quand j'ai appelé le HttpClient.Méthode PostAsJsonAsync (requestURI, T). L'erreur à propos de la référence à L'Assemblée m'a mis à l'écart puisque ma Solution a plusieurs projets et dans lequel certaines des des projets ont utilisé une ancienne version... fini de gaspiller beaucoup de temps jusqu'à ce que...

ma solution:

  • supprimé le système existant.Net.Http.Formatage à partir de mes références
  • installé le programme D'installation Microsoft.AspNet.WebApi.Le Client qui installé le Http requis.Formater.

une fois installé, le PostAsJsonAsync() a fonctionné comme prévu!

J'espère que cela fera gagner du temps à quelqu'un que j'ai perdu à la recherche d'une solution!

2
répondu Gotcha 2015-09-29 16:22:34

j'ai fait face au même problème, J'ai installé Newtonsoft.Json v9.0.1, sandcastle arrête la compilation en affichant la même erreur mais avec une différence de version: "Ne pouvait pas charger le fichier ou l'Assemblée 'Newtonsoft.Json, Version=6.0.0.0,"

ce qui a fonctionné: trouver/créer un projet avec newtonsoft.json avec la version que SandCastle demande, ajouter le fichier "Newtonsoft.Json.dll" en référence au projet SC puis construire. (vous pouvez trouver la dll dans le dossier bin du projet)

0
répondu Apex ND 2016-07-19 11:13:28