如何在使用Sandcastle记录命名空间时让Stylecop停止抱怨?

时间:2013-07-02 00:01:40

标签: c# stylecop sandcastle

我正在尝试按照this StackOverflow的建议来记录我的命名空间:

namespace Test
{
    /// <summary>
    /// The documentation for my namespace goes here.
    /// </summary>
    [System.Runtime.CompilerServices.CompilerGenerated]
    internal class NamespaceDoc
    {
    }

    // (other classes below...)
}

但是,将此文件添加到我的文件会导致StyleCop发出多个错误。具体来说,它抱怨文档只能在根级别包含一个类(SA1402),并且所有内部类必须在公共类之后(SA1202)。

我能够通过添加以下内容让StyleCop忽略第二个警告:

[System.Diagnostics.CodeAnalysis.SuppressMessage(
    "StyleCop.CSharp.OrderingRules", 
    "*", 
    Justification = "Hack for Sandcastle.")]

但是,我无法忽略第一个警告。我尝试应用另一个属性,但这没有做到这一点:

[System.Diagnostics.CodeAnalysis.SuppressMessage(
    "StyleCop.CSharp.Maintainability", 
    "*", 
    Justification = "Hack for Sandcastle.")]

让Sandcastle和StyleCop发挥出色的最好方法是什么?

我知道我可以更改Sandcastle帮助文件构建器中的设置以记录命名空间,但除非我需要,否则我宁愿不要因为我希望所有文档都在源代码级别可用。我也不想完全禁用这些规则,因为在大多数情况下它们 非常有用。

2 个答案:

答案 0 :(得分:1)

我认为没有开箱即用的解决方案。我认为在保持清洁的同时你能做的最好的事情就是实现你自己的StyleCop规则。您可以考虑在“SandCastle上下文”下触发规则SA1402和SA1202 的规则,除非。然后在StyleCop配置中禁用规则SA1402和SA1202。

您可以查看如何为StyleCop following this link创建规则。

答案 1 :(得分:1)

仅仅为了参考,我虽然应该记录我最终做的事情。

基本上,我刚刚为我拥有的每个命名空间创建了一个新的.cs文件(例如,FooDoc.cs命名空间的Foo,并将我的代码格式化为:

// <copyright file="FooDoc.cs" company="Bar Company">
//      Copyright (c) 2013 Bar Company. All rights reserved.
// </copyright>

namespace Foo
{
    /// <summary>
    /// Documentation here.
    /// </summary>
    [System.Runtime.CompilerServices.CompilerGenerated]
    internal class FooDoc
    {
    }
}

这有点像黑客一面,因为我基本上只是添加一个额外的文件来记录我的命名空间,但它确实让我在项目中保持100%的文档和Sandcastle兼容,而不会破坏Stylecop或其他代码我一直在使用的分析工具。