web-dev-qa-db-ja.com

System.Net.Httpの間に競合が見つかりました

VSソリューションにはいくつかのプロジェクトがあります。 「System.Net.Http」NuGetパッケージを追加すると、バージョン4.2.0.0として表示されます。次に、同じことを行い、同じNuGetパッケージを追加しますが、もう1つはバージョンです。 4.1.1.2

enter image description hereenter image description here

次に、警告が表示されます:

System.Net.Httpの間に競合が見つかりました

EDIT1:

Gathering dependency information took 1.7 sec
Attempting to resolve dependencies for package 'System.Net.Http.4.3.3' with DependencyBehavior 'Lowest'
Resolving dependency information took 0 ms
Resolving actions to install package 'System.Net.Http.4.3.3'
Resolved actions to install package 'System.Net.Http.4.3.3'
Retrieving package 'System.Net.Http 4.3.3' from 'nuget.org'.
Adding package 'System.Net.Http.4.3.3' to folder 'C:\...Service\packages'
Added package 'System.Net.Http.4.3.3' to folder 'C:\...Service\packages'
Added package 'System.Net.Http.4.3.3' to 'packages.config'
Successfully installed 'System.Net.Http 4.3.3' to ....Service
Executing nuget actions took 2.05 sec
Time Elapsed: 00:00:03.8937113

正しいバージョンがインストールされていることに注意してください。ただし、=>小道具=>バージョンは4.1.1.2と表示されます

enter image description here

21
ShaneKm

インストールしているバージョンを強制することができるので、両方のプロジェクトを揃えたり、出力ウィンドウでメッセージを見つけたりすることができます。 公式リンク には4.2リリースがリストされていないため、これを行います(ソリューション全体)

Install-Package System.Net.Http -Version 4.1.1

または両方のプロジェクト

Get-Project ProjectName | Install-Package System.Net.Http -Version 4.1.1

または、さらに良い(最新バージョンを使用)

Install-Package System.Net.Http -Version 4.3.3

[〜#〜] edit [〜#〜]

どうやらこれを経験したのは初めてではないようです 。答えはどうですか here ?基本的に、bothプロジェクト設定ファイルのこのセクションを調整できます:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

トークン値を調整する必要がある場合があります。念のため、両方のプロジェクトの設定ファイルを貼り付けてください=

6
Francesco B.

編集:これは、.NETFrameworkを使用している場合にのみ発生します。 .NET Core/Standardランドでは、最新のSystem.Net.Httpアセンブリバージョンは常に4.1.2.0のようです-4.2.0.0バージョンはありません。

System.Net.Httpに関する問題は、way、wayよりも複雑です。ここでの答えは、...

  1. はい、System.Net.Http NuGetパッケージがありますが、いいえ、同じアセンブリの最新バージョンをインストールしませんnot(バージョン4.1が含まれています) System.Net.Httpアセンブリの.1.2、4.2.0.0ではありません)。
  2. 最新のMicrosoft Visual Studio(またはMicrosoft Visual Studioビルドツール)はバージョン4.2.0.0を提供しますが、notは.csprojが常にそれを使用することを意味します。 。
  3. 何らかの理由で(まだ理解できませんでした)、4.2.0.0を使用する唯一の保証された方法は、System.Buffers(バージョン4.5.0が機能した)など、それを使用する特定のNuGetパッケージを参照することです。

TL; DR:

System.Buffers 4.2.0.0アセンブリを使用していることを確認する場合は、System.Net.Http 4.5.0+ NuGet参照をプロジェクトに追加します。

参照:

33
rsenna

ここに提示されているすべてのソリューションと this answer で引用されている参考文献を確認した後、最終的にこれを完全に解決しました。これは、この問題を経験した人なら誰でもすべきだと思うことです。

  1. すべてのNuGetパッケージを最新に更新します。
  2. NuGetをpackages.configからPackageReferencehere の手順に従って移行します。基本的に、ソリューション内のプロジェクトごとに、ソリューションエクスプローラーで、Referencesノードまたはpackages.configファイルを右クリックします。 packages.configをPackageReferenceに移行...を選択します。 ASP.NET Webサイトプロジェクトは、packages.configを使用し続ける必要があります。
  3. NuGetによって管理されていないSystem.Net.Httpへの参照を削除します(PackageReferenceを使用するプロジェクトの場合、NuGetシンボルが表示されるはずです enter image description here Solution Explorerの参照の横)。プロジェクトでSystem.Net.Httpが必要であることが確実な場合は、削除されたSystem.Net.Http参照を対応するNuGetパッケージに置き換えます(最初にそれなしでビルドしてみてください)。 packages.configを使用するプロジェクトの場合は、System.Net.Httpへの参照が必要であり、NuGetも使用していることを確認するように特に注意してください。 NuGetを使用して既に参照されている場合でも、NuGetを使用してSystem.Net.Httpを削除および再追加すると(allプロジェクトを参照する場合)役立つことがあります。ステップ2がどこかでばらばらになる可能性があることがわかりました。
  4. here で説明されている理由により、.NET Framework 4.7.2にアップグレードします。これはVS 2019の一部です。それ以外の場合は、 here からダウンロードするか、VS 2017のVisual Studio Installerを使用します。
  5. すべてのapp.configおよびWeb.configからアセンブリバインディングを削除allその後、ファイルを作成してソリューションを構築します。 app.configバインディングはもう必要ありません。 Web.configバインディングは次の手順で再度追加されますが、最初にそれらを削除すると、バインディングに古いバージョンが含まれなくなります。
  6. この段階で、他の競合が発生する可能性があります。 ASP.NET Webサイトプロジェクトの場合、警告で提供されるWeb.configにバインディングリダイレクトを追加します。他の.NET Frameworkアプリケーションの場合、警告が表示される参照については、参照が追加されずにプロジェクトがコンパイルされる場合でも、警告が表示されるプロジェクトに対応するNuGetパッケージを追加します。これにより、プロジェクトは、別のパッケージから参照される可能性のあるローカル.NET Frameworkバージョンではなく、NuGetバージョンを使用するように強制されます。これは、rsennaの 前述の回答 が示すように、.NET Frameworkと.NET Standardの間のクロスオーバーによるものです。ビルド後、さらに参照するためにこの手順を繰り返す必要がある場合があります。

