同じ依存アセンブリの異なるバージョン間に解決できない競合が見つかりました


371

複数のプロジェクトがあるソリューションをクリーンアップしてビルドすると、出力ウィンドウにビルドが成功したことが報告されます。ただし、エラーリストウィンドウを表示すると、次の警告が表示されます。

解決できない同じ依存アセンブリの異なるバージョン間に競合が見つかりました。ログの冗長性が詳細に設定されている場合、これらの参照の競合はビルドログにリストされます。C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets

このメッセージをダブルクリックすると、C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targetsファイルが開きますが、何も理解できません。

Visual Studio Express 2013 for the Webを使用しています。

どのDLLに何が問題で何が問題なのかを確認するにはどうすればよいですか?警告を表示しないようにするにはどうすればよいですか?


2
参照してください... stackoverflow.com/questions/1871073/...
SteveC

2
メッセージにDLL名を含めるようにMS Connectの提案に送信しましたconnect.microsoft.com/VisualStudio/feedback/details/2619450
Michael Freidgeim

回答:


513

eta:SO自身の@Nick Craverによるこの記事キラー記事があります。


他の回答はこれを言っていますが、彼らはそれを明示していませんので、私はします...

VS2013.2では、引用された情報の発行を実際にトリガーするには、メッセージを読む必要はありません。

C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1697,5):warning MSB3277:解決できない同じ依存アセンブリの異なるバージョン間で競合が見つかりました。これらの参照の競合は、ログの詳細度が詳細に設定されている場合、ビルドログに一覧表示されます。

これは正しくありません(または、少なくとも一部のバージョンのVisual Studioの場合は、最新のVS2015 Update 3以降では問題ないようです)。代わりに、それを診断[ツール]-> [オプション]-> [プロジェクトとソリューション]-> [ビルドと実行]からMSBuildプロジェクトのビルド出力の詳細度を設定)にすると、次のようなメッセージが表示されます。

「Newtonsoft.Json、Version = 6.0.0.0、Culture = neutral、PublicKeyToken = 30ad4fe6b2a6aeed」と「Newtonsoft.Json、Version = 6.0.5.17707、Culture = neutral、PublicKeyToken = 30ad4fe6b2a6aeed」の間に競合がありました。

  • 「Newtonsoft.Json、Version = 6.0.0.0、Culture = neutral、PublicKeyToken = 30ad4fe6b2a6aeed」がプライマリであり、「Newtonsoft.Json、Version = 6.0.5.17707、Culture = neutral、PublicKeyToken = 30ad4fe6b2a6aeed」は選択されなかったため、選択されました。

その後

  • Ctrl-Alt-O ビルド出力ウィンドウに移動する
  • 選択されました」を検索して、ドリルダウンを見つけます。

...そして、はい、[診断]メッセージの詳細を見ている人にとって、すべての6.xバージョンが内部的にアセンブリバージョン6.0.0.0であるという規則が町にあるというこのignoramusへのニュースでした。つまり、SemVerメジャーコンポーネントのみがアセンブリに入ります。バージョン :)


3
ありがとう-Visual Studioを長年使用しており、ビルドログのこれまで掘り下げる必要があった問題は一度もありませんでした。別の問題が、私が探していた情報がどこかで放出されていたことが私の問題を解決したことに気づきました。
ティモシーリーラッセル

4
詳細なログレベルはVS内で機能するようです(したがって、診断は必要ありません)。MSBuildのVS内での動作が異なるのは初めてではありません...
ヨハネスルドルフ

105
メニューの[ツール]-> [オプション]からログの詳細度を変更するには、[プロジェクトとソリューション]-> [ビルドして実行]
Jenn

3
私の場合、3つの対立があり、そのうちの1つが他の2つの責任を負っていました。「詳細な」ビルドログをメモ帳にコピーし、「競合」を検索し、認識した参照用にNuGetパッケージを更新し、問題を解決しました。
Isaac Lyman

@robotnik [他のユーザーによって拒否されました]編集の提案に感謝します。私は実際には回答の下部に情報を含めていましたが、うまくいけば、現在の回答はあなたが意図したとおりに明確になっています。
Ruben Bartelink 2016

76

msbuild Foo.sln /t:Rebuild /v:diag(からC:\Program Files (x86)\MSBuild\12.0\bin)を実行してコマンドラインからソリューションをビルドし、もう少し詳細を取得してから.csproj.、警告をログに記録し、その参照と、バージョンが異なる同じ共通アセンブリを使用する他のプロジェクトの参照を確認します

