1. ホーム
  2. .net

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

2022-03-24 13:58:46

質問

.NET 3.5のソリューションで、msbuildでコンパイルするとこのような警告が表示されました。

NDepend が助けてくれることもありますが、この場合はそれ以上の詳細を教えてくれませんでした。 ボブと同じ 結局、依存するアセンブリの古いバージョンを参照しているアセンブリを見つけるまで、ILDASMでそれぞれのアセンブリを開くという手段に訴えることになりました。

VS 2010 Beta 2のMSBUILDを使ってみましたが(Connectの記事でCLRの次のバージョンで修正されるとあったので)、これも詳細は分かりませんでした(たぶんBeta 2以降で修正されたのでしょう)。

もっと良い(自動化された)方法はないのでしょうか?

どのように解決するのですか?

MSBuildプロジェクトのビルド出力の冗長性("Detailed"以上)を変更します。これを行うには、以下の手順に従います。

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

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

MSBuildのメッセージを確認します。その ResolveAssemblyReferences タスクは、MSB3247 の原因となったタスクであり、この特定の問題をデバッグするのに役立つはずです。

私の具体的なケースは、SqlServerCeの参照が正しくないというものでした。以下を参照してください。私は2つのプロジェクトで、2つの異なるバージョンのSqlServerCeを参照していました。私は古いバージョンのプロジェクトに行き、参照を削除し、正しい参照を追加しました。

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.


参照されているアセンブリのバージョンを判断するために、各アセンブリを開く必要はありません。

  • 各リファレンスのプロパティを確認することができます。
  • プロジェクトのプロパティを開き、Referencesセクションのバージョンを確認します。
  • テキストエディターでプロジェクトを開きます。
  • .Net Reflectorを使用します。