Ну, є своєрідне власне рішення, яке я знайшов для .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«S , 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();