.NET 3.5 ソリューションは、msbuild でコンパイルするとこの警告が発生しました。
NDepend が役立つ場合もありますが、この場合はそれ以上の詳細は提供されませんでした。ボブのように結局、依存アセンブリの古いバージョンを参照しているアセンブリが見つかるまで、ILDASM で各アセンブリを開くしかありませんでした。
VS 2010 Beta 2 の MSBUILD を使ってみました (Connect の記事では、CLR の次のバージョンでこれが修正されたと示されていました) が、それ以上の詳細は提供されませんでした (Beta 2 以降で修正される可能性があります)
もっと良い(より自動化された)アプローチはありますか?
ベストアンサー1
「MSBuild プロジェクト ビルド出力の詳細度」を「詳細」以上に変更します。これを行うには、次の手順に従います。
- オプション ダイアログ ( [ツール] -> [オプション... ]) を表示します。
- 左側のツリーで、[プロジェクトとソリューション]ノードを選択し、[ビルドと実行] を選択します。
- 注: このノードが表示されない場合は、ダイアログの下部にある [すべての設定を表示]チェックボックスがオンになっていることを確認してください。
表示されるツール/オプション ページで、バージョンに応じてMSBuild プロジェクト ビルド出力の詳細レベルを適切な設定に設定します。
- VS2012、VS2013、またはVS2015での診断(これらのバージョンのメッセージでは「詳細」を使用する必要があると表示されます)しかし、これは明らかに間違っています。「診断」を使用する必要があります。)
- VS2010の場合の詳細
- VS2008 以前では、Normal で十分です。
- プロジェクトをビルドし、出力ウィンドウを確認します。
MSBuild メッセージを確認してください。MSB3247ResolveAssemblyReferences
の発生元であるタスクは、この特定の問題のデバッグに役立ちます。
私の場合は、SqlServerCe への参照が間違っていました。以下を参照してください。2 つの異なるバージョンの SqlServerCe を参照するプロジェクトが 2 つありました。古いバージョンのプロジェクトに移動し、参照を削除してから、正しい参照を追加しました。
Target ResolveAssemblyReferences:
Consider app.config remapping of assembly "System.Data.SqlServerCe, ..."
from Version "3.5.1.0" [H:\...\Debug\System.Data.SqlServerCe.dll]
to Version "9.0.242.0" [C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\System.Data.SqlServerCe.dll]
to solve conflict and get rid of warning.
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets :
warning MSB3247: Found conflicts between different versions of the same dependent assembly.
参照されているアセンブリのバージョンを確認するために各アセンブリを開く必要はありません。
- 各参照のプロパティを確認できます。
- プロジェクトのプロパティを開き、参照セクションのバージョンを確認します。
- テキスト エディターでプロジェクトを開きます。
- .Net Reflector を使用します。