1

私は持っています:

  • 共有機能のライブラリ[A]
  • A[A1]のv1を参照する別のライブラリ[B]

私の現在のVisualStudioソリューションには次のものがあります。

  • (ファイル)がBを参照するdll[L]
  • WindowsService [S]は、(プロジェクト)Lを参照し、更新されたが下位互換性のあるバージョンのA[A2]へのファイル参照も持っています。

Visual Studioでソリューションを構築すると、すべてが正常に機能します。Sのbinフォルダーには、L、B、およびA2が含まれています(Bと互換性があるため、うまく機能します)。

ただし、(TeamBuildを介して)MSBuildを使用してビルドすると、最終的なビルドフォルダーはL、B、およびA1になります。A1にはSに必要なライブラリAの新機能がないため、実行しようとするとSがフォールオーバーします。


MSBuildによって無視される.slnのビルド順序に関係していることを示唆するいくつかのことを読みました。

LのbinディレクトリにはA2への参照がないため、予想どおりBとA1が含まれていることがわかりました。したがって、おそらくMSBuildがL(ローカルでBとA1をプル)とS(LとA2をプル)をビルドした場合、すべてのバイナリをビルドの最終出力にマージする必要があります。私が理解していないのは、A2(Sビンから)よりもA1(Lビンから)を選択する理由です。

逆であるべきだと言うことは何もないことを感謝しますが、MSBuildがこの呼び出しを行うためにどのような基準を使用するのかわかりません。

誰かがこれに光を当てることができますか?

4

1 に答える 1

0

teambuild での msbuild の動作方法は、すべてのプロジェクトのすべての出力 dll が outputdirectory に配置されることです。この出力ディレクトリは、ソリューション内のすべてのプロジェクトで共有されます。したがって、同じ dll の異なるバージョンがある場合、それらは互いに上書きします。

これを回避するには、そのようなプロジェクト $(Outdir)\SpecificDir のサブディレクトリを使用するか、DLL の名前をバージョン タグ (A.1.0.dll および A.dll) で変更します。

于 2013-02-05T10:15:58.707 に答える