public override string ToString() { if (SourceFiles?.Any() == true) { return($"{Alias} ({string.Join(", ", SourceFiles)})"); } return(Alias); }
protected string CreateNewFileName(string fileExtension) { int count = 1; string fileName; fileName = NEW_FILE_ROOT + count; while (SourceFiles.Any(x => x.Name == fileName)) { count++; fileName = NEW_FILE_ROOT + count; } return(fileName + fileExtension); }
public void Merge(SourceFileCollection other) { foreach (var sourceFile in other.SourceFiles) { var inContent = SourceFiles.Any(e => string.Equals(e, sourceFile, StringComparison.InvariantCultureIgnoreCase)); if (!inContent) { SourceFiles.Add(sourceFile); } } foreach (var destFile in other.DestFiles) { var inContent = DestFiles.Any(e => string.Equals(e, destFile, StringComparison.InvariantCultureIgnoreCase)); if (!inContent) { DestFiles.Add(destFile); } } }
public override bool ExecuteTask() { var packagingDir = CreateEmptyOutputDirectory(IntermediateOutputFolderName); string outputZipFileName = Path.Combine(packagingDir, "resources.zip"); // we want to put module content, and resx files, in the resources zip that will get deployed to module install (desktop modules) folder dir. ITaskItem[] resourcesZipContentItems = ResourceFiles != null ? ResourcesZipContent.Concat(ResourceFiles).ToArray() : ResourcesZipContent.ToArray(); // create a resources zip containing install files, without source. CreateResourcesZip(outputZipFileName, resourcesZipContentItems); // copy the manifests to packaging dir root foreach (var item in ManifestFileItems) { var manifestFilePath = item.GetFullPath(this.ProjectDirectory); CopyFile(manifestFilePath, packagingDir); } // Ensure packagingdir\bin dir string binFolder = Path.Combine(packagingDir, "bin"); EnsureEmptyDirectory(binFolder); // copy assemblies to packagingdir\bin CopyFileTaskItems(ProjectDirectory, Assemblies, binFolder); // copy symbols to packagingdir\bin if (DebugSymbols) { CopyFileTaskItems(ProjectDirectory, Symbols, binFolder, true); } // copy AdditionalFiles directly into packagingdir (keeping same relative path from new parent dir) if (AdditionalFiles.Length > 0) { // This item array is initialised with a dummy item, so that its easy for // for consumers to override and add in their own items. // This means we have to take care of removing the dummy entry though. var dummyItem = AdditionalFiles.FirstOrDefault(a => a.ItemSpec == "_DummyEntry_.txt"); if (dummyItem != null) { var filesList = AdditionalFiles.ToList(); filesList.Remove(dummyItem); AdditionalFiles = filesList.ToArray(); } } CopyFileTaskItems(ProjectDirectory, AdditionalFiles, packagingDir, false, true); // find any // .sqldataprovider files // .lic files // "ReleaseNotes.txt" file // and copy them to the same relative directory in the packaging dir. ITaskItem[] specialPackageContentFiles = FindContentFiles(t => Path.GetExtension(t.ItemSpec).ToLowerInvariant() == ".sqldataprovider" || Path.GetExtension(t.ItemSpec).ToLowerInvariant() == ".lic" || Path.GetFileName(t.ItemSpec).ToLowerInvariant() == ReleaseNotesFileName.ToLowerInvariant() ); CopyFileTaskItems(ProjectDirectory, specialPackageContentFiles, packagingDir, false, true); // otpional: check that if a lic file is referenced in manifest that it exists in packagingdir // otpional: check that if a releasenotes file is referenced in manifest that it exists in packagingdir // otpional: run variable substitution against manifest? // otpional: ensure manifest has a ResourceFile component that references Resources.zip? // zip up packagingdir to OutputDirectory\OutputZipFileName string installZipFileName = Path.Combine(OutputDirectory, OutputZipFileName); CompressFolder(packagingDir, installZipFileName); InstallPackage = new TaskItem(installZipFileName); var buildServerArtifacts = new List <ITaskItem>(); buildServerArtifacts.Add(InstallPackage); // now, if sources are also provided, create another package, but this time, include sources in the resources zip file as well. if (SourceFiles != null && SourceFiles.Any()) { resourcesZipContentItems = resourcesZipContentItems.Concat(SourceFiles).ToArray(); // create a resources zip that also contains source files. CreateResourcesZip(outputZipFileName, resourcesZipContentItems); // create sources zip. string sourcesZipFileName = Path.Combine(OutputDirectory, OutputSourcesZipFileName); CompressFolder(packagingDir, sourcesZipFileName); SourcesPackage = new TaskItem(sourcesZipFileName); buildServerArtifacts.Add(SourcesPackage); } // publish assets to build server. PublishToBuildServer(buildServerArtifacts); return(true); }
public bool Execute() { if (SourceFiles == null || !SourceFiles.Any()) { Console.WriteLine("warning: 没有传入需要复制的文件,请给 SourceFiles 赋值需要赋值的文件列表"); return(true); } var str = new System.Text.StringBuilder(); str.Append("当前传入需要复制的文件\r\n"); foreach (var sourceFile in SourceFiles) { str.Append(sourceFile); str.Append("\r\n"); // AppendLine 干什么去了 } str.Append("将要复制到的文件夹为"); str.Append(DestinationFolder); str.Append("\r\n"); Console.WriteLine(str.ToString()); foreach (var sourceFile in SourceFiles.Select(sourceFile => new FileInfo(sourceFile))) { var destinationFile = Path.Combine(DestinationFolder, sourceFile.Name); if (File.Exists(destinationFile)) { Console.WriteLine("发现需要复制的文件已经存在"); var sourceFileName = Path.GetFileNameWithoutExtension(sourceFile.FullName); Console.WriteLine("开始移动文件"); for (int i = 0; i < 65535; i++) { var newFileName = Path.Combine(DestinationFolder, $"{sourceFileName}{i + 1}{sourceFile.Extension}.bak"); if (!File.Exists(newFileName)) { File.Move(destinationFile, newFileName); Console.WriteLine($"移动文件完成,将{destinationFile}移动到{newFileName}"); AddToClean(newFileName); break; } } } Console.WriteLine("开始复制文件 " + destinationFile); File.Copy(sourceFile.FullName, destinationFile); Console.WriteLine("完成复制文件 " + destinationFile); } Console.WriteLine("全部复制完成"); //Tracer = str.ToString(); return(true); }
public void Build() { string projectLocation = Path.GetDirectoryName(_loc); string objFolder = Path.Combine(projectLocation, "obj"); string binFolder = Path.Combine(projectLocation, "bin"); string includes = BuildIncludeString().Trim('\n'); string propStr = BuildPropertiesString().Trim('\n'); if (!Directory.Exists(objFolder)) { Directory.CreateDirectory(objFolder); } if (File.Exists($"{projectLocation}/scripts/prebuildScript.sh")) { Console.Write(ExternalPrograms.RunScript($"{projectLocation}/scripts/prebuildScript.sh")); } IEnumerable <SourceFile> viewCode = null; if (SourceFiles.Any(f => f.FileType == SourceCodeType.View)) { IEnumerable <string> viewFiles = SourceFiles .Where(f => f.FileType == SourceCodeType.View) .Select(f => f.Path); GMLInterface.ProcessFiles(viewFiles, IncludeFolders.First()); viewCode = viewFiles.Select(f => new SourceFile($"{Path.GetDirectoryName(f)}/{Path.GetFileNameWithoutExtension(f)}.g.c")).ToArray(); SourceFiles.AddRange(viewCode); } System.Console.WriteLine("Builing..."); foreach (SourceFile file in SourceFiles.Where(f => f.FileType == SourceCodeType.Code)) { string fileName = System.IO.Path.GetFileName(file.Path).Split('.', StringSplitOptions.RemoveEmptyEntries)[0]; ExternalPrograms.RunCompiler($"-c {file.Path} -o {objFolder}/{fileName}.o {includes} {propStr}"); } if (viewCode != null) { foreach (SourceFile viewFile in viewCode) { SourceFiles.Remove(viewFile); } viewCode = null; } var objFiles = Directory.GetFiles(objFolder) .Where(f => string.Compare(Path.GetExtension(f), ".o") == 0); if (objFiles.Any()) { System.Console.WriteLine("Linking..."); string link = BuildLinkString().Trim('\n'); StringBuilder sb = new StringBuilder(link); foreach (string o in objFiles) { sb.Append($"{o} "); } string outName = Path.GetFileNameWithoutExtension(_loc); if (!Directory.Exists(binFolder)) { Directory.CreateDirectory(binFolder); } sb.Append($"-o {binFolder}/{outName}.lef"); ExternalPrograms.RunCompiler(sb.ToString()); if (File.Exists($"{projectLocation}/scripts/postbuildScript.sh")) { Console.Write(ExternalPrograms.RunScript($"{projectLocation}/scripts/postbuildScript.sh")); } } }