public CommandResult Execute() { _logger.Info("Copying assemblies to bin folder..."); var workingDirectory = _fileSystem.GetWorkingDirectory(_scriptName); var binFolder = Path.Combine(workingDirectory, Constants.BinFolder); try { if (!_fileSystem.DirectoryExists(binFolder)) { _fileSystem.CreateDirectory(binFolder); } var packages = _packageAssemblyResolver.GetAssemblyNames(workingDirectory); foreach (var package in packages) { CopyFile(package, binFolder); } _logger.Info("Restore completed successfully."); return(CommandResult.Success); } catch (Exception e) { _logger.ErrorFormat("Restore failed: {0}.", e.Message); return(CommandResult.Error); } }
private IEnumerable <string> GetPackageAssemblyNames(string path) { foreach (var assembly in _packageAssemblyResolver.GetAssemblyNames(path)) { _logger.DebugFormat("Found package assembly: {0}", Path.GetFileName(assembly)); yield return(assembly); } }
public CommandResult Execute() { _logger.Info("Cleaning initiated..."); var workingDirectory = _fileSystem.GetWorkingDirectory(_scriptName); _logger.TraceFormat("Working directory: {0}", workingDirectory); var binFolder = Path.Combine(workingDirectory, Constants.BinFolder); _logger.TraceFormat("Bin folder: {0}", binFolder); var packageFolder = Path.Combine(workingDirectory, Constants.PackagesFolder); _logger.TraceFormat("Packages folder: {0}", packageFolder); try { if (_fileSystem.DirectoryExists(binFolder)) { var packages = _packageAssemblyResolver.GetAssemblyNames(workingDirectory); foreach (var package in packages) { _logger.DebugFormat("Deleting file: {0}", package); DeleteFile(package, binFolder); } var remaining = _fileSystem.EnumerateFiles(binFolder, "*.*").Any(); if (!remaining) { _logger.DebugFormat("Deleting bin directory: {0}", binFolder); _fileSystem.DeleteDirectory(binFolder); } } if (_fileSystem.DirectoryExists(packageFolder)) { _logger.DebugFormat("Deleting package directory: {0}", packageFolder); _fileSystem.DeleteDirectory(packageFolder); } _logger.Info("Clean completed successfully."); return(CommandResult.Success); } catch (Exception e) { _logger.ErrorFormat("Clean failed: {0}.", e.Message); return(CommandResult.Error); } }
// prepare NuGet dependencies, download them if required private static IEnumerable <string> PreparePackages( string scriptPath, IFileSystem fileSystem, IPackageAssemblyResolver packageAssemblyResolver, IPackageInstaller packageInstaller) { var workingDirectory = Path.GetDirectoryName(scriptPath); var binDirectory = Path.Combine(workingDirectory, @"bin\debug"); //TODO : ScriptCs.Constants.BinFolder var packages = packageAssemblyResolver.GetPackages(workingDirectory); packageInstaller.InstallPackages( packages, allowPreRelease: true); // current implementeation of RoslynCTP required dependencies to be in 'bin' folder if (!fileSystem.DirectoryExists(binDirectory)) { fileSystem.CreateDirectory(binDirectory); } // copy dependencies one by one from 'packages' to 'bin' foreach (var assemblyName in packageAssemblyResolver.GetAssemblyNames(workingDirectory)) { var assemblyFileName = Path.GetFileName(assemblyName); var destFile = Path.Combine(binDirectory, assemblyFileName); var sourceFileLastWriteTime = fileSystem.GetLastWriteTime(assemblyName); var destFileLastWriteTime = fileSystem.GetLastWriteTime(destFile); if (sourceFileLastWriteTime == destFileLastWriteTime) { //outputCallback(string.Format("Skipped: '{0}' because it is already exists", assemblyName)); } else { fileSystem.Copy(assemblyName, destFile, overwrite: true); //if (outputCallback != null) //{ // outputCallback(string.Format("Copy: '{0}' to '{1}'", assemblyName, destFile)); //} } yield return(destFile); } }
private IEnumerable <string> GetPackageAssemblies(string path) { var packagesFolder = Path.Combine(path, Constants.PackagesFolder); if (!_fileSystem.DirectoryExists(packagesFolder)) { return(Enumerable.Empty <string>()); } var assemblies = _packageAssemblyResolver.GetAssemblyNames(path).ToList(); foreach (var packageAssembly in assemblies) { _logger.DebugFormat("Found package assembly: {0}", Path.GetFileName(packageAssembly)); } return(assemblies); }
public object Execute(IScriptExecutor repl, object[] args) { Guard.AgainstNullArgument("repl", repl); if (args == null || args.Length == 0) { return(null); } string version = null; var allowPre = false; if (args.Length >= 2) { version = args[1].ToString(); } allowPre = args.Length >= 3 && args[2].ToString().ToUpperInvariant() == "PRE"; _logger.InfoFormat("Installing {0}", args[0]); _installationProvider.Initialize(); var packageRef = new PackageReference( args[0].ToString(), new FrameworkName(".NETFramework,Version=v4.0"), version); _packageInstaller.InstallPackages(new[] { packageRef }, allowPre); _packageAssemblyResolver.SavePackages(); var dlls = _packageAssemblyResolver.GetAssemblyNames(repl.FileSystem.CurrentDirectory) .Except(repl.References.PathReferences).ToArray(); repl.AddReferences(dlls); foreach (var dll in dlls) { _logger.InfoFormat("Added reference to {0}", dll); } return(null); }
// prepare NuGet dependencies, download them if required private static IEnumerable<string> PreparePackages( string scriptPath, IFileSystem fileSystem, IPackageAssemblyResolver packageAssemblyResolver, IPackageInstaller packageInstaller) { var workingDirectory = Path.GetDirectoryName(scriptPath); var binDirectory = Path.Combine(workingDirectory, @"bin\debug"); //TODO : ScriptCs.Constants.BinFolder var packages = packageAssemblyResolver.GetPackages(workingDirectory); packageInstaller.InstallPackages( packages, allowPreRelease: true); // current implementeation of RoslynCTP required dependencies to be in 'bin' folder if (!fileSystem.DirectoryExists(binDirectory)) { fileSystem.CreateDirectory(binDirectory); } // copy dependencies one by one from 'packages' to 'bin' foreach (var assemblyName in packageAssemblyResolver.GetAssemblyNames(workingDirectory)) { var assemblyFileName = Path.GetFileName(assemblyName); var destFile = Path.Combine(binDirectory, assemblyFileName); var sourceFileLastWriteTime = fileSystem.GetLastWriteTime(assemblyName); var destFileLastWriteTime = fileSystem.GetLastWriteTime(destFile); if (sourceFileLastWriteTime == destFileLastWriteTime) { //outputCallback(string.Format("Skipped: '{0}' because it is already exists", assemblyName)); } else { fileSystem.Copy(assemblyName, destFile, overwrite: true); //if (outputCallback != null) //{ // outputCallback(string.Format("Copy: '{0}' to '{1}'", assemblyName, destFile)); //} } yield return destFile; } }