4

.csprojソリューション内のいくつかのプロジェクトを参照するビルドを試みます。これらの参照は。でマークされていCopyLocal=Falseます。そして、これは望ましい動作です。

MSBuildを使用してCI用にビルドするので、を介して出力フォルダーを設定します/p:OutputPath="some output dir"/p:SolutionDir="path to the solution"また、いくつかのNuGet参照を正しく解決するように設定しました。

問題は、出力ディレクトリへの絶対パスを指定してOutputPathを指定すると(のようにd:\solution\build\buildgroupsubfolder)、MSBuildがすべての依存関係を出力ディレクトリにコピーする理由がわかりません。また、相対パス(など..\..\..\..\..\build\buildgroupsubfolder)を使用して出力パスを指定すると、MSBuildはCopyLocal=false参照を正しく処理し、出力ディレクトリにコピーしません。

ソリューションにはいくつかのネストがあり、プロジェクトはグループに分割されているため、サブフォルダーにビルドする必要があります。また、プロジェクト自体のパスではなく、ベースビルドパスを基準にしてビルドパスを指定できるようにしたいと思います。

絶対パスが指定されている場合にMSBuildがCopyLocal=falseを無視し、相対パスが指定されている場合に正しく処理するのはなぜですか?

4

2 に答える 2

4

さて、私はさらに掘り下げました。私はMSBuildが誤動作していることを知りましたが、それについて私が思っていた場所ではありません。

質問で説明したように、MSBuildの動作が正しくないと思いました。相対パスCopyLocal=falseに設定すると、実際に処理されます。そして、絶対パスOutputDirに設定すると誤動作します。OutputDir私はMSDNで次のような答えを見つけました。

OutputPath-プロジェクトディレクトリを基準にした出力ディレクトリへのパスを指定します(例: "bin \ Debug")。

したがって、実際には、絶対パスに設定すると、MSBuildは警告を表示するか、失敗することさえありOutputPathますが、そうではありません。そのため、絶対パスは問題なく、CopyLocal処理にバグがあるという印象を受けました。実際のバグは、MSBuildが失敗したときに機能することです。

于 2012-09-24T16:37:51.353 に答える
0

プロジェクトとMSBuildをVisualStudio2005からVisualStudio2010に切り替えた後、同じ問題が発生しました。ただし、相対パスを使用する必要がないようにしたかったので、代わりに.NETで新しいWebパブリッシングパイプライン(WPP)を使用するように切り替えました。 4.0MSBuildコマンドラインに以下を追加します。

/p:UseWPP_CopyWebApplication=True /p:PipelineDependsOnBuild=False

これで、出力は通常に戻り、出力ディレクトリで絶対パスを使用できます。

于 2013-04-19T18:29:57.580 に答える