c# xml 注释,cref 不能引用 base class 中定义的方法

c# xml comment, cref can't reference method defined in base class

在我的代码库中,我在基 class 中定义了一个方法,基 class 是继承的,但该方法尚未被覆盖。将来很可能会覆盖此方法以添加到基础实现中。

我的设置看起来有点像这样:

public abstract class BaseFoo
{
    public virtual void Bar()
    {
        //default implementation
    }
}

public class RealFoo : BaseFoo
{
    //extra code, does *NOT YET* override Bar but might in the future
}

public class DependentClass
{
    /// <summary>
    /// Uses <see cref="RealFoo.Bar"/> to do some magic
    /// </summary>
    public void SomeMethod()
    {

    }
}

由于将来很可能会覆盖 Bar,因此我想在未来证明我的 xmldoc 并参考 RealFoo.Bar 而不是 BaseFoo.Bar

当我在我的代码中调用 RealFoo.Bar() 时,没有发生任何错误。当我在 cref 属性中这样做时,我收到以下警告:

Warning CS1574 XML comment has cref attribute 'Bar' that could not be resolved.

我是不是做错了什么,或者这只是 cref 的限制?

我正在使用 visual studio 2017,针对 netstandard2.0 和 net452,并且我的 csproj 中启用了 XML 文档。

您可以禁止显示此警告,但 XmlDoc 输出会将其标记为错误。

<member name="M:MyApplication.DependentClass.SomeMethod">
    <summary>
        Uses <see cref="!:RealFoo.Bar"/> to do some magic
        <!--            ^- indicates an error -->
    </summary>
</member>

或者,如果您非常确定将来要覆盖该方法,并且您打算使用 XML 输出生成文档,我会在 RealFoo as public override void Bar() => base.Bar(); 直到你想要一个新的实现。

在这种情况下,我只是静态地写 ClassName.Member,这样就可以了。

/// <summary>
/// Uses <see cref="BaseFoo.Bar"/> to do some magic
/// </summary>
public void SomeMethod()
{

}

看起来 .NET Xml-Doc 不了解继承。