有没有办法引用xml注释以避免重复它们?

时间:2010-06-22 08:59:28

标签: c# .net visual-studio visual-studio-2008

这根本不是什么大事,但如果解决了,那将会非常有用。

当我重载方法等时,有时xml注释完全相同,有1或2个param名称。我必须将注释复制/粘贴到每个重载方法,它们是相同的。但是,有时候,如果我更新其中一个并忘记返回并将其复制/粘贴到所有其他方法,这可能会导致有关该方法的误导信息。如果有很多重载方法,这可能非常耗时并且容易出错。

所以我想知道是否有一种方法可以将注释存储在一个地方(比如变量),我可以简单地引用它。这样,一个变化将反映在所有相关的公司中。

以下是一个例子:

    /// <summary>
    /// Go and do something
    /// </summary>
    public void DoSomething()
    {
        DoSomething(true, "Done something");
    }

    /// <summary>
    /// Go and do something
    /// </summary>
    /// <param name="doIt">whether it should be done or not</param>
    public void DoSomething(bool doIt)
    {
        DoSomething(doIt, "Done something");
    }

    /// <summary>
    /// Go and do something cool
    /// </summary>
    /// <param name="doIt">whether it should be done or not</param>
    /// <param name="doneMessage">message to show once done</param>
    public void DoSomething(bool doIt, string doneMessage)
    {
        if (doIt)
            Console.WriteLine(doneMessage);
    }

正如你所看到的,所有的评论是相同的,除了我决定对最后一个进行修正,以便“去做一些很酷的事情”。现在我必须去改变这是所有其他方法评论。

干杯。

4 个答案:

答案 0 :(得分:3)

根据这些规范:

http://msdn.microsoft.com/en-us/library/5ast78ax.aspx

XML注释没有设定标准;该页面上显示的只是“推荐”。在推荐的标签中,没有这样的功能。但是,XML文档工具很乐意接受以下内容而没有任何警告:

/// <summary id="30">foo</summary>
void bar();

/// <summary id="30"/>
void bar(int baz);

这对您是否有用取决于您对编译器吐出的XML文件的具体操作。不幸的是,像Intellisense(代码完成和in-IDE工具提示等)。不会做任何事。

编辑:尝试<include>,如http://msdn.microsoft.com/en-us/library/9h8dy30z.aspx中所述。它有点重量级,因为它需要一个单独的文件,但如果你的文档非常庞大,那就值得了。

答案 1 :(得分:2)

标准XML注释标记中没有此类函数。另一方面,Sandcastle Help File Builder实现了您正在寻找的<inheritdoc/>

答案 2 :(得分:1)

如果你有一个界面,你可以参考其他方法中的一种方法,如:

interface ISomeInterface
{
    /// <summary>Handles this and that.</summary>
    void SomeMethod();

    /// <summary><see cref="ISomeInterface.SomeMethod()"/></summary>
    /// <param name="i">Param blabla.</param>
    void SomeMethod(int i);
}

class SomeClass : ISomeInterface
{
    /// <summary><see cref="ISomeInterface.SomeMethod()"/></summary>
    public void SomeMethod() { }

    /// <summary><see cref="ISomeInterface.SomeMethod(int)"/></summary>
    public void SomeMethod(int i) { }
}

答案 3 :(得分:0)

叫我傻,但文档范围内的搜索和替换Go and do something加上认真使用 Alt + R Alt + A 可能会使这成为一个有争议的问题。一次编辑 - 好吧,至少输入一次。

@ Reinderien的回答是有用的......但在利用IntelliSense或标准处理工具的目标不是很有帮助。

@Peter Lillevold的答案也是内容丰富而且我觉得它更冷,因为它说SHFB处理......但仍然没有智能感知。

@Paw Baltzersen的答案可以被使用而不管使用界面并且很诱人......但是也没有使IntelliSense正确。

我喜欢在可能的情况下避免搜索和替换,但在这里获取IntelliSense通常是我的第一个问题。