private IEnumerable <IPackageReference> GetPackages(string workingDirectory) { if (string.IsNullOrWhiteSpace(_name)) { var packages = _packageAssemblyResolver.GetPackages(workingDirectory); foreach (var packageReference in packages) { yield return(packageReference); } yield break; } yield return(new PackageReference(_name, new FrameworkName(".NETFramework,Version=v4.0"), new Version())); }
// 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); } }
public void Compose(string workingDirectory, StringBuilder builder = null) { if (string.IsNullOrWhiteSpace(ScriptLibrariesFile)) { return; } var packagesPath = Path.Combine(workingDirectory, _fileSystem.PackagesFolder); var packageScriptsPath = Path.Combine(packagesPath, ScriptLibrariesFile); if (!_fileSystem.DirectoryExists(packagesPath) || _fileSystem.FileExists(packageScriptsPath)) { return; } if (builder == null) { builder = new StringBuilder(); } var namespaces = new List <string>(); var references = new List <string>(); var packageReferences = _packageAssemblyResolver.GetPackages(workingDirectory); foreach (var reference in packageReferences) { ProcessPackage(packagesPath, reference, builder, references, namespaces); } foreach (var ns in namespaces) { builder.Insert(0, String.Format("using {0};{1}", ns, Environment.NewLine)); } foreach (var reference in references) { builder.Insert(0, String.Format("#r {0}{1}", reference, Environment.NewLine)); } _fileSystem.WriteToFile(packageScriptsPath, builder.ToString()); }
// 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; } }