Eh bien, il existe une sorte de solution native, que j'ai trouvée pour .NET Core 2.2
L'idée est d'utiliser <include>
tag.
Vous pouvez ajouter <GenerateDocumentationFile>true</GenerateDocumentationFile>
votre.csproj
fichier.
Vous pourriez avoir une interface:
namespace YourNamespace
{
/// <summary>
/// Represents interface for a type.
/// </summary>
public interface IType
{
/// <summary>
/// Executes an action in read access mode.
/// </summary>
void ExecuteAction();
}
}
Et quelque chose qui en hérite:
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, c'est un peu effrayant, mais cela ajoute les éléments attendus au fichier YourNamespace.xml
.
Si vous créez une Debug
configuration, vous pouvez échanger Release
pour Debug
l' file
attribut de include
balise.
Pour trouver une référence correcte member
, name
ouvrez simplement le Documentation.xml
fichier généré .
Je suppose également que cette approche nécessite qu'un projet ou une solution soit construit au moins deux fois (la première fois pour créer un fichier XML initial et la deuxième fois pour en copier des éléments sur lui-même).
Le bon côté est que Visual Studio valide les éléments copiés, il est donc beaucoup plus facile de synchroniser la documentation et le code avec l'interface / la classe de base, etc. (par exemple les noms d'arguments, les noms de paramètres de type, etc.).
À mon projet, j'ai fini avec <inheritdoc/>
(pour DocFX) et <include/>
(pour la publication de packages NuGet et pour la validation chez 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();