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); } } }
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); }