Skip to content

[Bug] Files without managed metadata break docfx #10682

@kemocca

Description

@kemocca

Unmanaged dependencies break generation of documentation process with exception:

MetadataFileNotSupportedException: PE file does not contain any managed metadata.
  at ctor(MetadataFileKind kind, string fileName, PEReader reader, MetadataReaderOptions
     metadataOptions) in MetadataFile.cs:245
  at ctor(string fileName, PEReader reader, MetadataReaderOptions metadataOptions) in PEFile.cs:49
  at ctor(string fileName, PEStreamOptions streamOptions, MetadataReaderOptions metadataOptions) in
     PEFile.cs:39
  at IEnumerable<string> GetReferenceAssemblies(string assemblyPath, MetadataReference[] references)
     in CompilationHelper.cs:169
  at (Compilation, IAssemblySymbol) CreateCompilationFromAssembly(string assemblyPath, bool
     includePrivateMembers, params MetadataReference[] references) in CompilationHelper.cs:109
  at async (List<ValueTuple<IAssemblySymbol, Compilation>> symbol) Compile(ExtractMetadataConfig
     config) in DotnetApiCatalog.Compile.cs:113
  at async Task <Exec>g__Build|6_0(ExtractMetadataConfig config, DotnetApiOptions options) in
     DotnetApiCatalog.cs:85
  at async Task Exec(MetadataJsonConfig config, DotnetApiOptions options, string configDirectory,
     string outputDirectory) in DotnetApiCatalog.cs:71
  at void <Execute>b__0() in DefaultCommand.cs:45
  at int Run(LogOptions options, Action run) in CommandHelper.cs:48
  at int Execute(CommandContext context, Options options, CancellationToken cancellationToken) in
     DefaultCommand.cs:31
  at int Execute(CommandContext context, TSettings settings) in CancellableCommandBase.cs:24
  at Task<int> Execute(CommandContext context, CommandSettings settings) in CommandOfT.cs:40
  at async Task<int> Execute(CommandTree leaf, CommandTree tree, CommandContext context,
     ITypeResolver resolver, IConfiguration configuration) in CommandExecutor.cs:166

To Reproduce
Steps to reproduce the behavior:

  1. Setup metadata section like:
"metadata": [
  {
    "src": [
      {
        "src": "../../src",
        "files": ["**/bin/Release/**.dll"]
      }
    ],
    "dest": "api"
  }
],
  1. Place unmanaged dll into Release folder for simulating unmanaged dependency;
  2. Run docfx docfx.json --serve

Expected behavior
Just skip unmanaged items.

Context:

  • OS: Windows
  • Docfx version: 2.78.3+850a61c2ecb83b0bda21448f1393e480934556fd

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions