33

プロジェクトで Netonsoft.Json を使用しています。プロジェクトに Paypal SDK の統合を開始するまでは、問題なく動作します。私のコードは以下の通りです。

         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);

そして、私は以下のようなエラーが発生します

       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)

インターネットで検索したところ、設定ファイルを変更する解決策が見つかりました。SO私は以下のように私の設定ファイルを変更します

        <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>

また、Copy Local、Specific Version などのアセンブリ プロパティをいじっていますが、これを解決するのに役立つものは何もありません。アセンブリの競合を解決するにはどうすればよいですか?

4

5 に答える 5

62

私はちょうど同じ問題を抱えていたので、Newtonsoft.Jsonを最新バージョンに更新することで解決しました

Update-Package Newtonsoft.Json

次に、Web.config に移動して以下を追加します。

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
</dependentAssembly>
于 2013-12-06T02:16:32.077 に答える
35

彼の解決策のためにzbarrierに+1。これが機能した理由です...

私の問題を解決するのに役立った彼の答えのためにzbarrierに+1してください。アセンブリ参照の問題は最悪です...だから、私が取った手順と私が学んだいくつかのことを投稿すると思いました。


  1. 失敗した試行:次の行を my に貼り付けました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>
    

    ^^^^^うまくいきませんでした


  1. 解決策:に移動し~/Bin/Newtonsoft.Json.dll、Visual Studio でファイルを開きました。デフォルトでは、ファイルのインターフェイスには、アセンブリにちなんで名付けられたフォルダーが表示されます。ダブルクリックして展開すると、最終的にこれがアセンブリ ファイル インターフェイス次に、1 [Neutral]アイコンをダブルクリックすると、アセンブリの情報が表示されます。アセンブリ ファイル情報

    この行は、タグの属性Assembly Versionに入力する必要があるものです。そこで、(ステップ 1 で) 貼り付けたセクションを取り出し、「5.0.8」を「6.0.0.0」に変更しました。私の新しいセクションは次のようになります。newVersion<bindingRedirect><runtime>

      <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>
    

    ^^^^^それは働いた!! ついに...


誰かがまだ混乱している場合のその他の注意事項:

  • タグは、web.config のタグ内<runtime>に入ります。<configuration></configuration>上記のセクションは、web.config の<configuration>セクションの開始タグのすぐ下に貼り付けられました。
  • このxmlns属性は、対応する XML 名前空間を表します。これは、競合するタグの問題を回避するために、アセンブリの開発者によって使用されます。xmlns="schemas-microsoft-com:asm.v1"この場合、上記のリストを安全に使用できるはずです 。
  • 属性を変更してoldVersion、アセンブリの追加バージョンを転送できます。たとえば、おそらくzbarrier の answer のように見えるように編集します。
  • これpublicKeyTokenは、Newtonsoft.Json に関してはほぼ同じままであるもう 1 つの属性です。publicKeyToken は、公開鍵を短縮したものにすぎません (書籍のタイトルのようなものです)。この場合、実際には変更されません。アセンブリの公開鍵を知りたい場合Developer Command Promptは、スタート メニューにある を開き、コマンド プロンプトを使用してアセンブリ ファイルの場所 (この場合は ) に移動し、 sn -~\Bin\を実行します。 T assembly_file_nameコマンド。したがって、この場合、コマンドはsn -T Newtonsoft.Json.dll でした。次のような応答が得られるはずです:sn コマンド応答ご覧のとおり、Newtonsoft 公開鍵 ( 30ad4fe6b2a6aeed ) は末尾にあります。
于 2015-02-19T17:04:39.067 に答える
0

私は同じ問題に直面しました.Newtonsoft.Json v9.0.1をインストールしました.sandcastleは同じエラーを表示するビルドを停止しますが、バージョンの違いがあります:「ファイルまたはアセンブリ 'Newtonsoft.Json, Version=6.0.0.0をロードできませんでした.

何がうまくいったか:SandCastleが求めているバージョンのnewtonsoft.jsonでプロジェクトを見つけて作成し、ファイル「Newtonsoft.Json.dll」をSCプロジェクトへの参照として追加してからビルドします。(dll はプロジェクトの bin フォルダーにあります)

于 2016-07-19T11:13:28.693 に答える