internal EmbeddedText TryReadEmbeddedFileContent(string filePath, IList <Diagnostic> diagnostics) { try { using (var stream = OpenFileForReadWithSmallBufferOptimization(filePath)) { const int LargeObjectHeapLimit = 80 * 1024; if (stream.Length < LargeObjectHeapLimit) { ArraySegment <byte> bytes; if (EncodedStringText.TryGetBytesFromStream(stream, out bytes)) { return(EmbeddedText.FromBytes(filePath, bytes, Arguments.ChecksumAlgorithm)); } } return(EmbeddedText.FromStream(filePath, stream, Arguments.ChecksumAlgorithm)); } } catch (Exception e) { diagnostics.Add(MessageProvider.CreateDiagnostic(ToFileReadDiagnostics(this.MessageProvider, e, filePath))); return(null); } }
internal AssemblyData ResolveMissingAssembly( AssemblyIdentity referenceIdentity, PortableExecutableReference peReference, MetadataImportOptions importOptions, DiagnosticBag diagnostics) { var metadata = GetMetadata(peReference, MessageProvider, Location.None, diagnostics); Debug.Assert(metadata != null || diagnostics.HasAnyErrors()); if (metadata == null) { return(null); } var assemblyMetadata = metadata as AssemblyMetadata; if (assemblyMetadata?.IsValidAssembly() != true) { diagnostics.Add(MessageProvider.CreateDiagnostic(MessageProvider.ERR_MetadataFileNotAssembly, Location.None, peReference.Display)); return(null); } var assembly = assemblyMetadata.GetAssembly(); // Allow reference and definition identities to differ in version, but not other properties: if (IdentityComparer.Compare(referenceIdentity, assembly.Identity) == AssemblyIdentityComparer.ComparisonResult.NotEquivalent) { return(null); } return(CreateAssemblyDataForFile( assembly, assemblyMetadata.CachedSymbols, peReference.DocumentationProvider, SimpleAssemblyName, importOptions, peReference.Properties.EmbedInteropTypes)); }