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