2012-02-01 69 views
7

我試圖爲解決方案中的所有項目創建XML文檔,即使該選項未在項目屬性中選中(這是關鍵點)。MSBUILD爲解決方案中的所有項目生成xml文檔文件(不涉及項目)

我正在使用TFS 2010 SP1,並在我的構建定義的「MSBuild Arguments」字段中嘗試使用此「/ p:TreatWarningsAsErrors = true/p:GenerateDocumentation = true」。它不會產生任何東西。

我也嘗試使用/p:DocumentationFile=foo.xml,它確實工作,但我假設該文件被最後編譯的項目覆蓋,所以我嘗試使用一個變量,而沒有運氣,我試着用

/p:DocumentationFile=$(Project).xml, 
/p:DocumentationFile=$(localProject).xml 
/p:DocumentationFile=$(localBuildProjectItem).xml 

有沒有一種方法來創建從內MSBUILD即使選項不在項目檢查了所有項目的XML文檔?

PS:是的,我已經看到另一個類似於這個線程,但我不想修改項目,這是用MSBUILD做這件事的關鍵。

感謝您的時間

+0

你有沒有找到解決方案呢?下面的一個沒有解決問題 – artfulhacker 2013-07-03 22:46:08

+0

Nop,據我所知,這是最好的,我們可以得到 – 2013-07-05 17:23:42

+0

我正在考慮一個可能的解決方案,將迭代通過sln和分別構建csproj,然後DocumentationFile = ..會工作,我看到了這一點,但我從來沒有見過這種類型的語法之前在生成腳本http://social.msdn.microsoft.com/Forums/vstudio/en-US/e46e2500-0acc-4e0f-95aa-ed282a73d2b0/get -all-csproj-files-in-build-template-when-building-sln – artfulhacker 2013-07-05 18:32:48

回答

2
  1. 打開過程模板(即:$/yourproject/BuildProcessTemplates/DefaultTemplate.xaml

  2. 向下滾動找到Compile the Project活動。

  3. 添加一個名爲DocumentationFile,類型= String,範圍新變量= Compile the Project
  4. 設置它的默認值:

    String.Format("{0}.XML", System.IO.Path.GetFileNameWithoutExtension(serverBuildProjectItem)) Compile the Project

  5. 保存更改,向下滾動到Run MSBuild for Project活動。

  6. CommandLineArguments,設置以下值: String.Format("/p:SkipInvalidConfigurations=true {0};DocumentationFile={1}", MSBuildArguments, DocumentationFile) Run MSBuild for Project

  7. 入住的變化和建設。這應該會生成文檔,即使它不是由項目設置的。

+0

我會標記這個答案,因爲我認爲它是我們可以在不修改任務的情況下得到的最好結果,似乎在msbuild任務中項目集合真的是在構建定義中選擇的解決方案而不是每個解決方案的單個項目 – 2012-02-02 06:05:30

+0

這會創建xml文件,但它不會阻止在構建包含多個項目的sln時替換文件 – artfulhacker 2013-07-03 23:03:27

相關問題