編集:VS2013でビルドの詳細度を直接設定することもできます。行くTools> Optionsメニューは、その後に行くProjects and SolutionsとのセットのMSBuildの冗長Diagnostic

編集:自分で取得したばかりなので、説明はほとんどありません。私の場合、警告は、Resharperプロンプトを使用して参照を追加したためでした。これは、[参照の追加]ダイアログではバージョン4とv12の両方を選択できるにもかかわらず、バージョンレスでした。

<Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
<Reference Include="Microsoft.Build.Framework" />

<Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
<Reference Include="Microsoft.Build.Framework, Version=12.0.0.0, ..." />

/v:diag冗長性のあるMSBuildログでは、次のようになります。2つの参照が競合した詳細を示す:-

  There was a conflict between 
  "Microsoft.Build.Framework, Version=4.0.0.0, ..." and 
  "Microsoft.Build.Framework, Version=12.0.0.0, ...". (TaskId:16)

      "Microsoft.Build.Framework, Version=4.0.0.0, ..." was chosen because it was primary and 
      "Microsoft.Build.Framework, Version=12.0.0.0, ..." was not. (TaskId:16)

      References which depend on "Microsoft.Build.Framework, Version=4.0.0.0, ..." 
      [C:\...\v4.5.1\Microsoft.Build.Framework.dll]. (TaskId:16)

          C:\...\v4.5.1\Microsoft.Build.Framework.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v4.5.1\Microsoft.Build.Framework.dll". (TaskId:16)
              Microsoft.Build.Framework (TaskId:16)

      References which depend on "Microsoft.Build.Framework, Version=12.0.0.0, ..." 
      [C:\...\v12.0\Microsoft.Build.Framework.dll]. (TaskId:16)

          C:\...\v12.0\Microsoft.Build.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.dll". (TaskId:16)
              Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)

          C:\...\v12.0\Microsoft.Build.Engine.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.Engine.dll". (TaskId:16)
              Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)

C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3277: 
Found conflicts between different versions of the same dependent assembly that could not be resolved.  
These reference conflicts are listed in the build log when log verbosity is set to detailed. 
[C:\Users\Ilya.Kozhevnikov\Dropbox\BuildTree\BuildTree\BuildTree.csproj]

10
:私はそれより簡単に目を通すことができるように、私は、ログファイルにそのコマンドをパイプ終わったmsbuild "Foo.sln" /t:Rebuild /v:d > build.log
CrazyPyro

2
このためにターミナルに到達する最良の方法:stackoverflow.com/a/22702405/268066
CrazyPyro 2014

@CrazyPyro msbuildには「ビルトイン」パイプがあります/l:FileLogger,Microsoft.Build.Engine;logfile=build.log
drzaus 2015年

3
「ビルドログ」はどこにありますか?どうすれば見つけられますか?
囚人ZERO

この回答は、msbuildから詳細を取得する方法を示しています。これは、monoユーザーが気にしていることです。他のすべての回答は、VSを使用してWindows環境で実行していることを前提としています。
UnconditionallyReinstateMonica

39

表示できる2つのメッセージを比較して、ルーベンの回答をさらにサポートすることができます。

ここに画像の説明を入力してください

そしてメッセージ:

C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1697,5):warning MSB3277:解決できない同じ依存アセンブリの異なるバージョン間で競合が見つかりました。これらの参照の競合は、ログの詳細度が詳細に設定されている場合、ビルドログに一覧表示されます。

それで、ルーベンの権利—これは真実ではありません。競合はまったくなく、アセンブリが欠落しているだけです。ビューがオンデマンドでコンパイルされるため、つまり初めて表示される直前に、プロジェクトがASP.NETアプリケーションである場合、これは特に退屈です。これは、アセンブリを使用可能にする必要があるときです。(残りのコードと一緒にビューをプリコンパイルするオプションがありますが、これは別の話です。)一方、冗長性をDiagnosticに設定すると、次の出力が得られます。

C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3245:この参照を解決できませんでした。アセンブリ「System.Web.Razor、Version = 3.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35、processorArchitecture = MSIL」が見つかりませんでした。アセンブリがディスク上に存在することを確認してください。この参照がコードで必要な場合、コンパイルエラーが発生する可能性があります。

その結果、必要なのは次のいずれかです。

  1. アセンブリへの参照を手動で追加します(ディスク上、おそらくGACに配置し、「直接」参照として追加します)、または
  2. NuGetパッケージ(ギャラリーで公開されている場合)を使用してダウンロードし、その中に含まれているアセンブリを参照します。

NuGetギャラリーの詳細については、こちらをご覧ください。ASP.NETビューのプリコンパイルの詳細については、こちらをご覧ください


