2011-08-08 66 views
12

我正在廣泛使用DataVisualization.Charting.Chart,並且大部分工作正常。但是,我一直在經常運行代碼分析,並且處理所有我自己的警告。但是,在使用圖表的* .Designer.cs文件中大約有30個CA2000(對象沒有沿着所有的異常路徑)。 Designer文件生成幾乎所有的圖表代碼,幾乎所有圖表元素都實現了IDisposable。我在項目首選項中選中了「抑制生成代碼的結果」,但它仍然可以。禁用/修復.Designer.cs文件中的代碼分析警告

有什麼辦法來解決這個問題,而不必手動創建圖表對象,並沒有禁用代碼分析在類的代碼的其他人呢?有沒有一種方法可以禁用所有.Designer.cs文件?或者,是否有解決方案通過使設計器代碼處理來正確刪除這些警告?

+0

看到這個線程http://stackoverflow.com/questions/4164928/how-to-suppress-code-analysis-on-generated-code,它有一些好主意,即使它們針對FxCop的人「XMLForDummies」說CodeGo.net,嘗試與代碼分析相同,它值得一看/嘗試。 –

+0

因爲這已經在一個Designer.cs文件中,它已經包含了這些小東西。顯然,VS代碼分析甚至檢查了Designer文件,這對我來說有點荒謬;似乎他們應該是解決這些問題的人,而不是我!感謝您的鏈接,雖然;聽起來像我不是唯一得到一些不好的代碼分析結果的人。 – drharris

+0

你應該能夠在全球壓制,全球壓制,文件,否? – BrainSlugs83

回答

2

少數幾位開發者似乎遇到了這個問題,但沒有幸運,所以+1是一個很好的問題!

一個可能的解決方案是寫的是,如果一個設計師文件中檢測到報警覆蓋的CA2000和抑制規則的方法,這裏有一個良好的開端:

Writing Custom Code Analysis Rules in Visual Studio 2010

否則看在最後的評論這個線程,MSFT工程師提登錄一個連接調用:http://blogs.msdn.com/b/codeanalysis/archive/2010/03/22/what-s-new-in-code-analysis-for-visual-studio-2010.aspx

+0

哇,我真的不想學習如何使用自檢,但它越來越像這可能是唯一的解決方案。如果沒有其他人在第二天左右流淌,我可能會接受這個。仍然希望這個難以捉摸的複選框嵌套在選項的深處。 :) – drharris

+1

好吧,所以它看起來不會太糟糕。我討厭在一堆代碼中加入一堆代碼,以便修復應該可以使用的東西,但是要比每次構建30-40個警告時丟棄更好。仍然沒有完全想出如何完成我需要做的事情,但這些鏈接應該讓我足夠多,以嘗試其餘的。再次感謝! – drharris

0

您是否嘗試過在項目的代碼分析屬性頁面中將「從生成的代碼中取消結果」屬性值更改爲true?該選項是忽略生成代碼中問題的標準機制。

也就是說,生成的代碼是將要執行的代碼,因此忽略它的違規並不一定是個好主意。鑑於CA2000的「噪音」,您可能希望考慮禁用該規則。

+2

我在第一段中提到了我沒有改進的地方。顯然爲了這個工作,需要設置'GeneratedCodeAttribute'。問題是由於Designer.cs文件是部分類,我敢打賭,該屬性不適用於設計器代碼(即它適用於我的課堂代碼,這是不可接受的)。把它關掉真的不是一個選擇...由於潛在的文件句柄鎖定和類似的問題,CA2000已經多次保存了我的後部;我的代碼太過I/O密集。希望能夠減少MSChart的噪音。 – drharris

1

我知道我遲到了這個但在這裏不用。

我猜這些警告都發出了代碼InitializeComponent方法中?如果是這樣,那麼您是否考慮過修改位於Common7 \ IDE \ ItemTemplates文件夾中的模板文件?您可以在這些方法中添加GeneratedCode屬性。由於該屬性將僅在其上設置,因此同一類中的所有其他代碼仍將通過代碼分析進行檢查。

下面是Form設計文件的一個示例:

namespace $rootnamespace$ 
{ 
    partial class $safeitemrootname$ 
    { 
     /// <summary> 
     /// Required designer variable. 
     /// </summary> 
     private System.ComponentModel.IContainer components = null; 

     /// <summary> 
     /// Clean up any resources being used. 
     /// </summary> 
     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
     protected override void Dispose(bool disposing) 
     { 
      if (disposing && (components != null)) 
      { 
       components.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     #region Windows Form Designer generated code 

     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     [System.CodeDom.Compiler.GeneratedCode("Windows Form Designer generated code", "1.0.0.0"), System.Diagnostics.DebuggerNonUserCode()] 
     private void InitializeComponent() 
     { 
      this.components = new System.ComponentModel.Container(); 
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
      this.Text = "$safeitemrootname$"; 
     } 

     #endregion 
    } 
} 
+0

但是......我們必須對團隊環境中的每個人做出這樣的改變,對吧? - 否則'[GeneratedCode]'屬性會隨機出現並消失......看起來真的很痛苦...... - 另外,爲什麼我們不能把它做到全班? – BrainSlugs83

+0

它不會消失。模板僅用於創建文檔。一旦創建文件,就可以像原來一樣共享它,就像任何其他代碼文件一樣。如果多個同事必須創建文件,那麼是的,他們每個人都需要該模板。但這是一次性的事情,它不應該是一個大問題。 – Crono

+0

此外,將生成的屬性放在類上會禁用其中每個成員的警告。我懷疑OP會想要那樣。 – Crono

1

只需在您的*了.Designer.cs文件添加一個[SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "..."]Dispose方法。

我只是做了,我也發現了VS 2012是足夠聰明,甚至重寫文件時,當一些在設計變更爲它保留下來。

+0

我不再有權訪問原始代碼庫來驗證這個,但是現在看起來好像可能有效,我想我記得在VS2010中嘗試這種方式,如果你改變了某些東西,它不會保留抑制,所以也許這是他們修復的錯誤。問題在將來! – drharris

+0

我當然記得在VS的早期版本中苦苦掙扎,所以我幾乎沒有嘗試,但它似乎工作,我希望它適用於所有情況,否則我們這裏會聽到它的消息。 – Dejan

相關問題