21
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

警告:MSB3277が出た時の対処法メモ

Posted at

警告 : 同じ依存アセンブリの異なるバージョン間での競合が見つかりました。
との警告が少し前に出たのでその時行った対処法をまとめます。

2.png

前提

今回のケースでは、ソリューションをメインとなるプログラムのコード(以下、コード側)のプロジェクトとそれのテストプロジェクト(以下、テスト側)から構成されています。
また、テスト側のプロジェクトをスタートアッププロジェクト、つまりプライマリとして設定しています。
また、テスト側のプロジェクトはコード側のプロジェクトに依存しています。

  • ソリューション
    • テスト側のプロジェクト(プライマリ)
    • コード側のプロジェクト

(上記:ソリューションの構成イメージ)

1.メッセージの通りに出力を詳細にする(Optional)

まずは警告メッセージの通りにログの詳細を上げて問題箇所がわかるようにします。
[ツール]→[オプション]からVSのオプションを表示します。続いて[プロジェクトおよびソリューション]→[ビルド/実行]から[MSBuild プロジェクト ビルドの出力の詳細(V)]を"詳細"にセットします(下図)。
無題.png

2.詳細になったビルド出力から問題箇所を探る

もう一回ビルドをかけるとたくさんのメッセージが表示されるので[出力]ウィンドウの内容を"MSB3277"で検索すると

検索結果
C:\(中略)\Microsoft.Common.CurrentVersion.targets(1987,5): warning MSB3277: 同じ依存アセンブリの異なるバージョン間で、解決できない競合が見つかりました。これらの参照上の競合は、ログの詳細度が詳細に設定されている場合にビルド ログにリストされます。

ここから上に向かって辿ると

問題の箇所
"Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" と"Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" の間で競合が発生しました。
プライマリであるため、"Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"が選択されました。"Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"はプライマリではありませんでした。

...最初この文章を見たとき、一瞬なんのことがよくわかりませんでした。
要約すると、

  • テスト側 Newtonsoft.Json(9.0.0) (プライマリ)
  • コード側 Newtonsoft.Json(10.0.0)

「同じライブラリがバージョン違いで存在しているので警告を出しました。
今回はプライマリの方を選んでビルドしました」とのことです。

2.5. 問題箇所を確認する

今回のケースではプライマリ側のNewtonsoft.JsonがMicrosoft.Extensions.DependencyModel(1.1.0)から参照されていたのでそのバージョンのNugetのページをチェックします。
するとDependenciesがNewtonsoft.Json (>= 9.0.1)ということがわかりました。
これならテスト側のバージョンを10.0.0以上にすれば問題が解消できそうです。

3. 問題となった側のNugetライブラリを最新にする

NugetからNewtonsoft.Jsonをインストールし、再度ビルドしたところ、
1.png

警告が消えました!よかった!

まとめ

  • 警告が出たときはメッセージを読む
    • 状況に応じて、出力のレベルを上げる
  • 競合しているライブラリのバージョンを見比べる
    • それに依存するライブラリの条件も確認する
  • プライマリ側のライブラリを最新化し、再度ビルドする

関連リンク

21
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?