6

コードをわかりやすくするために、StyleCop の書式設定規則に従うのが好きですが、最近、次の警告の 1 つに問題がありました。

すべての using ディレクティブは、名前空間内に配置する必要があります。

私の問題は、ディレクティブ、アセンブリ参照 (ファイルの削除をモックするため)、および名前空間を使用して、テスト クラスの 1 つでジャグリングしていることです。

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 は using ディレクティブが名前空間内にないことについて不平を言います。

usings を名前空間内に配置すると、「MoledType」が認識されないというエラーが発生します。

using とアセンブリ参照の両方を名前空間内に配置すると、エラーが発生します

「アセンブリ」は、この宣言の有効な属性の場所ではありません。この宣言の有効な属性の場所は「type」です。このブロックのすべての属性は無視されます。

できる限りすべてのレイアウトを試しましたが、役に立たなかったようです-ソリューションが構築されないか、モックが機能しないか、StyleCopが文句を言います!

すべてが幸せになるようにこれらを設定する方法を知っている人はいますか? または、この場合、StyleCop の警告を無視する必要がありますか?

4

3 に答える 3

11

2分後に解決!

「MoledType」のフル パスをアセンブリ リファレンスに入れる必要がありました。つまり、次のように using ディレクティブを使用して名前空間の外に残すことができます。

[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...
}

うまくいけば、誰かがこれが役に立つと思うでしょう!

于 2010-06-18T13:31:22.177 に答える
6

典型的なパターンは、すべてのアセンブリ レベルの属性を AssemblyInfo.cs ファイル内に配置することです。通常、このファイルには名前空間要素がまったくなく、すべてのアセンブリ属性が完全修飾名を使用して定義されています。

于 2010-06-19T16:37:02.623 に答える