我有幾個長時間運行的自定義構建任務。但是,它看起來是Visual Studio,它在UI線程上運行msbuild任務,導致IDE掛起。Msbuild問題
我在谷歌上搜索了一下,我發現的最好的東西是一些錯誤報告,其中包含響應「哦,是的,這是一個問題,我們稍後可能會修復它」。
http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/3289eb7d-7989-4350-8c43-02bf9913edbd/。
所以,我決定修復它爲我的自定義任務:
- 當他們的Visual Studio中運行檢測。
- 在後臺線程上運行任務(如果它們是
- 向UI線程添加「MsgWaitForMultipleHandles/Custom消息泵」以在運行時保持UI響應。
這似乎工作。現在我可以運行我的版本而不會凍結IDE。
在任何情況下,這帶來了幾個問題:
這是安全的呢?視覺工作室是一個巨大的事情。如果我這樣做,我會遇到任何重入問題嗎?這些重入問題會導致世界的結束,還是我可以忽略它們而忽略它們。
我使用this post中列出的技術檢測Visual Studio。基本上,我將「BuildingInsideVisualStudio」屬性的值分配給任務中的一個屬性,我在Execute()方法中檢查該屬性。如果這是真的,那麼我使用多線程行爲,否則我只是使用順序行爲。然而,這要求每個使用該任務的目標將額外的goo放入msbuild文件中以避免糟糕。理想情況下,我希望「不吸吮」是沒有特殊配置的正常行爲。有什麼方法可以檢測我的任務的Execute()方法中的visual studio嗎?我可以在任務實現中讀取項目屬性而無需自定義編輯XML嗎?我可以以某種方式詢問主機對象嗎?
謝謝。
我讀了「宇宙的盡頭」部分的問題,disapointed –
哇。你讓你的開發者經歷一個長時間的構建週期? –
我猜這是諷刺嗎?在任何情況下....「長時間運行」意味着當IDE被阻塞時,不會畫的東西與它響應時的畫面不同。長的定義可能會發生顯着變化。我們的完整版本需要大約5分鐘,這並不慢。我上一份工作的完整版本花了大約半天時間。我也參與了一些需要幾個構建實驗室來在一天內構建產品的項目。所以,不,我們不會讓我們的開發人員進行長時間的構建。但是我希望在我的項目上工作的人能夠高效地使用他們的工具。沒有響應==沒有生產力。 –