2009-06-12 8 views
4

私はの線に沿って簡単なビルド前のイベントを含みvcprojファイルを持っている:

Helpertask.exe $(ProjectDir) 

これは、開発者のPC上で正常に動作しますが、解決策があるとき$(ProjectDir)は、MSBuildの下にあるTFS 2008ビルドサーバー上に構築されていますが、空白であるか、サーバー上の無関係なフォルダを指しています。

これまでのところ、私が管理している最適な回避策は、ハードコードする代わりに、開発者およびサーバーのパスです:

if exist C:\DeveloperCode\MyProject HelperTask.exe C:\DeveloperCode\MyProject 
if exist D:\BuildServerCode\MyProject HelperTask.exe D:\BuildServerCode\MyProject 

このハックはポスト -buildの手順で動作しますが、それは事前のために動作しません。 -buildステップ(プレビルドタスクはMSBuildの下では何もしません)

修正プログラムや回避策についてご意見はありますか?私はほとんど髪が残っている!

答えて

0

私はちょうどこれに問題を抱えていた - 私は多くの異なるアプローチを試みたが、それらはすべて不思議な方法で失敗した。

$(ProjectDir)が正しく動作するようになると、ビルド前のステップでコマンドの実行が中止されました(上下のエコーコマンドを追加しました - 両方実行されましたが、なぜそれが失敗したかを示すために何らかの種類の出力が生成された)。

MSBuildが笑っている場合、これがドッジーなサーバーなのかどうかわかりません。

私は今放棄しました。ビルドサーバーに大きな蹴りを与え、不具合を修正しました。このツールをオフラインで(手動で)実行し、使用するビルドサーバーの結果をチェックインします。 Visual Studioと同じ方法でソリューションを実行するだけであれば、環境を完全に異なった方法で設定できます(ソリューション変数から異なるパスが出てくるので、異なるフォルダにリダイレクトされるのであなたがどこにいるのか分からないなど)

0

私は問題は、サーバのワークスペースを構築するのがおそらく適切に初期化されていないと思います。

+0

私のために働きました。私はそれを数週間前、今日また見ました。 "echo $(ProjectDir)"をビルドステップに追加すると、正しい値が出力され、再び機能するようになりました。 ほとんど神秘的です。 壊れていた$(ProjectDir)ではないと思われ始めましたが、ビルド前のステップは実行されていませんでした(ビルド前のステップを実行していることを記録しますが、ビルドはステップコマンドが実行されていない状態で) –

1

あなたの問題は、アイテムがどのように初期化されているかに関係していると思います。ビルドプロセスで作成されたファイルでは、これらを動的項目として宣言する必要があります。動的項目は、ターゲット内で定義されたもの、またはCreateItemタスクを使用して定義されたものです。MSBuild: Item and Property Evaluation

Sayed Ibrahim橋見

のMy Book:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

+0

Thanks Sayed。問題は、新しいファイルを作成しているのではなく、作成するプログラムが実行されていないことだけです。ある時点では、$(ProjectDir)は完全に間違っていましたが、プロジェクトを手伝って問題が消えてしまったため、これは正しく構成されていなかったに違いありません。このシンプルなものを稼働させようと一日のうちに無駄な時間を無駄にしてしまったので、コード生成ステップをビルドから撤去しました。これは、ソースファイルを変更するたびに、とにかく出現する)。 –

0

私は既存のプロジェクトを分岐して$(PROJECTDIR)は、新たに分岐鎖のコードに古いディレクトリを保ちました。しかし、私はコンパイルエラーがあったからです。ソリューション内のすべてのプロジェクトがエラーなくコンパイルされると、$(ProjectDir)が正しいパスに変更されました。

カルロスA Merighe

7

$(MSBuildProjectDirectoryは)奇妙なことは、それが断続的に問題だということです

関連する問題