我正在编写一个自定义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
- 类上存在意外问题。根本没有找到这个类的命名空间。图为:
为什么这个类的'namespace-property没有值,显然应该有?
答案 0 :(得分:1)
实际上,它是否应该具有命名空间是有争议的。根据{{3}},嵌套类型的元数据实际上应该具有空命名空间(参见第223页的第11点)。也就是说,FxCop API不一定需要以与规范相对应的方式公开元数据。但是,由于Microsoft没有为FxCop规则创建提供SDK,因此无法知道此处可能包含的内容。
换句话说,既然您知道嵌套类型的命名空间没有以这种方式公开,那么您应该爬上它的声明层次结构,以便在需要时找到合适的命名空间。 :)