我正在编写一个自定义FxCop规则,该规则检查Exceptionclass是否从正确的Exception-命名空间继承。此检查本身可以完美运行。但是,在我的测试用例中,我遇到了一些奇怪的事情。
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
{
}
}
}
}
上面的代码演示了该设置。如您所见,我有一个嵌套的命名空间(仅用于测试目的)。在这个主类中ExceptionInhertTestClass
,包含三个由自定义FxCop规则运行的测试类。
此自定义规则检查类的名称空间,并将其与从其继承的类进行比较。
在调试规则时,我注意到MySecondException
-class上存在意外问题。完全没有找到此类的命名空间。图片展示:
为什么该类的“名称空间属性”没有值,而显然应该有?
实际上,是否应该具有名称空间是有争议的。根据.NET CLI规范,嵌套类型的元数据实际上应具有一个空的名称空间(请参阅第223页上的第11点)。也就是说,FxCop API不一定需要以与规范相对应的方式公开元数据。但是,由于Microsoft不提供用于FxCop规则创建的SDK,因此无法知道此处可能打算做什么。
换句话说,既然您知道嵌套类型的名称空间并未以这种方式公开,那么您就应该爬升其声明层次结构以找到合适的名称空间(如果需要)。:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句