0

私は Visual Studio 2008 SP1、2 つの C++/CLI プロジェクト、proj1 と proj2 を持っています。proj2 は proj1 に依存していますが、奇妙な方法です (以下を参照)。プロジェクトの依存関係で、proj2 が proj1 に依存することを指定します。また、proj2 参照には proj1 が含まれます。次に、proj1 を proj2 のフレンドにしたいので、「フレンド アセンブリ」の MSDN ページにあるように、proj2 のどこかに次のコードを記述します。

#「proj1.dll」をフレンドとして使用。

コンパイルすると、proj1.dll が既に参照されているため、proj2 プロジェクト設定からプロジェクト参照を削除する必要があることがわかります (したがって、/FU フラグを削除します)。

バグ (?) が発生します: proj2 から proj1 の参照を削除しても、ソリューションの Project Dependencies で proj2 が proj1 に依存することを指定すると、VS2008 ですべて正常にコンパイルされます。しかし、MSBUILD はプロジェクト参照を解析し、proj2 用の新しい一時プロジェクトを作成し、ADDS /FU:proj1.dll を作成し、BUILD は失敗します。

質問 1: この MSBuild の動作を無効にする方法はありますか?

次に、プロジェクトの依存関係で依存関係を削除すると、MSBuild は正常にビルドされますが、Visual Studio は proj1 と proj2 を並行してコンパイルしようとして失敗します。これは、proj2 がはるかに小さく、最初にコンパイルされるためです...ビルドと実行は役に立ちますが、すべての開発者マシンで実行する必要があります。この設定をソリューションに保存することはできません。ビルドが遅くなるなど...

質問 2:「プロジェクトの依存関係」を条件付きオプションにする方法はありますか? 私はVS2008とMSBuildのためにそれをしたい...

4

2 に答える 2

2

OPがすでに知っているように、これは実際にはバグです。OPによってバグが報告され、Microsoftによって承認されました。VS2005、VS2008、およびVS2010(VS2008を対象)に影響を与えるようです。

私が使用した回避策は、2つの依存プロジェクト間の参照を「バッファリング」するためのダミーの中間プロジェクトでした。

于 2010-01-25T17:13:15.847 に答える
0

ProjAがProjBに依存し、ProjBがProjAに依存している場合、それを構築できることに驚いています。この種の循環ビルド依存関係は通常、クリーンビルドを強制終了します。ProjBとvise-veraをビルドするときに、古いProjAがまだ存在している開発マシンでそれを回避することがよくあります。しかし、クリーンなマシン(ビルドサーバー)では、この種の依存関係はしばしば物事を壊します。

依存関係が何であるかに応じて、共通の依存関係を新しいアセンブリProjCに移動するのが最も簡単な場合があります。このアセンブリには、独自の依存関係はありませんが、ProjAとProjBの両方が依存しています。これは、その後、ProjC、次にProjA、ProjBを任意の順序でビルドできることを意味します。この種のリファクタリングは、具象クラスではなくProjCのインターフェースのみに依存している場合に最も簡単になることがよくあります。

これがあなたの質問に完全に答えるかどうかはわかりませんが、それを修正する別の方法を提供するかもしれません。

コリン

于 2009-04-21T08:41:53.107 に答える