3

我們有許多大型解決方案,並且根據不同的項目類型有許多規則集文件。例如,我們有:含自動選擇正確的CodeAnalysis規則集

  • 一個SharePoint Rulesset:

    • 微軟所有規則
    • MSOCAF規則
    • SPDisposeChecker規則
    • 一些自定義規則
  • 測試項目規則設置

    • 微軟
    • 許多測試具體規則類似TypeMock TestLint
    • 一些自定義規則
    • 所有規則
    • 殘疾人數命名指導規則(使用下劃線例如)
  • 標準規則集

    • 微軟所有規則
    • 一些自定義規則

我喜歡它,如果代碼分析能夠自動選擇根據項目類型的正確設置。

我還沒有找到完成此操作的理想方法。事情我會考慮:

  • 放一個目標在構建服務器的MSBuild的文件夾,其導出根據的具體構建目標的存在(議員)
  • 指定CodeAnalayis規則中的每個文件的項目類型文件每個項目類型的目標文件(yuk)
  • 創建一個自定義目標文件並將其包含在每個項目中,在每個項目中設置一個屬性以選擇正確的項目類型。 (yuk)
  • 修改規則本身以瞭解它們是否處於正確的上下文環境中(可能適用於 自定義規則,對於默認規則不可行)。

我們目前正在做什麼:

  • 手動指定規則集的每一個項目。

我很樂意聽到的想法,更好的解決方案...

回答

1

我找到了適用於大多數項目類型的解決方案。許多由Microsoft提供的默認Msbuild目標包括一個選項,通過將有問題的目標放置在Msbuild文件夾結構中的特定文件夾中來加載BeforeTargets和Aftertargets。

我將一個目標文件放到這些文件夾中(根據項目類型預期的方式命名,這些文件往往會從項目類型到項目類型不同),我指定默認的CodeAnalaysis.rules文件。該項目仍然可以覆蓋這些,但是如果它不使用默認值。

的Sharepoint例如尋找這個文件:

$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\SharePointTools\Custom.After.Microsoft.VisualStudio.SharePoint.targets

這些引用存儲在性能的MSBuild如$(CustomAfterSharePointTargets),你可以擴展或覆蓋,如果想要的。

我的解決方案是建立在upon this featurethis feature

我提出了一個請求,以在Visual Studio 11中更加標準化這個。Please vote for it

1

另一種方法是將替代或者代碼分析目標文件或者一個版本允許你的推理建設任務。就我個人而言,我不會是這樣的粉絲,因爲截取點對我的口味來說太隱蔽了,但是ymmv ......

如果這是一個產品將由一個團隊保持一段時間,我可能會選擇你的第三個選項的東西。另一方面,如果這是針對代碼庫最終會轉移到另一個團隊(無論是內部還是外部)的項目,那麼我會選擇可以通過Visual Studio UI完成的任務。不幸的是,這意味着項目特定的規則集選擇。唯一的好消息是,有一個用戶界面,可以在給定的解決方案中對所有項目進行管理(可以從Analyze ... Configure Solution Analysis for Solution菜單訪問)。

+0

我知道管理解決方案的事情,但由於我們有多個項目團隊,我寧願有一個可以管理自己的解決方案。不正確的規則集,缺少的規則集,更改的規則集都存在太多問題。我沒有觸及默認目標文件,它在服務包和修補程序中隱藏太多,太容易丟失。 – jessehouwing 2012-04-17 19:31:56