private void ValidatePackageFile(FileInfo packageFile, CompiledPackage package) { if (!(package.Files?.Count > 0)) { return; } var sourceDestination = _parser.ExtractSourceDestinationFileInformation(package.Files).ToArray(); var missingFiles = _packageExtraction.FindMissingFiles(packageFile, sourceDestination.Select(i => i.packageUniqueFile)).ToArray(); if (missingFiles.Any()) { throw new Exception("The following file(s) are missing in the package: " + string.Join(", ", missingFiles.Select( mf => { var(packageUniqueFile, appRelativePath) = sourceDestination.Single(fi => fi.packageUniqueFile == mf); return($"source: \"{packageUniqueFile}\" destination: \"{appRelativePath}\""); }))); } IEnumerable <string> duplicates = _packageExtraction.FindDuplicateFileNames(packageFile).ToArray(); if (duplicates.Any()) { throw new Exception("The following filename(s) are found more than one time in the package, since the filename is used ad primary key, this is not allowed: " + string.Join(", ", duplicates)); } }
/// <summary> /// Returns a list of all installed file paths /// </summary> /// <param name="compiledPackage"></param> /// <param name="packageFile"></param> /// <param name="targetRootFolder"> /// The absolute path of where to extract the package files (normally the application root) /// </param> /// <returns></returns> public IEnumerable <string> InstallFiles(CompiledPackage compiledPackage, FileInfo packageFile, string targetRootFolder) { using (_logger.DebugDuration <PackageFileInstallation>( "Installing package files for package " + compiledPackage.Name, "Package file installation complete for package " + compiledPackage.Name)) { var sourceAndRelativeDest = _parser.ExtractSourceDestinationFileInformation(compiledPackage.Files); var sourceAndAbsDest = AppendRootToDestination(targetRootFolder, sourceAndRelativeDest); _packageExtraction.CopyFilesFromArchive(packageFile, sourceAndAbsDest); return(sourceAndRelativeDest.Select(sd => sd.appRelativePath).ToArray()); } }