2012-01-18 96 views
1

我有超過100個c#項目的解決方案。我們總是爲所有程序集製作CopyLocal選項以避免一些問題。有時候一些開發人員使用CopyLocal選項在程序集文件中選擇True。這會在以後運行軟件時產生問題MS Build fail CopyLocal True

如果CopyLocal選項爲True,是否有可能使構建活動失敗?

我們正在使用MS Build和Cruise控制網自動化構建過程。

+0

這是一個XY問題。必須處理CopyLocal = False的項目文件對於需要測試其代碼的開發者來說非常痛苦。所以他們當然會一遍又一遍地改變設置,忘記把它放回去。可能是故意的,因爲他們厭倦了這種麻煩。構建失敗只會帶來更多的麻煩。使其適用於該設置。 – 2012-01-18 18:01:48

+0

根據主席的回答,你可以做你想問的問題。但是爲了讀取每個文件的值,爲什麼不把它重置爲'false'呢?或者我在這裏錯過了什麼? – mickeyf 2012-01-18 22:03:45

回答

1

簡答:是!

我不是MSBuild專家,但我知道如何與NAnt做到這一點。這非常簡單,並且與MSBuild實現相同的結果應該沒有太大的區別。這是過程:

  1. 解析解決方案文件以獲取解決方案中包含的所有項目文件的路徑。不幸的是,.sln文件不是xml,而是無論如何都是結構化的。
  2. 對於每個項目文件:解析項目文件以獲取項目的所有引用並檢查CopyLocal = True。如果有任何:失敗。由於.csproj文件是xml,因此可以通過XPath表達式輕鬆完成。對於CopyLocal集的引用設置爲True
count(/Project/ItemGroup/Reference/Private[text()="True"]) 

對於項目引用:

count(/Project/ItemGroup/ProjectReference/Private[text()="True"]) 

如果結果大於0,你有CopyLocal集引用到True,所以構建失敗。 陷阱:請注意,如果節點Private缺失,CopyLocal也被認爲是True