後で参照を追加した後、マニフェストの不一致により実行時例外が発生することが判明した場合(ユニットテスト中であっても)、関連するWebサイトプロジェクトからすべてのバインディングリダイレクトを削除し、警告に示されている推奨リダイレクトを再度追加します手順6。

私はこの問題を体系的に解決するために多くの時間を費やしたので、異常な場合にはいくつかの側面的な思考が必要かもしれませんが、上記の手順はほとんどの人々の問題を完全に解決すると信じています。これが機能する(または機能しない)場合はお知らせください。

14
Neo

これは、フレームワークSystem.Net.Httpへの参照がある場合に発生する傾向がありますが、パッケージ参照の1つにNuGetパッケージSystem.Net.Httpが必要です。

そのアセンブリへの参照があるかどうかを確認し、それを削除して、代わりにNuGetパッケージをインストールします

8
erikkallen

これに対する新しいソリューションがあり、2018年10月9日から機能します。

  1. System.Net.Httpへのすべての参照を最新バージョン4.3.4に更新する必要があります。
  2. パッケージを明示的に必要としない場合でも、競合を引き起こしている.Netフレームワークソリューションにパッケージをインストールする必要があります。
  3. プロジェクトに新しいプロジェクト構造がある場合は、編集して、次のパッケージ参照が含まれていることを確認します。

    <PackageReference Include="System.Net.Http" Version="4.3.4" />
    
  4. ソリューションを検索し、System.Net.Httpの既存のバインディングリダイレクトを削除します。これらは次のようになります。

    <dependentAssembly>
      <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
    </dependentAssembly>
    
  5. 再構築、警告は消え、コードは正常に構築および実行されるはずです

3
ObiEff

Neoが上記に投稿した6つのステップは、ASP.NETパッケージの問題を解決するのに役立ちました!ネオありがとう!私はこれを一週間以上扱っていました。

上記のNeoの投稿を実装した経験から個人的なメモを共有したいだけです。

。Net Framework 4.6.1をターゲットとしたASP.NET Web APIプロジェクトがありました

ここに私がやったことがあります:

  • .Net Framework 4.7.2へのアップグレード
  • すべてのNuGetパッケージを最新に更新します。
  • (オプションで、「update-package -reinstall」を実行して、すべてのパッケージが4.7.2に関連付けられていることを確認できます)
  • パッケージを統合する
  • ASP.NETではできないため、packages.configからPackageRefenceに移行しませんでした
  • System.Net.Httpおよびそれを必要とする他の参照を削除し、NuGetパッケージとして追加しました。
  • Web.configおよびapp.config(.Core、.Tests、.IntegrationTestsライブラリ内)からすべてのアセンブリバインディングを削除しました
  • バージョン番号がテキスト(n.n.n.n-beta)で終わっていたが、テキストを削除して番号のみ(n.n.n.n)であった社内NuGetパッケージのバインディングリダイレクトを追加しました
  • これをすべての.csprojファイルに追加しました:
 <PropertyGroup> 
 <AutoUnifyAssemblyReferences> true </ AutoUnifyAssemblyReferences> 
 </ PropertyGroup> 
  • すべてのpackages.configファイルのパッケージが、ソリューションのすべてのプロジェクトで同じバージョンであることを確認してください。
    • Web.configでバージョンが同じであることを確認してください
    • 該当する場合、.csprojファイルのバージョンが同じであることを確認してください
  • Microsoft.Net.Compilers 3.1.1を使用します(.Testsおよび.IntegrationTestsを含むソリューション内のすべての.csprojファイルを更新します)
  • Redisを使用するデータ保護API(DPAPI):
    • Microsoft.AspNetCore.DataProtection.StackExchangeRedis 2.2.5をインストールします
    • StackExchange.Redis 2.0.601
    • System.Numerics.Vectorsを4.4.0に更新します(注:4.5.0にはサーバー接続を妨げるバグがあります)
1
Gary