diff --git a/src/Docfx.Common/Loggers/WarningCodes.cs b/src/Docfx.Common/Loggers/WarningCodes.cs index ed8a4091cff..17c8bb664c8 100644 --- a/src/Docfx.Common/Loggers/WarningCodes.cs +++ b/src/Docfx.Common/Loggers/WarningCodes.cs @@ -25,6 +25,12 @@ public static class Build public const string InvalidTocInclude = "InvalidTocInclude"; } + public static class Metadata + { + public const string FailedToResolveAnalyzer = "FailedToResolveAnalyzer"; + public const string FailedToLoadAnalyzer = "FailedToLoadAnalyzer"; + } + public static class Markdown { public const string InvalidInclude = "InvalidInclude"; diff --git a/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs b/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs index 63265ae8007..60e8b4be1e3 100644 --- a/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs +++ b/src/Docfx.Dotnet/DotnetApiCatalog.Compile.cs @@ -147,7 +147,22 @@ await LoadCompilationFromProject(project.AbsolutePath) is { } compilation) { Logger.LogWarning($"There is .NET Analyzer that can't be resolved. " + $"If this analyzer is .NET Source Generator project. " - + $"Try build with `dotnet build -c Release` command before running docfx. Path: {unresolvedAnalyzer.FullPath}"); + + $"Try build with `dotnet build -c Release` command before running docfx. Path: {unresolvedAnalyzer.FullPath}", + code: WarningCodes.Metadata.FailedToResolveAnalyzer); + } + + foreach (var analyzer in project.AnalyzerReferences.OfType()) + { + analyzer.AnalyzerLoadFailed += (sender, e) => + { + var analyzerName = analyzer.Display; + var errorCode = e.ErrorCode; + var referencedCompilerVersion = e.ReferencedCompilerVersion; + + Logger.LogWarning($"Failed to load .NET Analyzer. AnalyzerName: {analyzerName}, ErrorCode: {errorCode}, ReferencedCompilerVersion: {referencedCompilerVersion}", + code: WarningCodes.Metadata.FailedToLoadAnalyzer); + }; + } }