嵌套类没有命名空间

时间:2014-08-01 10:51:36

标签: c# namespaces fxcop

我正在编写一个自定义FxCop规则,用于检查Exceptionclasses是否从正确的Exception-namespaces继承。这个检查本身很完美。但是,在我的测试用例中,我遇到了一些奇怪的东西。

namespace MyNamespace.IO
{
    [TestClass]
    public class ExceptionsShouldOnlyInheritFromCorrectNamespacesTests
    {
        [TestMethod]
        public void TestExceptionInheritanceNamespace()
        {
            RuleAssert.AssertProblemsAreEqualToExpectedProblems<ExceptionsShouldOnlyInheritFromCorrectNamespaces, ExceptionInhertTestClass>();
        }    
    }

    namespace Something
    {
        [CaRuleTestClass]
        public class ExceptionInhertTestClass
        {
            public class MyFirstException : SystemException
            {                   
            }

            public class MySecondException : FileNotFoundException
            {                   
            }

            [ExpectedProblem]
            public class MyWrongException : AbandonedMutexException
            {                   
            }
        }
    }
}

以上代码演示了设置。如您所见,我有一个嵌套命名空间(这仅适用于testpurposes)。在这里有一个主类ExceptionInhertTestClass,它包含三个由自定义FxCop规则运行的测试类。

此自定义规则检查类的名称空间,并将其与其继承的类进行比较。

调试规则时,我注意到MySecondException - 类上存在意外问题。根本没有找到这个类的命名空间。图为:

Picture

为什么这个类的'namespace-property没有值,显然应该有?

1 个答案:

答案 0 :(得分:1)

实际上,它是否应该具有命名空间是有争议的。根据{{​​3}},嵌套类型的元数据实际上应该具有空命名空间(参见第223页的第11点)。也就是说,FxCop API不一定需要以与规范相对应的方式公开元数据。但是,由于Microsoft没有为FxCop规则创建提供SDK,因此无法知道此处可能包含的内容。

换句话说,既然您知道嵌套类型的命名空间没有以这种方式公开,那么您应该爬上它的声明层次结构,以便在需要时找到合适的命名空间。 :)