「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-戻る
--[[NuGet]]
--[[MSBuild]]

* 目次 [#h43555c0]
#contents

*概要 [#gc03ed29]
NuGetは非常に便利だが、この問題がよく起きるようになった。

以下のようなエラーが出た場合の対処。

-warning MSB3247: 同じ依存アセンブリの異なるバージョン間での競合が見つかりました。
-warning MSB3247: Found conflicts between different versions of the same dependent assembly.

*対策 [#p8fe593d]
[[ビルド出力ログ>#k4519d36]]を確認して、[[バインディング リダイレクト>#e7ce3b32]]を、*.configに設定する。

*詳細 [#w8916156]
[[バインディング リダイレクト>#e7ce3b32]]が設定されていない場合、~
以下のバージョン不一致のケースでも、競合が報告される。
-下位モジュールで、下位バージョンの依存関係モジュールを使用
-上位モジュールで、上位バージョンの依存関係モジュールを使用

**調査方法 [#b7a12c2f]

***ビルド出力の詳細化 [#k4519d36]
-ビルド出力のレベルを上げる。
--[ツール] → [オプション] → [プロジェクトおよびソリューション] → [ビルド/実行]で、
--[MSBuild プロジェクト ビルドの出力の詳細(V)]を"詳細"にセットする。

-以下、"詳細"のビルド出力。

 yyyy/MM/dd HH:mm:ss にビルドを開始しました。
 ノード 1 上のプロジェクト "XXXX.sln" (既定のターゲット)。
 ValidateSolutionConfiguration:
   ソリューション構成 "Debug|Any CPU" をビルドしています。
 プロジェクト "XXXX.sln" (1) は、ノード 1 上に "XXXX.csproj" (2) をビルドしています (既定のターゲット)。
 ResolveAssemblyReferences:
   競合を解決して警告を消去するために、app.config でアセンブリ "YYYY, Culture=neutral, PublicKeyToken=YYYY" をバージョン "6.9.9.0" [] からバージョン "6.9.11.0" [YYYY.dll] にマップし直してください。
 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3247: 同じ依存アセンブリの異なるバージョン間での競合が見つかりました。 [XXXX.csproj]
 GenerateTargetFrameworkMonikerAttribute:
 すべての出力ファイルが入力ファイルに対して最新なので、ターゲット "GenerateTargetFrameworkMonikerAttribute" を省略します。
 CoreCompile:
 すべての出力ファイルが入力ファイルに対して最新なので、ターゲット "CoreCompile" を省略します。
 _CopyAppConfigFile:
 すべての出力ファイルが入力ファイルに対して最新なので、ターゲット "_CopyAppConfigFile" を省略します。
 CopyFilesToOutputDirectory:
   XXXX -> XXXX.dll
 プロジェクト "XXXX.csproj" (既定のターゲット) のビルドが完了しました。
 プロジェクト "XXXX.sln" (既定のターゲット) のビルドが完了しました。
 
 ビルドに成功しました。
 
 "XXXX.sln" (既定のターゲット) (1) -> "XXXX.csproj" (既定のターゲット) (2) -> (ResolveAssemblyReferences ターゲット) -> 
   C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3247: 同じ依存アセンブリの異なるバージョン間での競合が見つかりました。 [XXXX.csproj]
 
     1 個の警告
     0 エラー
 
 経過時間 00:00:00.nn

※ 伏せているけど、上記は、バージョン番号からしてMySQL。~
このように、どの依存アセンブリでバージョン間の競合が起きているかも確認できる。

**対策方法 [#m1fe4578]

***依存アセンブリのバージョンを一致させる [#f57a223f]
-この方法は、下位モジュールがNuGetパッケージだったりすると適用できない。
-このような場合、以下の[[バインディング リダイレクト>#e7ce3b32]]の方法を適用する。

***バインディング リダイレクト [#e7ce3b32]
以下のように、*.configファイルの、~
configuration -> runtimeセクション以下に~
バインディング リダイレクトを設定する。

 <dependentAssembly>
   <assemblyIdentity name="YYYY" publicKeyToken="YYYY" culture="neutral" />
   <bindingRedirect oldVersion="0.0.0.0-6.9.11.0" newVersion="6.9.11.0" />
 </dependentAssembly>

*参考 [#m27af581]
-警告 : 同じ依存アセンブリの異なるバージョン間での競合が見つかりました。~
https://msdn.microsoft.com/ja-jp/library/bb383993.aspx

-警告:MSB3277が出た時の対処法メモ - Qiita~
https://qiita.com/hahifu/items/8dba20cd06fb0c3a9fa7

-.net - Resolving MSB3247 - Found conflicts between different versions of the same dependent assembly - Stack Overflow~
https://stackoverflow.com/questions/1871073/resolving-msb3247-found-conflicts-between-different-versions-of-the-same-depen

----
Tags: [[:.NET開発]], [[:デプロイ]], [[:デバッグ]], [[:NuGet]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS