我喜欢遵守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警告?
答案 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将显示项目的所有内部类。这并不总是需要。