C# 使用指令、命名空间和程序集引用-所有这些都与StyleCop混淆!

C# 使用指令、命名空间和程序集引用-所有这些都与StyleCop混淆!,c#,assemblies,namespaces,using,stylecop,C#,Assemblies,Namespaces,Using,Stylecop,我喜欢遵守StyleCop的格式规则,以使代码简洁明了,但我最近遇到了一个问题,其中一个警告是: 必须放置所有使用指令 名称空间的内部 我的问题是,在我的一个测试类中,我有使用指令、程序集引用(用于模拟文件删除)和命名空间: using System; using System.IO; using Microsoft.Moles.Framework; using Microsoft.VisualStudio.TestTools.UnitTesting; [assembly: MoledType(

我喜欢遵守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抱怨using指令不在名称空间内

将usings放在名称空间中会导致无法识别“MoledType”的错误

将usings和assembly引用放在名称空间中会导致错误

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

似乎我已经尝试了我能做的每一种布局,但都无济于事——要么解决方案无法构建,要么模仿无法工作,要么StyleCop抱怨


有没有人知道一种方法可以让一切都开心?或者在这种情况下我必须忽略StyleCop警告吗?

两分钟后解决

我只需要将“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...
}

希望有人会发现这很有用

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

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

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

[assembly: InternalsVisibleTo("ClassA")]

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

如果您为MoledType提供完全限定的名称,并将usings移到名称中,它仍然可以使用吗?是的,这就解决了它!就在我提交了自己问题的答案后,我得到了这个评论哈哈!谢谢你,勒姆,非常感谢=)干得好,这件事毁了我一天的大好时光!刚开始使用StyleCop,我还在适应它对这些事情的固执己见