/// <summary> /// Resolves metadata references stored in command line arguments and reports errors for those that can't be resolved. /// </summary> internal List <MetadataReference> ResolveMetadataReferences( MetadataFileReferenceResolver externalReferenceResolver, MetadataFileReferenceProvider metadataProvider, List <DiagnosticInfo> diagnostics, AssemblyIdentityComparer assemblyIdentityComparer, TouchedFileLogger touchedFiles, out MetadataFileReferenceResolver referenceDirectiveResolver) { List <MetadataReference> resolved = new List <MetadataReference>(); Arguments.ResolveMetadataReferences(new AssemblyReferenceResolver(externalReferenceResolver, metadataProvider), diagnostics, this.MessageProvider, resolved); if (Arguments.IsInteractive) { referenceDirectiveResolver = externalReferenceResolver; } else { // when compiling into an assembly (csc/vbc) we only allow #r that match references given on command line: referenceDirectiveResolver = new ExistingReferencesResolver( resolved.Where(r => r.Properties.Kind == MetadataImageKind.Assembly).OfType <PortableExecutableReference>().AsImmutable(), Arguments.ReferencePaths, Arguments.BaseDirectory, assemblyIdentityComparer, touchedFiles); } return(resolved); }
/// <summary> /// Resolves metadata references stored in command line arguments and reports errors for those that can't be resolved. /// </summary> internal List <MetadataReference> ResolveMetadataReferences( MetadataReferenceProvider metadataProvider, List <DiagnosticInfo> diagnostics, AssemblyIdentityComparer assemblyIdentityComparer, TouchedFileLogger touchedFiles, out FileResolver referenceDirectiveResolver) { using (Logger.LogBlock(FunctionId.Common_CommandLineCompiler_ResolveMetadataReferences)) { string baseDirectory = Arguments.BaseDirectory; ImmutableArray <string> absoluteReferencePaths = MakeAbsolute(Arguments.ReferencePaths, baseDirectory); FileResolver externalReferenceResolver = new FileResolver( absoluteReferencePaths, baseDirectory, touchedFiles); List <MetadataReference> resolved = new List <MetadataReference>(); ResolveMetadataReferencesFromArguments(metadataProvider, diagnostics, externalReferenceResolver, resolved); if (Arguments.IsInteractive) { referenceDirectiveResolver = externalReferenceResolver; } else { // when compiling into an assembly (csc/vbc) we only allow #r that match references given on command line: referenceDirectiveResolver = new ExistingReferencesResolver( resolved.Where(r => r.Properties.Kind == MetadataImageKind.Assembly).OfType <MetadataFileReference>().AsImmutable(), absoluteReferencePaths, baseDirectory, assemblyIdentityComparer, touchedFiles); } return(resolved); } }
/// <summary> /// Resolves metadata references stored in command line arguments and reports errors for those that can't be resolved. /// </summary> internal List <MetadataReference> ResolveMetadataReferences( List <DiagnosticInfo> diagnostics, TouchedFileLogger touchedFiles, out MetadataReferenceResolver referenceDirectiveResolver) { var commandLineReferenceResolver = GetCommandLineMetadataReferenceResolver(touchedFiles); List <MetadataReference> resolved = new List <MetadataReference>(); Arguments.ResolveMetadataReferences(commandLineReferenceResolver, diagnostics, this.MessageProvider, resolved); if (Arguments.IsScriptRunner) { referenceDirectiveResolver = commandLineReferenceResolver; } else { // when compiling into an assembly (csc/vbc) we only allow #r that match references given on command line: referenceDirectiveResolver = new ExistingReferencesResolver(commandLineReferenceResolver, resolved.ToImmutableArray()); } return(resolved); }
/// <summary> /// Resolves metadata references stored in command line arguments and reports errors for those that can't be resolved. /// </summary> internal List<MetadataReference> ResolveMetadataReferences( List<DiagnosticInfo> diagnostics, TouchedFileLogger touchedFiles, out MetadataReferenceResolver referenceDirectiveResolver) { var commandLineReferenceResolver = GetCommandLineMetadataReferenceResolver(touchedFiles); List<MetadataReference> resolved = new List<MetadataReference>(); Arguments.ResolveMetadataReferences(commandLineReferenceResolver, diagnostics, this.MessageProvider, resolved); if (Arguments.IsScriptRunner) { referenceDirectiveResolver = commandLineReferenceResolver; } else { // when compiling into an assembly (csc/vbc) we only allow #r that match references given on command line: referenceDirectiveResolver = new ExistingReferencesResolver(commandLineReferenceResolver, resolved.ToImmutableArray()); } return resolved; }
/// <summary> /// Resolves metadata references stored in command line arguments and reports errors for those that can't be resolved. /// </summary> internal List<MetadataReference> ResolveMetadataReferences( MetadataFileReferenceResolver externalReferenceResolver, MetadataFileReferenceProvider metadataProvider, List<DiagnosticInfo> diagnostics, AssemblyIdentityComparer assemblyIdentityComparer, TouchedFileLogger touchedFiles, out MetadataFileReferenceResolver referenceDirectiveResolver) { List<MetadataReference> resolved = new List<MetadataReference>(); Arguments.ResolveMetadataReferences(new AssemblyReferenceResolver(externalReferenceResolver, metadataProvider), diagnostics, this.MessageProvider, resolved); if (Arguments.IsInteractive) { referenceDirectiveResolver = externalReferenceResolver; } else { // when compiling into an assembly (csc/vbc) we only allow #r that match references given on command line: referenceDirectiveResolver = new ExistingReferencesResolver( CreateLoggingMetadataResolver(touchedFiles), resolved.Where(r => r.Properties.Kind == MetadataImageKind.Assembly).OfType<PortableExecutableReference>().AsImmutable(), assemblyIdentityComparer); } return resolved; }
/// <summary> /// Resolves metadata references stored in command line arguments and reports errors for those that can't be resolved. /// </summary> internal List<MetadataReference> ResolveMetadataReferences( MetadataReferenceResolver externalReferenceResolver, MetadataReferenceProvider metadataProvider, List<DiagnosticInfo> diagnostics, AssemblyIdentityComparer assemblyIdentityComparer, TouchedFileLogger touchedFiles, out MetadataReferenceResolver referenceDirectiveResolver) { using (Logger.LogBlock(FunctionId.Common_CommandLineCompiler_ResolveMetadataReferences)) { List<MetadataReference> resolved = new List<MetadataReference>(); ResolveMetadataReferencesFromArguments(externalReferenceResolver, metadataProvider, diagnostics, resolved); if (Arguments.IsInteractive) { referenceDirectiveResolver = externalReferenceResolver; } else { // when compiling into an assembly (csc/vbc) we only allow #r that match references given on command line: referenceDirectiveResolver = new ExistingReferencesResolver( resolved.Where(r => r.Properties.Kind == MetadataImageKind.Assembly).OfType<MetadataFileReference>().AsImmutable(), Arguments.ReferencePaths, Arguments.BaseDirectory, assemblyIdentityComparer, touchedFiles); } return resolved; } }