忽略特定檔案名稱
今天遇到一個問題,編譯檔案後進行 StyleCop 檢查時出現:
TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs(1,1)
TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs(1,1)
TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs(1,1)
看起來是自動產生的檔案,但是卻會造成 StyleCop 檢查失敗,
這時候可以手動加上 StyleCop 忽略檔案規則。
到 StyleCop 安裝目錄底下 (預設安裝路徑是 C:\Program Files (x86)\StyleCop 4.7),
使用文字編輯器開啟 Settings.StyleCop 檔案。
檔案內容預設如下:
<StyleCopSettings Version="4.3">
<GlobalSettings>
<CollectionProperty Name="DeprecatedWords">
<Value>preprocessor,pre-processor</Value>
<Value>shortlived,short-lived</Value>
</CollectionProperty>
</GlobalSettings>
<Parsers>
<Parser ParserId="StyleCop.CSharp.CsParser">
<ParserSettings>
<CollectionProperty Name="GeneratedFileFilters">
<Value>\.g\.cs$</Value>
<Value>\.generated\.cs$</Value>
<Value>\.g\.i\.cs$</Value>
</CollectionProperty>
</ParserSettings>
</Parser>
</Parsers>
<Analyzers>
<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
<AnalyzerSettings>
<CollectionProperty Name="Hungarian">
<Value>as</Value>
<Value>do</Value>
<Value>id</Value>
<Value>if</Value>
<Value>in</Value>
<Value>is</Value>
<Value>my</Value>
<Value>no</Value>
<Value>on</Value>
<Value>to</Value>
<Value>ui</Value>
</CollectionProperty>
</AnalyzerSettings>
</Analyzer>
</Analyzers>
</StyleCopSettings>
找到其中一段 CollectionProperty ,預設已經有三行設定,
新增一行,如下:
<Value>\.g\.cs$</Value>
<Value>\.generated\.cs$</Value>
<Value>\.g\.i\.cs$</Value>
<Value>TemporaryGeneratedFile_.*\.cs$</Value>
存檔後,重新編譯一次專案,OK,沒有錯誤訊息了。
補充,如果想要忽略 *.pb.cs 這樣的規則,
加入下列這一行:
<Value>\.pb\.cs$</Value>
Reference
TemporaryGeneratedFile_[guid] in /obj/debug breaking build
2014年8月5日 星期二
2014年7月25日 星期五
C# StyleCop System using directives must be placed before all other using directives.
一般我們的專案會像這樣,使用了很多的 using 參考。
這時候我們就會使用 Visual Stdio 內建的功能,對 Using 進行整理。
右鍵 > 組合管理 Using > 移除和排序
移除和排序後的樣子,很方便對吧!
但是呢?StyleCop 出來抱怨了,
「System using directives must be placed before all other using directives.」。
也就是說,所有 System 相關的 using 必須放在最前面。
從前面的圖片可以看的出來,SocketLibaray 比 System 的字母順序還前面,所以排在 System 的前面了。
這樣我們就不能用 Visual Stdio 內建的排序了嗎?只能手動調整了嗎?
放心,其實 Visual Stdio 是有這個設定的,在功能選單內,
選項 > 文字編輯器 > C# > 進階 > 組合管理 Using > 排序 Using 時先放置 'System' 指示詞
將這個選項打勾,然後按下確定。
接著再對剛剛的 using 做一次排序,
噹噹!依照我們希望的順序,System 在前面了喔!
這麼一來 StyleCop 也不會報錯了呢。
C# StyleCop 忽略特定錯誤訊息
雖然 StyleCop 蠻方便的,但是有時候難免會出現誤報,
像是這一行 IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
ipHostInfo 就被判定為匈牙利命名法 (Hungarian notation),
這時候只能換另一個變數命名,
或者,使用 Suppress 忽略掉這個錯誤訊息。
在這個函式上方加上這一行
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Reviewed.")]
就可以忽略掉這一個錯誤訊息。
至於每一次 StyleCop Rule 的 Suppress 要怎麼寫,
可以參考 StyleCop Rules Documentation ,
除了 Rule Suppressions 的說明之外,每個 Rule 最下方也有該 Rule 的Suppress 方法。
像是這次遇到的 SA1305 FieldNamesMustNotUseHungarianNotation 就是從這裡來的。
Reference
StyleCop
StyleCop Rules Documentation
像是這一行 IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
ipHostInfo 就被判定為匈牙利命名法 (Hungarian notation),
這時候只能換另一個變數命名,
或者,使用 Suppress 忽略掉這個錯誤訊息。
在這個函式上方加上這一行
[SuppressMessage("StyleCop.CSharp.NamingRules", "SA1305:FieldNamesMustNotUseHungarianNotation", Justification = "Reviewed.")]
就可以忽略掉這一個錯誤訊息。
至於每一次 StyleCop Rule 的 Suppress 要怎麼寫,
可以參考 StyleCop Rules Documentation ,
除了 Rule Suppressions 的說明之外,每個 Rule 最下方也有該 Rule 的Suppress 方法。
像是這次遇到的 SA1305 FieldNamesMustNotUseHungarianNotation 就是從這裡來的。
Reference
StyleCop
StyleCop Rules Documentation
C# 程式碼風格分析 StyleCop 與 Visual Studio Express 整合
首先到 http://stylecop.codeplex.com/ 網站下載並安裝 StyleCop,
安裝過程就下一步按到底就完成了。
如果你使用的 Visual Studio 不是 Express 版本 (Professional, Premium, Ultimate...etc),
這時候在 Visual Studio > 方案總管 裡面對著專案按下右鍵,就會出現 Run StyleCop,
詳細的說明請參考這篇文章 [Tool]程式碼風格分析-StyleCop。
因為 Visual Studio Express 不支援任何 UI 方面的擴充功能 (Extensions),
所以就算安裝完之後,是不會有任何變化的。
這時候可以手動在專案檔 (.csproj) 上設定,讓每一次建置 (Build) 的時候都執行一次 StyleCop 檢查。
在專案檔裡面加上這一行:
<Import Project="$(ProgramFiles)\MSBuild\StyleCop\v4.7\StyleCop.targets" />
這麼一來,這個專案每次建置的時候,就會進行 StyleCop 檢查,錯誤訊息也會出現在 Visual Studio 的錯誤清單讓你檢視。當然,「檢示錯誤訊息」功能是不存在的,只能用錯誤代號自行查詢了。
延伸問題:
一、每個專案都要手動加上設定。
這點可以用靠修改範本讓新建立的專案都先加上設定,舊的就只能一個一個改。
二、如果這個專案在另一個沒有安裝 StyleCop 的電腦上建置,那專案就會建置失敗。
雖然可以透過 NuGet 安裝 StyleCop 來解決這個問題,但是考慮到 StyleCop Rule 的一致性,還是建議統一安裝 StyleCop。
Reference
StyleCop
Intergrating StyleCop with Visual Studio Express
[Tool]程式碼風格分析-StyleCop
訂閱:
文章 (Atom)