好吧,我找到了一种针对.NET Core 2.2的本地解决方案
这个想法是使用<include>
标签。
您可以添加<GenerateDocumentationFile>true</GenerateDocumentationFile>
您的.csproj
文件。
您可能有一个接口:
namespace YourNamespace
{
/// <summary>
/// Represents interface for a type.
/// </summary>
public interface IType
{
/// <summary>
/// Executes an action in read access mode.
/// </summary>
void ExecuteAction();
}
}
从中继承的东西:
using System;
namespace YourNamespace
{
/// <summary>
/// A type inherited from <see cref="IType"/> interface.
/// </summary>
public class InheritedType : IType
{
/// <include file='bin\Release\netstandard2.0\YourNamespace.xml' path='doc/members/member[@name="M:YourNamespace.IType.ExecuteAction()"]/*'/>
public void ExecuteAction() => Console.WriteLine("Action is executed.");
}
}
好的,这有点吓人,但是确实将预期的元素添加到中YourNamespace.xml
。
如果你建立Debug
的配置,你可以换Release
为Debug
在file
属性include
标签。
要找到正确member
的name
引用,只需打开生成的Documentation.xml
文件即可。
我还假设这种方法要求一个项目或解决方案至少要构建两次(第一次创建一个初始XML文件,第二次将元素从其复制到自身)。
好的一面是Visual Studio会验证复制的元素,因此使文档和代码与接口/基类等保持同步(例如,参数名称,类型参数的名称等)要容易得多。
在我的项目中,我最终同时使用了<inheritdoc/>
(对于DocFX)和<include/>
(用于发布NuGet程序包并在Visual Studio中进行验证):
/// <inheritdoc />
/// <include file='bin\Release\netstandard2.0\Platform.Threading.xml' path='doc/members/member[@name="M:Platform.Threading.Synchronization.ISynchronization.ExecuteReadOperation(System.Action)"]/*'/>
public void ExecuteReadOperation(Action action) => action();