MSB3247 の解決 - 同じ依存アセンブリの異なるバージョン間で競合が見つかりました 質問する

MSB3247 の解決 - 同じ依存アセンブリの異なるバージョン間で競合が見つかりました 質問する

.NET 3.5 ソリューションは、msbuild でコンパイルするとこの警告が発生しました。

NDepend が役立つ場合もありますが、この場合はそれ以上の詳細は提供されませんでした。ボブのように結局、依存アセンブリの古いバージョンを参照しているアセンブリが見つかるまで、ILDASM で各アセンブリを開くしかありませんでした。

VS 2010 Beta 2 の MSBUILD を使ってみました (Connect の記事では、CLR の次のバージョンでこれが修正されたと示されていました) が、それ以上の詳細は提供されませんでした (Beta 2 以降で修正される可能性があります)

もっと良い(より自動化された)アプローチはありますか?

ベストアンサー1

「MSBuild プロジェクト ビルド出力の詳細度」を「詳細」以上に変更します。これを行うには、次の手順に従います。

  1. オプション ダイアログ ( [ツール] -> [オプション... ]) を表示します。
  2. 左側のツリーで、[プロジェクトとソリューション]ノードを選択し、[ビルドと実行] を選択します。
    • 注: このノードが表示されない場合は、ダイアログの下部にある [すべての設定を表示]チェックボックスがオンになっていることを確認してください。
  3. 表示されるツール/オプション ページで、バージョンに応じてMSBuild プロジェクト ビルド出力の詳細レベルを適切な設定に設定します。

  4. プロジェクトをビルドし、出力ウィンドウを確認します。

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 を使用します。

おすすめ記事