public Compilation CreateCompilation(CompilationOptionsReader compilationOptionsReader, string fileName) { var pdbCompilationOptions = compilationOptionsReader.GetMetadataCompilationOptions(); if (pdbCompilationOptions.Length == 0) { throw new InvalidDataException("Did not find compilation options in pdb"); } var metadataReferenceInfos = compilationOptionsReader.GetMetadataReferences(); var encoding = compilationOptionsReader.GetEncoding(); var sourceFileInfos = compilationOptionsReader.GetSourceFileInfos(encoding); _logger.LogInformation("Locating metadata references"); var metadataReferences = _referenceResolver.ResolveReferences(metadataReferenceInfos); logResolvedMetadataReferences(); var sourceLinks = ResolveSourceLinks(compilationOptionsReader); var sources = ResolveSources(sourceFileInfos, sourceLinks, encoding); logResolvedSources(); if (pdbCompilationOptions.TryGetUniqueOption("language", out var language)) { var compilation = language switch { LanguageNames.CSharp => CreateCSharpCompilation(fileName, compilationOptionsReader, sources, metadataReferences), LanguageNames.VisualBasic => CreateVisualBasicCompilation(fileName, compilationOptionsReader, sources, metadataReferences), _ => throw new InvalidDataException($"{language} is not a known language") }; return(compilation); } throw new InvalidDataException("Did not find language in compilation options"); void logResolvedMetadataReferences() { using var _ = _logger.BeginScope("Metadata References"); for (var i = 0; i < metadataReferenceInfos.Length; i++) { _logger.LogInformation($@"""{metadataReferences[i].Display}"" - {metadataReferenceInfos[i].Mvid}"); } } void logResolvedSources() { using var _ = _logger.BeginScope("Source Names"); foreach (var resolvedSource in sources) { var sourceFileInfo = resolvedSource.SourceFileInfo; var hash = BitConverter.ToString(sourceFileInfo.Hash).Replace("-", ""); var embeddedCompressedHash = sourceFileInfo.EmbeddedCompressedHash is { } compressedHash ? ("[uncompressed]" + BitConverter.ToString(compressedHash).Replace("-", "")) : null; _logger.LogInformation($@"""{resolvedSource.DisplayPath}"" - {sourceFileInfo.HashAlgorithm} - {hash} - {embeddedCompressedHash}"); } } }
private ImmutableArray <MetadataReference> CreateMetadataReferences(CompilationOptionsReader pdbReader) { var referenceInfos = pdbReader.GetMetadataReferences(); return(_referenceResolver.ResolveReferences(referenceInfos)); }