public async Task TestUnresolvedAnalyzerReference()
        {
            using (var workspace = new TestWorkspace())
            {
                var lazyWorkspace = new Lazy <VisualStudioWorkspaceImpl>(() => throw Utilities.ExceptionUtilities.Unreachable);

                var hostDiagnosticUpdateSource = new HostDiagnosticUpdateSource(lazyWorkspace, new MockDiagnosticUpdateSourceRegistrationService());

                var project = workspace.CurrentSolution.AddProject("empty", "empty", LanguageNames.CSharp);
                using var analyzer = new VisualStudioAnalyzer(
                          @"C:\PathToAnalyzer",
                          hostDiagnosticUpdateSource,
                          projectId: project.Id,
                          language: project.Language);

                var analyzerReference = analyzer.GetReference();
                project = project.WithAnalyzerReferences(new[] { analyzerReference });

                var checksum = await project.State.GetChecksumAsync(CancellationToken.None).ConfigureAwait(false);

                Assert.NotNull(checksum);

                var serializer = workspace.Services.GetService <ISerializerService>();

                var asset = WorkspaceAnalyzerReferenceAsset.Create(analyzerReference, serializer, CancellationToken.None);

                using var stream = SerializableBytes.CreateWritableStream();

                using (var writer = new ObjectWriter(stream, leaveOpen: true))
                {
                    await asset.WriteObjectToAsync(writer, CancellationToken.None).ConfigureAwait(false);
                }

                stream.Position = 0;
                using (var reader = ObjectReader.TryGetReader(stream))
                {
                    var recovered        = serializer.Deserialize <AnalyzerReference>(asset.Kind, reader, CancellationToken.None);
                    var assetFromStorage = WorkspaceAnalyzerReferenceAsset.Create(recovered, serializer, CancellationToken.None);

                    Assert.Equal(asset.Checksum, assetFromStorage.Checksum);

                    // This won't round trip, but we should get an UnresolvedAnalyzerReference, with the same path
                    Assert.Equal(analyzerReference.FullPath, recovered.FullPath);
                }
            }
        }
示例#2
0
        public void WorkspaceAnalyzer_Serialization_Desktop_Test()
        {
            var hostServices = MefHostServices.Create(
                MefHostServices.DefaultAssemblies.Add(typeof(Host.TemporaryStorageServiceFactory.TemporaryStorageService).Assembly));

            using var tempRoot  = new TempRoot();
            using var workspace = new AdhocWorkspace(hostServices);
            var reference = CreateShadowCopiedAnalyzerReference(tempRoot);

            var serializer = workspace.Services.GetService <ISerializerService>();

            var asset = WorkspaceAnalyzerReferenceAsset.Create(reference, serializer, CancellationToken.None);

            // verify checksum from custom asset builder uses different checksum than regular one
            var expectedChecksum = Checksum.Create(
                WellKnownSynchronizationKind.AnalyzerReference,
                serializer.CreateChecksum(reference, CancellationToken.None));

            Assert.Equal(expectedChecksum, asset.Checksum);
        }