Bene, c'è una sorta di soluzione nativa che ho trovato per .NET Core 2.2
L'idea è usare <include> tag.
Puoi aggiungere il <GenerateDocumentationFile>true</GenerateDocumentationFile>tuo.csproj file di a.
Potresti avere un'interfaccia:
namespace YourNamespace
{
/// <summary>
/// Represents interface for a type.
/// </summary>
public interface IType
{
/// <summary>
/// Executes an action in read access mode.
/// </summary>
void ExecuteAction();
}
}
E qualcosa che eredita da esso:
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.");
}
}
Ok, fa un po 'paura, ma aggiunge gli elementi attesi al file YourNamespace.xml.
Se si costruisce Debugla configurazione, è possibile scambiare Releaseper l'attributo del tag.Debugfileinclude
Per trovare un corretto member's namedi riferimento generato basta aprire Documentation.xmlil file.
Presumo inoltre che questo approccio richieda la creazione di un progetto o di una soluzione almeno due volte (la prima volta per creare un file XML iniziale e la seconda per copiare elementi da esso a se stesso).
Il lato positivo è che Visual Studio convalida gli elementi copiati, quindi è molto più facile mantenere la documentazione e il codice sincronizzati con l'interfaccia / classe base, ecc. (Ad esempio nomi di argomenti, nomi di parametri di tipo, ecc.).
Nel mio progetto, sono finito con entrambi <inheritdoc/>(per DocFX) e <include/>(per la pubblicazione di pacchetti NuGet e per la convalida in 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();