VS 2017では、「MSBuildプロジェクトビルド出力の詳細度」(ログファイルではなく)を詳細(診断ではない)に設定すると、出力ウィンドウに「アセンブリを見つけることができませんでした」というエラーが発生しました。
ALEXintlsos 2018年

@ALEXintlsos:明らかにこの機能は変更されました。それでもどこにいてもエラーが発生します-指示に従ってエラーを取り除いてください。
Alexander Christov

22

Visual Studioでビルドの詳細度を変更すると、正しい方向を示すのに役立ちます。VSで詳細度を変更するには、以下の手順に従ってください

  1. VSの[ツール]> [オプション]メニューに移動します
  2. オープンプロジェクトとソリューション->ビルドと実行
  3. MSBuildプロジェクトのビルド出力の詳細度の値を変更します。1を選びQuietMinimalNormalDetailedおよびDiagnostic

VS の出力ウィンドウ(Ctrl+ Alt+ O)をチェックして、ビルドログの変更を確認します。


16

そして、どうすれば警告を消すことができますか?

これを修正するには、NuGetパッケージを再インストールまたはアップグレードする必要があるでしょう。


2
これにより、パッケージを正しく再インストールすることを拒否されたときにVisual Studioを再起動するという組み合わせにより、問題は解決しました。
Ohad Schneider

22
確認する最も簡単な方法:ソリューションを右クリック-> Manage NuGet packages for solution-> Consolidate同じパッケージの異なるバージョンがインストールされているかどうかを確認できます
elshev

16

@elshevからのコメントの1つを繰り返しますソリューションを右クリック->ソリューションのNuGetパッケージを管理-> [統合]で、同じパッケージの異なるバージョンがインストールされているかどうかを確認できます。そこでパッケージを更新します。競合エラーは解決されました。


1
これで解決しませんでした。Newtonsoft.JSONをアンインストールして、NuGetで再インストールする必要がありました。これにより、他のパッケージへの依存関係が更新されました。
Garr Godfrey 2017

これはResharperのようなツールを使用しているときにも起こりました。このツールはDLLの不足している参照を自動的に追加します。ここでは「常にnugetを使用して追加する」をお勧めします。
Shaswat Rungta 2017

パッケージをアンインストールしようとすると、パッケージの競合があるために起こり得ないビルドが試行されるため、私にとっては機能しません。そのため、パッケージを再インストールすることさえできません:(
nickornotto

8

私はVisual Studio 2017を使用していて、いくつかのNugetパッケージを更新したときにこれに遭遇しました。私にとってうまくいったのは、web.configファイルを開いて<runtime><assemblyBinding>ノードを見つけ、それを削除することでした。web.configプロジェクトを保存して再ビルドします。

Error List窓を見てください。バインディングの競合に関する非常に長い警告のように見えます。それをダブルクリックすると<runtime><assemblyBinding>、正しいマッピングでブロックが自動的に再作成されます。



3

ナゲットパッケージを使用して、WebプロジェクトにNewtonsoft Jsonをインストールするこの問題を解決できました


3

明らかに、さまざまな原因があり、この問題には多くの解決策があります。私をミックスに投入するために、以前Webプロジェクトで直接参照されていたアセンブリ(System.Net.Http)をNuGetで管理されるバージョンにアップグレードしました。これにより、そのプロジェクト内の直接参照が削除されましたが、テストプロジェクトにはまだ直接参照が含まれていました。NuGet管理のアセンブリを使用するように両方のプロジェクトをアップグレードすると、問題が解決しました。



1

時々、nugetパッケージがインストールされていることを発見しました(私が推測していることです).NET Core必須コンポーネントまたは既にインストールされているフレームワークと競合するその他のアイテム。私の解決策は、プロジェクト(.csproj)ファイルを開いてそれらの参照を削除することでした。たとえば、System.IO、System.Threadingなどは、最近インストールされたNuGetパッケージを介してMicrosoft.Bclが含まれている場合に追加される傾向があります。私のプロジェクトでこれらの特定のバージョンを使用する理由はないので、参照とプロジェクトビルドを削除します。お役に立てば幸いです。

プロジェクトファイルで「参照」を検索して、競合を削除できます。それらがシステムに含まれている場合、それらを取り除くと、ビルドが機能するはずです。これがこの問題のすべてのケースに答えるわけではありません-私が何がうまくいったかをあなたが知っていることを確認しています:)

コメントアウトした例:

