6

我喜欢遵守 StyleCop 的格式规则以使代码清晰明了,但我最近遇到了其中一个警告的问题:

所有 using 指令都必须放在命名空间内。

我的问题是我有 using 指令、一个程序集引用(用于模拟文件删除)和一个命名空间来处理我的一个测试类:

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”的错误。

将 usings 和程序集引用都放在命名空间内会产生错误

'assembly' 不是此声明的有效属性位置。此声明的有效属性位置是“类型”。此块中的所有属性都将被忽略。

似乎我已经尝试了所有可能的布局,但无济于事——要么解决方案无法构建,要么模拟不起作用,要么 StyleCop 抱怨!

有谁知道一种方法来设置这些,以便一切都快乐?还是在这种情况下我将不得不忽略 StyleCop 警告?

4

3 回答 3

11

两分钟后解决!

我只需要将“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 回答
1

同意 Jason,您应该将其放在 AssemblyInfo.cs 中(项目 - > 属性)。

但!请注意您放入 AssemblyInfo.cs 文件中的内容。说你想使用:

[assembly: InternalsVisibleTo("ClassA")]

如果你把它放在 AssemblyInfo.cs 中,项目的所有内部类对 ClassA 都是可见的。这并不总是想要的。

于 2014-05-19T08:22:39.517 回答