internal DirectoryInfo CreateContentDirectory(DirectoryInfo outputPath) { var model = new LaunchPageModel(Manifest, AppInfo) { ContentDirectory = "./Web Files", Launcher = outputPath.GetFiles("*.application").First().Name, Installer = outputPath.GetFiles("setup.exe").FirstOrDefault()?.Name ?? "#" }; if (model.AppInfo.Links == null) { model.AppInfo.Links = new LinkList(); } var webFilesDir = Directory.CreateDirectory(Path.Combine(WorkingDirectory.FullName, "Web Files")); var otherFiles = SourceDirectory.EnumerateFiles("*", SearchOption.AllDirectories).Where(f => !f.Extension.Contains("cshtml")); foreach (var otherFile in otherFiles) { var targetRelativePath = otherFile.FullName.Replace(SourceDirectory.FullName, string.Empty).Substring(1); var fullPath = Path.Combine(webFilesDir.FullName, targetRelativePath); Directory.CreateDirectory(new FileInfo(fullPath).Directory.FullName); otherFile.CopyTo( fullPath, true); } var templateFiles = SourceDirectory.EnumerateFiles("*.cshtml", SearchOption.AllDirectories).Where(f => f.Name.ToLower() != "index.cshtml"); foreach (var templateFile in templateFiles) { var targetRelativePath = templateFile.FullName.Replace(SourceDirectory.FullName, string.Empty).Substring(1); var fullPath = Path.Combine(webFilesDir.FullName, targetRelativePath); Directory.CreateDirectory(new FileInfo(fullPath).Directory.FullName); var compile = Engine.RunCompile(templateFile.Name, typeof(LaunchPageModel), model); File.WriteAllText(compile, fullPath); } var indexFile = SourceDirectory.GetFiles("index.cshtml").FirstOrDefault(); if (indexFile != null) { var indexDestPath = Path.Combine(WorkingDirectory.FullName, indexFile.FullName.Replace(indexFile.Extension, ".html") .Replace(SourceDirectory.FullName, string.Empty) .Substring(1)); var indexOutput = Engine.RunCompile(indexFile.Name, typeof(LaunchPageModel), model); File.WriteAllText(indexDestPath, indexOutput); } foreach (var file in WorkingDirectory.EnumerateFiles("*.cshtml", SearchOption.AllDirectories)) { file.Delete(); } return(WorkingDirectory); }
/// <summary> /// /// </summary> /// <param name="options"></param> /// <returns></returns> public IEnumerable <IFile> EnumerateFiles(FileSearchOptions options = null) { var files = WorkingDirectory.Exists ? WorkingDirectory.EnumerateFiles("*", SearchOption.AllDirectories) : new List <FileInfo>(); foreach (var enumerateFile in files) { var name = enumerateFile.FullName.Replace(WorkingDirectory.FullName + "\\", ""); var f = new FileFsBased(FileAccess.ReadWrite, new FileDescriptor { DateTime = enumerateFile.LastWriteTime, Filename = name, Path = enumerateFile.FullName }); yield return(f); } }