長時間実行しているカスタムビルドタスクがいくつかあります。しかし、Visual Studioには、UIスレッドでmsbuildタスクが実行されるため、IDEがハングしていました。Msbuildに関する質問
私はGoogleで少し検索しましたが、私が見つけた最高のものは、「ああ、それは問題です。それは後で修正するかもしれません。
http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/3289eb7d-7989-4350-8c43-02bf9913edbd/。彼らは、Visual Studioの内部で実行されているときを検出
- :
だから、私はで私のカスタムタスクのためにそれを修正することを決めました。
- バックグラウンドスレッドでタスクを実行する場合
- UIスレッドに「MsgWaitForMultipleHandles/Custom message pump」を追加して、実行中にUIを応答可能にします。
これは動作するようです。私はIDEがフリーズすることなくビルドを実行できるようになりました。いずれの場合においても
、これはいくつかの質問育っ:
を行うには、これは安全ですか?ビジュアルスタジオは大規模なものです。もし私がこれをしたら、私は再入国の問題にぶつかるのだろうか?それらの再入国の問題は、世界を終わらせるか、私はそれらを無視して逃げることができますか?
this postで概説されている技術を使用してVisual Studioを検出しました。基本的には、 "BuildingInsideVisualStudio"プロパティの値をタスクのプロパティに割り当てます。これはExecute()メソッドをチェックします。それが本当であれば、私はマルチスレッドの動作を使用します。それ以外の場合は、順次動作を使用します。しかし、これは、それぞれのターゲットが、suckynessを避けるためにmsbuildファイルに余分なgooを入れるというタスクを使用する必要があります。理想的には、特別な構成をせずに、「吸いたくない」ことを通常の行動にしたいと思います。私のタスクのExecute()メソッドの中でVisual Studioを検出できる方法はありますか?タスクの実装でプロジェクトプロパティを読むことはできますか?XMLをカスタム編集する必要はありませんか?どういうわけかホストオブジェクトを調べることはできますか?
ありがとう。
私は「宇宙の終わり」の部分の質問を読んで、disapointed –
うわー。デベロッパーに長時間のビルドサイクルをさせますか? –
私はそれが皮肉だと思いますか?いずれにしても...「長時間実行」とは、IDEがブロックされているときと、ペイントしないときとでは応答が異なるときの何かが異なることを意味します。私たちの完全なビルドは約5分かかりますが、それほど遅くはありません。私の最後の仕事で完成したビルドは約半日かかりました。また、1日で複数のビルドラボで製品をビルドする必要があるプロジェクトにも取り組んできました。だから、私たちは開発者に長いビルドを課すことはありません。しかし私は自分のプロジェクトに取り組んでいる人々がツールを生産的に使うことを望んでいます。応答していない==生産的ではありません。 –