SauceControl.InheritDoc
0.1.0
Prefix Reserved
See the version list below for details.
dotnet add package SauceControl.InheritDoc --version 0.1.0
NuGet\Install-Package SauceControl.InheritDoc -Version 0.1.0
<PackageReference Include="SauceControl.InheritDoc" Version="0.1.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add SauceControl.InheritDoc --version 0.1.0
#r "nuget: SauceControl.InheritDoc, 0.1.0"
// Install SauceControl.InheritDoc as a Cake Addin #addin nuget:?package=SauceControl.InheritDoc&version=0.1.0 // Install SauceControl.InheritDoc as a Cake Tool #tool nuget:?package=SauceControl.InheritDoc&version=0.1.0
This MSBuild Task takes a different approach from other documentation post-processing tools. By integrating with MSBuild, it has access to the exact arguments passed to the compiler, including assembly references and the output assembly and XML documentation file paths. As it processes inheritdoc
elements, it is able to more accurately resolve base types whether they come from the target framework, referenced NuGet packages, or project references. This more accurate resolution of references means it can be more clever about mapping documentation from base types and members to yours. For example, it can identify when you change the name of a method parameter from the base type’s definition and update the documentation accordingly.
How it Works
The InheritDoc Task
inserts itself between the CoreCompile
and CopyFilesToOutputDirectory
steps in the MSBuild process, making a backup copy of the documentation file output from the compiler and then processing it to replace inheritdoc
tags. The output of InheritDoc is then used for the remainder of your build process. The XML documentation in your output (bin) folder will be the processed version. If you have further steps, such as building a NuGet package, the updated XML file will used in place of the original, meaning inheritdoc
Just Works™.
This enhances the new support for inheritdoc
in Roslyn (available starting in the VS 16.4 preview builds), making it available to all downstream consumers of your documentation. When using tools such as DocFX, you will no longer be subject to limitations around inheritdoc
tag usage because the documentation will already have those tags replaced with the upstream docs.
How to Use It
Add some
inheritdoc
tags to your XML documentation comments.This tool’s handling of
inheritdoc
tags is based on the draft design document used for the new prototype Roslyn support, which is in turn based on theinheritdoc
support in Sandcastle Help File Builder (SHFB).Add the SauceControl.InheritDoc NuGet package reference to your project.
This is a design-time only dependency; it will not be deployed with or referenced by your compiled app/library.
There is no 3.
Once the package reference is added to your project, the XML docs will be processed automatically with each build.
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<InheritDocEnabled>false</InheritDocEnabled>
</PropertyGroup>
Some Examples
Consider the following C#
/// <summary>Interface IX</summary>
public interface IX
{
/// <summary>Method X</summary>
void X();
}
/// <inheritdoc />
public interface IY : IX
{
/// <summary>Method Y</summary>
void Y();
}
/// <summary>Class A</summary>
public class A : IY
{
void IX.X() { }
/// <inheritdoc />
public virtual void Y() { }
/// <summary>Method M</summary>
/// <typeparam name="T">TypeParam T</typeparam>
/// <param name="t">Param t</param>
/// <returns>Return value <paramref name="t" /> of type <typeparamref name="T" /></returns>
public virtual void M<T>(T t) { }
/// <summary>Overloaded Method O</summary>
/// <param name="s">Param s</param>
/// <param name="t">Param t</param>
/// <param name="u">Param u</param>
public static void O(string[] s, string t, string u) { }
/// <inheritdoc cref="O(string[], string, string)" />
public static void O(string[] s) { }
}
/// <inheritdoc />
public class B : A
{
/// <inheritdoc />
public override void Y() { }
/// <inheritdoc />
public override void M<TValue>(TValue value) { }
}
Once processed, the output XML documentation will look like this (results abbreviated and comments added manually to highlight features)
<member name="T:IX">
<summary>Interface IX</summary>
</member>
<member name="M:IX.X">
<summary>Method X</summary>
</member>
<member name="T:IY">
<summary>Interface IX</summary>
</member>
<member name="M:IY.Y">
<summary>Method Y</summary>
</member>
<member name="T:A">
<summary>Class A</summary>
</member>
<member name="M:A.Y">
<summary>Method Y</summary>
</member>
<member name="M:A.M``1(``0)">
<summary>Method M</summary>
<typeparam name="T">TypeParam T</typeparam>
<param name="t">Param t</param>
<returns>Return value <paramref name="t" /> of type <typeparamref name="T" /></returns>
</member>
<member name="M:A.O(System.String[],System.String,System.String)">
<summary>Overloaded Method O</summary>
<param name="s">Param s</param>
<param name="t">Param t</param>
<param name="u">Param u</param>
</member>
<member name="M:A.O(System.String[])">
<summary>Overloaded Method O</summary>
<param name="s">Param s</param>
</member>
<member name="T:B">
<summary>Class A</summary>
</member>
<member name="M:B.Y">
<summary>Method Y</summary>
</member>
<member name="M:B.M``1(``0)">
<summary>Method M</summary>
<typeparam name="TValue">TypeParam T</typeparam>
<param name="value">Param t</param>
<returns>Return value <paramref name="value" /> of type <typeparamref name="TValue" /></returns>
</member>
<member name="M:A.IX#X">
<summary>Method X</summary>
</member>
Learn more about Target Frameworks and .NET Standard.
-
.NETFramework 4.6
- No dependencies.
-
.NETStandard 2.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on SauceControl.InheritDoc:
Package | Downloads |
---|---|
PixelatedLabs.Standard
Common static analysis configuration for .NET projects. |
GitHub repositories (9)
Showing the top 5 popular GitHub repositories that depend on SauceControl.InheritDoc:
Repository | Stars |
---|---|
Azure/azure-sdk-for-net
This repository is for active development of the Azure SDK for .NET. For consumers of the SDK we recommend visiting our public developer docs at https://learn.microsoft.com/dotnet/azure/ or our versioned developer docs at https://azure.github.io/azure-sdk-for-net.
|
|
nodatime/nodatime
A better date and time API for .NET
|
|
TestableIO/System.IO.Abstractions
Just like System.Web.Abstractions, but for System.IO. Yay for testable IO access!
|
|
json-api-dotnet/JsonApiDotNetCore
A framework for building JSON:API compliant REST APIs using ASP.NET and Entity Framework Core.
|
|
saucecontrol/PhotoSauce
MagicScaler high-performance, high-quality image processing pipeline for .NET
|
Version | Downloads | Last updated |
---|---|---|
2.0.2 | 24,743 | 10/12/2024 |
2.0.1 | 126,635 | 2/8/2024 |
2.0.0 | 16,211 | 12/19/2023 |
1.4.0 | 17,656 | 11/26/2023 |
1.3.0 | 389,456 | 5/7/2021 |
1.2.0 | 1,270,961 | 12/9/2020 |
1.1.1 | 7,079 | 11/14/2020 |
1.0.0 | 49,263 | 2/16/2020 |
0.4.0 | 4,515 | 10/24/2019 |
0.3.0 | 881 | 10/4/2019 |
0.2.0 | 546 | 9/30/2019 |
0.1.0 | 1,009 | 9/27/2019 |
See https://github.com/saucecontrol/InheritDoc/releases for release-specific notes.