/// <summary> /// Gets a MetadataReference to a project's output assembly. /// </summary> private async Task <MetadataReference> GetProjectMetadata(string projectFilePath, ImmutableArray <string> aliases, IDictionary <string, string> globalProperties, CancellationToken cancellationToken) { // use loader service to determine output file for project if possible var outputFilePath = await ProjectFileLoader.GetOutputFilePathAsync(projectFilePath, globalProperties, cancellationToken).ConfigureAwait(false); if (outputFilePath != null && File.Exists(outputFilePath)) { if (Workspace.TestHookStandaloneProjectsDoNotHoldReferences) { var documentationService = this.Services.GetService <IDocumentationProviderService>(); var docProvider = documentationService.GetDocumentationProvider(outputFilePath); var metadata = AssemblyMetadata.CreateFromImage(File.ReadAllBytes(outputFilePath)); return(metadata.GetReference( documentation: docProvider, aliases: aliases, display: outputFilePath)); } else { var metadataService = this.Services.GetService <IMetadataService>(); return(metadataService.GetReference(outputFilePath, new MetadataReferenceProperties(MetadataImageKind.Assembly, aliases))); } } return(null); }
/// <summary> /// Gets a MetadataReference to a project's output assembly. /// </summary> private async Task <MetadataReference> GetProjectMetadata(string projectFilePath, ImmutableArray <string> aliases, IDictionary <string, string> globalProperties, CancellationToken cancellationToken) { try { // use loader service to determine output file for project if possible var outputFilePath = await ProjectFileLoader.GetOutputFilePathAsync(projectFilePath, globalProperties, cancellationToken).ConfigureAwait(false); if (outputFilePath != null && File.Exists(outputFilePath)) { var docProvider = this.GetDocumentationProvider(outputFilePath); if (Workspace.TestHookStandaloneProjectsDoNotHoldReferences) { return(new MetadataImageReference( AssemblyMetadata.CreateFromImage(ImmutableArray.Create(File.ReadAllBytes(outputFilePath))), documentation: docProvider, aliases: aliases, display: outputFilePath)); } else { return(new MetadataFileReference(outputFilePath, new MetadataReferenceProperties(MetadataImageKind.Assembly, aliases), docProvider)); } } } catch (System.IO.IOException exception) { this.OnWorkspaceFailed(new ProjectDiagnostic(WorkspaceDiagnosticKind.FileAccessFailure, exception.Message, this.GetOrCreateProjectId(projectFilePath))); } return(null); }