2010-06-18 58 views
5

我喜歡堅持了StyleCop的格式規則,使代碼漂亮和明確的,但我最近有一個問題,它的警告之一:使用指令,名稱空間和彙編參考 - 所有與StyleCop混淆!

所有使用指令必須置於 的命名空間內。

我的問題是,我有使用指令,裝配引用(嘲笑文件刪除),和一個命名空間在我的測試類的一個兼顧:

using System; 
using System.IO; 
using Microsoft.Moles.Framework; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
[assembly: MoledType(typeof(System.IO.File))] 

namespace MyNamespace 
{ 
//Some Code 
} 

上述允許測試是運行良好 - 但StyleCop抱怨使用指令不在命名空間內。

將用途放入命名空間會導致無法識別「MoledType」的錯誤。

把兩者usings和命名空間內的組件參考給出了錯誤

「組件」不是此聲明有效的屬性 位置。這個 聲明的有效 屬性位置是'type'。該塊中的所有屬性 將被忽略。

看來我已經嘗試過所有的佈局,我可以但無濟於事 - 要麼解決方案不會建立,嘲笑將無法正常工作或StyleCop抱怨!

有沒有人知道一種方法來設置這些,讓一切都開心?或者我會不得不在這種情況下忽略StyleCop警告?

+1

如果您給MoledType的完全限定名稱,並將用途移入namesapce,它仍然是comaplain? – 2010-06-18 13:29:08

+0

是的,它固定它!剛剛提交了我自己的問題的答案後,我得到了這個評論哈哈!非常感謝=) – Jack 2010-06-18 13:34:26

回答

10

兩分鐘後解決!

我只是需要把「MoledType」的完整路徑在裝配基準 - 這意味着我可以與使用指令離開它的命名空間之外的內部,像這樣:

[assembly: Microsoft.Moles.Framework.MoledType(typeof(System.IO.File))] 
namespace MyNamespace 
{ 
using System; 
using System.IO; 
using Microsoft.Moles.Framework; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 

// Some Code... 
} 

希望someone'll找到這有用!

+2

正如我的評論說:) – 2010-06-18 13:32:02

+0

哈哈,你不能教這樣的時機=) – Jack 2010-06-18 13:42:14

+0

好工作這一個是毀了我一天大時間!剛開始使用StyleCop,我仍在調整對這些事情的看法如何 – 2014-10-03 20:40:58

5

典型模式是將所有Assembly級別屬性放在AssemblyInfo.cs文件中。通常,該文件根本沒有任何名稱空間元素,並且所有的程序集屬性都是使用完全限定名稱定義的。

1

與Jason同意,您應該將其放在AssemblyInfo.cs中(項目 - >屬性)。

但是!注意你放在AssemblyInfo.cs文件中的內容。假設你想使用:

[assembly: InternalsVisibleTo("ClassA")] 

如果你把它放在AssemblyInfo.cs中,項目的所有內部類對ClassA都是可見的。這並不總是想要的。