使用指令,命名空间和程序集参考 - 所有这些都与StyleCop混在一起!

时间:2010-06-18 13:25:32

标签: c# assemblies namespaces using 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抱怨使用指令不在命名空间内。

将uses放在命名空间内会产生“MoledType”无法识别的错误。

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

  

'assembly'不是有效属性   此声明的位置。有效   属性位置   声明是'类型'。所有属性   在这个区块中将被忽略。

似乎我已经尝试了所有的布局,但无济于事 - 无论是解决方案都无法构建,嘲讽无效或StyleCop会抱怨!

有没有人知道如何设置这些以便一切都快乐?或者在这种情况下我是否必须忽略StyleCop警告?

3 个答案:

答案 0 :(得分: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...
}

希望有人会觉得这很有用!

答案 1 :(得分:6)

典型的模式是将所有程序集级别属性放在AssemblyInfo.cs文件中。通常,此文件根本没有任何名称空间元素,并且所有程序集属性都使用完全限定名称定义。

答案 2 :(得分:1)

与Jason达成一致,你应该把它放在AssemblyInfo.cs中(Project - > Properties)。

但是!请注意您在AssemblyInfo.cs文件中放置的内容。假设您要使用:

[assembly: InternalsVisibleTo("ClassA")]

如果将其放在AssemblyInfo.cs中,则ClassA将显示项目的所有内部类。这并不总是需要。