<!-- <Reference Include="System.Runtime, Version=2.6.9.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> -->
  <!-- <HintPath>$(SolutionDir)packages\Microsoft.Bcl.1.1.9\lib\net40\System.Runtime.dll</HintPath> -->
  <!-- <Private>True</Private> -->
<!-- </Reference> -->


1

私はここでいくつかの回答のアドバイスに従って何が問題だったかを突き止めましたが、どの回答もそれを修正する方法を説明していないようです。私の問題は、1つの参照が別のバージョンの別の参照を必要とすることでした。したがって、Newtonsoftはバージョン6でしたが、他の一部のDLLは4.5を必要としていました。次に、他の回答の1つが示唆しているように、Newtonsoftをアップグレードしました。

だから私は実際に私のNewtonsoftインストールをダウングレードし、警告は消えました(VS 2017):

ソリューションエクスプローラーで[参照]を右クリックし、[NuGetパッケージの管理...]を選択します。[インストール済み]タブで、Newtonsoft(または競合しているもの)を見つけます。右側の[バージョン]の横にドロップダウンが表示され、古いバージョンに変更できます。バージョン。このドロップダウンをダウングレードに使用できるかどうかは、私には明らかではありませんでした。


1

Dotnet CLIを完全な診断の詳細度で実行すると、問題の発見に役立ちます。

dotnet run --verbosity diagnostic >> full_build.log

ビルドが完了したら、ログファイル(full_build.log)でエラーを検索できます。たとえば、「競合」を検索すると、問題にすぐに移動できます。


0

NuGet Packagaesの管理からMicrosoft ASP.NET MVC nuget.orgをアンインストールして、再インストールしました。再インストール中に、かみそりのバージョンに関連するすべての競合が解決されました。それを試してみてください 。


0

MSBuildの詳細度をDiagnostic。に変更しましたが、問題がどこにあるのかを見つけることができませんでした。上記の回答によると、app.configに次のコードがあります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="XbimXplorer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>

したがって、最初のシステムのバージョンを4.0.0.0から12.0.0.0に変更しただけで、プロジェクトは機能しました。


0

他の回答と同様に、出力ログレベルを詳細に設定して競合を検索します。これにより、次にどこを見ればよいかがわかります。

私の場合、それは参照のソースを探していくつかの方向に私を送りましたが、結局のところ、問題は私のポータブルクラスライブラリプロジェクトの1つであることがわかりました。内の参照のバージョン、したがって競合。迅速なターゲット変更と問題の解決。


0

パッケージをnugetからローカルで参照されるdllに切り替えた後、これと問題に遭遇しました。問題は、の古いランタイムバインディングに関するものapp.configでした。


0

パッケージリファレンスに移行した後、この警告が表示されました。診断出力では、ライブラリが同じライブラリ自体によって参照されているという情報がありました。新しいパッケージリファレンスのバグの可能性があります。解決策は、AutoGenerateBindingRedirectsを有効にし、カスタムバインディングリダイレクトを削除することでした。


0

VS 2017、MVCプロジェクト

理由はわかりませんが、この問題の解決策はout、コントローラーアクションメソッドから呼び出されたモデルメソッドシグネチャからパラメーターを削除することでした。これは非常に奇妙な動作ですが、それが私の問題の解決策でした。


-2

Update-Packageパッケージマネージャーコンソールからコマンドを実行する

これにより、MSB3277が修正されます。これにより、すべてのパッケージとそれらに付属するすべての関連アセンブリが可能な限り最高のバージョンに再インストールされます。特定のパッケージのみを更新することもできます。または、必要に応じて、更新後にダウングレードします。この問題は数回発生しました。持っているnugetパッケージの数によっては、このプロセスに数分かかる場合があります。

公式ドキュメントの詳細https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages


14
このアドバイスは、プロダクションコードでよくある最新のパッケージが不要な場合、1日が台無しになる可能性があります。
Tony O'Hagan 2017

1
これはアドバイスに示され、あなたにとって問題となる可能性のあるものは問題を修正する安全で簡単な方法ですので、あなた自身の意見で人々に投票しないでください。
Aistis Taraskevicius 2017

1
この解決策は私にはうまくいきませんでした。私はすでにすべての最新バージョンを持っていました。
Zero3

ZERO3 @ missmatchesを引き起こすものである、それはすべての単一の1と更新の参照を再インストールするので、あなたは、それが通常動作しますが、直接、どのパッケージを指定せずに、あなたのトップのソリューションからそれを走ってい
Aistis Taraskevicius

3
これは本当にひどいアドバイスです。これは意見ではありません。意図的に行わないと、パッケージの更新によりコードが破損します。
TheBatman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.