Microsoft.Build.Tasks.Copy.Execute C# (CSharp) Method

Execute() public method

public Execute ( ) : bool
return bool
		public override bool Execute ()
		{
			if (sourceFiles.Length == 0)
				// nothing to copy!
				return true;

			try {
				List <ITaskItem> temporaryCopiedFiles = new List <ITaskItem> ();
			
				if (sourceFiles != null && destinationFiles != null &&
					sourceFiles.Length != destinationFiles.Length) {
					Log.LogError ("Number of source files is different than number of destination files.");
					return false;
				}

				if (destinationFiles != null && destinationFolder != null) {
					Log.LogError ("You must specify only one attribute from DestinationFiles and DestinationFolder");
					return false;
				}

				if (destinationFiles != null && destinationFiles.Length > 0) {
					for (int i = 0; i < sourceFiles.Length; i ++) {
						ITaskItem sourceItem = sourceFiles [i];
						ITaskItem destinationItem = destinationFiles [i];
						string sourceFile = sourceItem.GetMetadata ("FullPath");
						string destinationFile = destinationItem.GetMetadata ("FullPath");

						if (!File.Exists (sourceFile)) {
							Log.LogError ("Cannot copy {0} to {1}, as the source file doesn't exist.", sourceFile, destinationFile);
							continue;
						}

						if (!skipUnchangedFiles || HasFileChanged (sourceFile, destinationFile))
							CopyFile (sourceFile, destinationFile, true);

						sourceItem.CopyMetadataTo (destinationItem);
						temporaryCopiedFiles.Add (destinationItem);
					}
					
				} else if (destinationFolder != null) {
					List<ITaskItem> temporaryDestinationFiles = new List<ITaskItem> ();
					string destinationDirectory = destinationFolder.GetMetadata ("FullPath");
					bool directoryCreated = CreateDirectoryIfRequired (destinationDirectory);
					
					foreach (ITaskItem sourceItem in sourceFiles) {
						string sourceFile = sourceItem.GetMetadata ("FullPath");
						string filename = sourceItem.GetMetadata ("Filename") + sourceItem.GetMetadata ("Extension");
						string destinationFile = Path.Combine (destinationDirectory,filename);

						if (!File.Exists (sourceFile)) {
							Log.LogError ("Cannot copy {0} to {1}, as the source file doesn't exist.", sourceFile, destinationFile);
							continue;
						}

						if (!skipUnchangedFiles || directoryCreated ||
							HasFileChanged (sourceFile, destinationFile))
							CopyFile (sourceFile, destinationFile, false);

						temporaryCopiedFiles.Add (new TaskItem (
								Path.Combine (destinationFolder.GetMetadata ("Identity"), filename),
								sourceItem.CloneCustomMetadata ()));

						temporaryDestinationFiles.Add (new TaskItem (
								Path.Combine (destinationFolder.GetMetadata ("Identity"), filename),
								sourceItem.CloneCustomMetadata ()));
					}
					destinationFiles = temporaryDestinationFiles.ToArray ();
				} else {
					Log.LogError ("You must specify DestinationFolder or DestinationFiles attribute.");
					return false;
				}
				
				copiedFiles = temporaryCopiedFiles.ToArray ();

				return true;
			}
			catch (Exception ex) {
				Log.LogErrorFromException (ex);
				return false;
			}
		}

Usage Example

Ejemplo n.º 1
0
		public void TestCopy_MissingSourceFile ()
		{
			Copy copy = new Copy ();
			copy.BuildEngine = new TestEngine ();
			copy.SourceFiles = new ITaskItem [1];
			copy.SourceFiles [0] = new TaskItem ("SourceDoesNotExist");
			copy.DestinationFiles = new ITaskItem [1];
			copy.DestinationFiles [0] = new TaskItem ("DestDoesNotExist");
			Assert.IsFalse (copy.Execute ());
		}
All Usage Examples Of Microsoft.Build.Tasks.Copy::Execute