【问题标题】:Using Directives, Namespace and Assembly Reference - all jumbled up with StyleCop!使用指令、命名空间和程序集参考——所有这些都与 StyleCop 混为一谈!
【发布时间】:2011-03-05 10:32:38
【问题描述】:

我喜欢遵守 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 警告?

【问题讨论】:

  • 如果您为 MoledType 提供完全限定的名称,并且仅将 usings 移动到命名空间中,它仍然是 comaplain 吗?
  • 是的,修复了它!在我提交了我自己的问题的答案后,我得到了这个评论哈哈!感谢 Leom,非常感谢 =)

标签: c# assemblies namespaces using stylecop


【解决方案1】:

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

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

[assembly: InternalsVisibleTo("ClassA")]

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      两分钟后解决!

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

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

      【讨论】:

      • 干得好,这件事毁了我的大日子!刚开始使用 StyleCop,并且仍在适应它对这些事情的看法
      猜你喜欢
      • 1970-01-01
      • 2011-02-26
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多