| File: Mount\Archive\ZipFileMountPointFactory.cs | Web Access |
| Project: src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Edge\Microsoft.TemplateEngine.Edge.csproj (Microsoft.TemplateEngine.Edge) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.IO.Compression; using Microsoft.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Abstractions.Mount; using Microsoft.TemplateEngine.Utils; namespace Microsoft.TemplateEngine.Edge.Mount.Archive { public sealed class ZipFileMountPointFactory : IMountPointFactory { internal static readonly Guid FactoryId = new("94E92610-CF4C-4F6D-AEB6-9E42DDE1899D"); Guid IIdentifiedComponent.Id => FactoryId; bool IMountPointFactory.TryMount(IEngineEnvironmentSettings environmentSettings, IMountPoint? parent, string mountPointUri, out IMountPoint? mountPoint) { if (!Uri.TryCreate(mountPointUri, UriKind.Absolute, out var uri)) { mountPoint = null; return false; } if (!uri.IsFile) { mountPoint = null; return false; } ZipArchive archive; if (parent == null) { if (!environmentSettings.Host.FileSystem.FileExists(uri.LocalPath)) { mountPoint = null; return false; } try { archive = new ZipArchive(environmentSettings.Host.FileSystem.OpenRead(uri.LocalPath), ZipArchiveMode.Read, false); } catch { mountPoint = null; return false; } } else { IFile? file = parent.Root.FileInfo(uri.LocalPath); if (file == null || !file.Exists) { mountPoint = null; return false; } try { archive = new ZipArchive(file.OpenRead(), ZipArchiveMode.Read, false); } catch { mountPoint = null; return false; } } mountPoint = new ZipFileMountPoint(environmentSettings, parent, mountPointUri, archive); return true; } } }