// TODO: change to private protected when available internal static MetadataReference ResolveMetadataReference(CommandLineReference cmdReference, MetadataReferenceResolver metadataResolver, MetadataReferenceProvider metadataProvider, List <DiagnosticInfo> diagnosticsOpt, CommonMessageProvider messageProviderOpt) { Debug.Assert(metadataResolver != null); Debug.Assert(metadataProvider != null); Debug.Assert((diagnosticsOpt == null) == (messageProviderOpt == null)); string resolvedPath = metadataResolver.ResolveReference(cmdReference.Reference, baseFilePath: null); if (resolvedPath == null) { if (diagnosticsOpt != null) { diagnosticsOpt.Add(new DiagnosticInfo(messageProviderOpt, messageProviderOpt.ERR_MetadataFileNotFound, cmdReference.Reference)); } return(null); } try { return(metadataProvider.GetReference(resolvedPath, cmdReference.Properties)); } catch (Exception e) if (diagnosticsOpt != null && (e is BadImageFormatException || e is IOException)) { var diagnostic = PortableExecutableReference.ExceptionToDiagnostic(e, messageProviderOpt, Location.None, cmdReference.Reference, cmdReference.Properties.Kind); diagnosticsOpt.Add(((DiagnosticWithInfo)diagnostic).Info); return(null); } }
internal static ImmutableArray <PortableExecutableReference> ResolveMetadataReference( CommandLineReference cmdReference, MetadataReferenceResolver metadataResolver, List <DiagnosticInfo>?diagnosticsOpt, CommonMessageProvider?messageProviderOpt ) { RoslynDebug.Assert(metadataResolver != null); Debug.Assert((diagnosticsOpt == null) == (messageProviderOpt == null)); ImmutableArray <PortableExecutableReference> references; try { references = metadataResolver.ResolveReference( cmdReference.Reference, baseFilePath: null, properties: cmdReference.Properties ); } catch (Exception e) when(diagnosticsOpt != null && (e is BadImageFormatException || e is IOException)) { var diagnostic = PortableExecutableReference.ExceptionToDiagnostic( e, messageProviderOpt !, Location.None, cmdReference.Reference, cmdReference.Properties.Kind ); diagnosticsOpt.Add(((DiagnosticWithInfo)diagnostic).Info); return(ImmutableArray <PortableExecutableReference> .Empty); } if (references.IsDefaultOrEmpty && diagnosticsOpt != null) { RoslynDebug.AssertNotNull(messageProviderOpt); diagnosticsOpt.Add( new DiagnosticInfo( messageProviderOpt, messageProviderOpt.ERR_MetadataFileNotFound, cmdReference.Reference ) ); return(ImmutableArray <PortableExecutableReference> .Empty); } return(references); }