我需要同步對構建於MsBuild中的項目之間的共享資源的訪問。在過去,當項目按順序運行並且在同一過程中時,這不是問題。但是現在,當MsBuild可以在多個線程和多個進程中運行項目構建時,我無法找到實現此目的的方法。如何同步MsBuild中的項目之間的共享資源
基本上,我想要的是當我的項目開始構建時,我可以對資源進行一些操作。當他們都結束了,我可以做另一個操作。
如果首先想到我可以實現自定義任務並讓每個項目都修改構建過程,那麼在構建之前和構建之後注入任務。但是,由於它們可以並行運行,甚至跨進程,我似乎沒有選擇權。
當試圖解決這個問題時,最接近的是當我在Microsoft.Build.Execution命名空間中找到BuildSubmission類(http://msdn.microsoft.com/zh-cn/library/microsoft.build .execution.buildsubmission.aspx)。但我無法找到任何有關如何與我的自定義任務中的這些類交互的信息。
任何類型的輸入或指針在某些方向將不勝感激!
/每
你可以更具體地瞭解你想分享的資源嗎?可能有其他解決方案。 –
那麼,資源並不是真正的單一資源,但可以說它是一個用於說明的數據庫。當構建屬於共享解決方案的一組項目時,我想確保在構建之前,到達預構建注入點的第一個項目對此數據庫執行某些操作,並且所有後續項目都瞭解它已完成,所以他們跳過這樣做。當構建會話結束時另一種方式是:在構建完最後一個項目之後,它會對數據庫執行一些其他操作,也是排他性的(其他項目不會)。 –
我可以嘗試說明另一種方式。我們讓流程成爲資源。 我們有X項目的解決方案。當構建解決方案時(在MsBuild之上使用MsBuild或VS),我們要確保在任何項目開始構建之前,關閉一個進程(「Foo.exe」),在最後一個完成構建之後,我們要保證再次啓動相同的過程。 在我們的處理中,我們擁有所有的MsBuild標準任務以及製作自定義任務的選項。我們可能希望在構建之前和構建之後通過修改BuildDependsOn屬性來注入我們的自定義任務。 –