public Config(IEngine engine, IConfigurableFileSystem fileSystem) { _engine = engine; _fileSystem = fileSystem; _packages = new PackagesCollection(fileSystem); // Manually resolve included assemblies AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve; AppDomain.CurrentDomain.SetupInformation.PrivateBinPathProbe = string.Empty; // non-null means exclude application base path }
public void InstallPackages(string absolutePackagesPath, DirectoryPath contentPath, IConfigurableFileSystem fileSystem, bool updatePackages) { PackageManager packageManager = new PackageManager(_packageRepository, absolutePackagesPath); // On package install... packageManager.PackageInstalled += (sender, args) => { IDirectory packageContentDirectory = fileSystem.GetRootDirectory(contentPath.Combine(args.Package.Id)); // Copy all content files on install and add to input paths bool firstFile = true; foreach (IPackageFile packageFile in args.Package.GetContentFiles()) { if (firstFile) { // This package does have content files, so create the directory and add an input path packageContentDirectory.Create(); fileSystem.InputPaths.Insert(0, packageContentDirectory.Path); firstFile = false; } IFile file = packageContentDirectory.GetFile(packageFile.EffectivePath); file.Directory.Create(); using (var fileStream = file.Open(FileMode.Create)) { packageFile.GetStream().CopyTo(fileStream); } } }; // On package uninstall... packageManager.PackageUninstalling += (sender, args) => { IDirectory packageContentDirectory = fileSystem.GetRootDirectory(contentPath.Combine(args.Package.Id)); packageContentDirectory.Delete(true); }; // Install the packages foreach (Package package in _packages) { package.InstallPackage(packageManager, updatePackages); } }
public PackagesCollection(IConfigurableFileSystem fileSystem) { _fileSystem = fileSystem; }
public void Invoke(IPackagesCollection packages, IAssemblyCollection assemblies, IConfigurableFileSystem fileSystem) { var scriptType = Assembly.GetExportedTypes().First(t => t.Name == "SetupScript"); MethodInfo runMethod = scriptType.GetMethod("Run", BindingFlags.Public | BindingFlags.Static); runMethod.Invoke(null, new object[] { packages, assemblies, fileSystem }); }