private bool TryWritePortableExecutableReferenceBackedByTemporaryStorageTo( ISupportTemporaryStorage reference, ObjectWriter writer, CancellationToken cancellationToken) { if (_storageService == null) { return(false); } var storages = reference.GetStorages(); if (storages == null) { return(false); } using (var pooled = Creator.CreateList <(string name, long offset, long size)>()) { foreach (var storage in storages) { var storage2 = storage as ITemporaryStorageWithName; if (storage2 == null) { return(false); } pooled.Object.Add((storage2.Name, storage2.Offset, storage2.Size)); } WritePortableExecutableReferenceHeaderTo((PortableExecutableReference)reference, SerializationKinds.MemoryMapFile, writer, cancellationToken); writer.WriteInt32((int)MetadataImageKind.Assembly); writer.WriteInt32(pooled.Object.Count); foreach (var tuple in pooled.Object) { writer.WriteInt32((int)MetadataImageKind.Module); writer.WriteString(tuple.name); writer.WriteInt64(tuple.offset); writer.WriteInt64(tuple.size); } return(true); } }
private static bool TryWritePortableExecutableReferenceBackedByTemporaryStorageTo( ISupportTemporaryStorage reference, ObjectWriter writer, CancellationToken cancellationToken) { var storages = reference.GetStorages(); if (storages == null) { return(false); } // Not clear if name should be allowed to be null here (https://github.com/dotnet/roslyn/issues/43037) using var pooled = Creator.CreateList <(string?name, long offset, long size)>(); foreach (var storage in storages) { if (!(storage is ITemporaryStorageWithName storage2)) { return(false); } pooled.Object.Add((storage2.Name, storage2.Offset, storage2.Size)); } WritePortableExecutableReferenceHeaderTo((PortableExecutableReference)reference, SerializationKinds.MemoryMapFile, writer, cancellationToken); writer.WriteInt32((int)MetadataImageKind.Assembly); writer.WriteInt32(pooled.Object.Count); foreach (var(name, offset, size) in pooled.Object) { writer.WriteInt32((int)MetadataImageKind.Module); writer.WriteString(name); writer.WriteInt64(offset); writer.WriteInt64(size); } return(true); }
private bool TryWritePortableExecutableReferenceBackedByTemporaryStorageTo( ISupportTemporaryStorage reference, ObjectWriter writer, CancellationToken cancellationToken) { var storages = reference.GetStorages(); if (storages == null) { return false; } using (var pooled = Creator.CreateList<ValueTuple<string, long>>()) { foreach (var storage in storages) { var storage2 = storage as ITemporaryStorageWithName; if (storage2 == null) { return false; } pooled.Object.Add(ValueTuple.Create(storage2.Name, storage2.Size)); } WritePortableExecutableReferenceHeaderTo((PortableExecutableReference)reference, SerializationKinds.MemoryMapFile, writer, cancellationToken); writer.WriteInt32((int)MetadataImageKind.Assembly); writer.WriteInt32(pooled.Object.Count); foreach (var tuple in pooled.Object) { writer.WriteInt32((int)MetadataImageKind.Module); writer.WriteString(tuple.Item1); writer.WriteInt64(tuple.Item2); } return true; } }