Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }