From 9fffa038fd2b379f0c2a4422ad22e4ff7076d839 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Thu, 10 Aug 2017 14:18:56 +0100 Subject: [PATCH] [Xamarin.Android.Build.Tasks] _CleanGeneratedDebuggingFiles target removes ALL .pdbs Fixes https://bugzilla.xamarin.com/show_bug.cgi?id=58646 Rather than just blindly delete ALL the debug files in the `$(OutputPath)` we should be a bit more selective. So instead we add the files to the `$(IntermediateOutputPath)$(CleanFile)` so that they can be cleaned up automatically using the in build xbuild/msbuild Clean systems. --- .../Tasks/ConvertDebuggingFiles.cs | 9 ++++- .../Tasks/CopyMdbFiles.cs | 15 ++++++-- .../Xamarin.Android.Common.targets | 36 +++++++++++-------- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/ConvertDebuggingFiles.cs b/src/Xamarin.Android.Build.Tasks/Tasks/ConvertDebuggingFiles.cs index 449a784a55d..624e88600ad 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/ConvertDebuggingFiles.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/ConvertDebuggingFiles.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Collections.Generic; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using Pdb2Mdb; @@ -12,11 +13,15 @@ public class ConvertDebuggingFiles : Task [Required] public ITaskItem[] Files { get; set; } + [Output] + public ITaskItem[] ConvertedFiles { get; set; } + public override bool Execute () { Log.LogDebugMessage ("ConvertDebuggingFiles Task"); Log.LogDebugMessage (" InputFiles: {0}", Files); + var convertedFiles = new List (); foreach (var file in Files) { var pdb = file.ToString (); @@ -26,11 +31,13 @@ public override bool Execute () try { MonoAndroidHelper.SetWriteable (pdb); Converter.Convert (Path.ChangeExtension (pdb, ".dll")); + convertedFiles.Add (new TaskItem (Path.ChangeExtension (pdb, ".dll"))); } catch (Exception ex) { Log.LogWarningFromException (ex, true); } } - + ConvertedFiles = convertedFiles.ToArray (); + Log.LogDebugTaskItems ("[Output] ConvertedFiles:", ConvertedFiles); return true; } } diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/CopyMdbFiles.cs b/src/Xamarin.Android.Build.Tasks/Tasks/CopyMdbFiles.cs index 482bab19df1..e31e7c8b405 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/CopyMdbFiles.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/CopyMdbFiles.cs @@ -2,6 +2,7 @@ using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using System.IO; +using System.Collections.Generic; using Xamarin.Android.Tools; namespace Xamarin.Android.Tasks { @@ -12,6 +13,9 @@ public class CopyMdbFiles : Task { public ITaskItem[] DestinationFiles { get; set; } + [Output] + public ITaskItem[] CopiedFiles { get; set; } + public override bool Execute() { Log.LogDebugTaskItems ("SourceFiles:", SourceFiles); Log.LogDebugTaskItems ("DestinationFiles:", DestinationFiles); @@ -19,16 +23,21 @@ public override bool Execute() { if (SourceFiles.Length != DestinationFiles.Length) throw new ArgumentException ("source and destination count mismatch"); + var copiedFiles = new List (); for (int i = 0; i < SourceFiles.Length; i++) { var src = SourceFiles[i].ItemSpec; if (File.Exists (src)) { var dst = DestinationFiles [i].ItemSpec; var date = DateTime.Now; - MonoAndroidHelper.CopyIfChanged (src, dst); - MonoAndroidHelper.SetWriteable (dst); - MonoAndroidHelper.SetLastAccessAndWriteTimeUtc (dst, date, Log); + if (MonoAndroidHelper.CopyIfChanged (src, dst)) { + copiedFiles.Add (DestinationFiles [i]); + MonoAndroidHelper.SetWriteable (dst); + MonoAndroidHelper.SetLastAccessAndWriteTimeUtc (dst, date, Log); + } } } + CopiedFiles = copiedFiles.ToArray (); + Log.LogDebugTaskItems ("[Output] CopiedFiles:", CopiedFiles); return true; } } diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index b72a1aaeeb3..e299a3e8991 100755 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -1556,7 +1556,13 @@ because xbuild doesn't support framework reference assemblies. Inputs="@(_ResolvedPdbFiles)" Outputs="@(_ResolvedPdbFiles->'%(RootDir)%(Directory)%(Filename).dll.mdb')" DependsOnTargets="_CollectPdbFiles"> - + + + + + DestinationFiles="@(_ResolvedMdbFiles->'$(OutputPath)%(Filename)%(Extension)');@(_ResolvedPortablePdbFiles->'$(OutputPath)%(Filename)%(Extension)')"> + + + SourceFiles="@(_ResolvedMdbFiles->'$(OutputPath)%(Filename)%(Extension)');@(_ResolvedPortablePdbFiles->'$(OutputPath)%(Filename)%(Extension)')" + DestinationFiles="@(_ResolvedMdbFiles->'$(MonoAndroidLinkerInputDir)%(Filename)%(Extension)');@(_ResolvedPortablePdbFiles->'$(MonoAndroidLinkerInputDir)%(Filename)%(Extension)')" + SkipUnchangedFiles="true"> + + + + - - - <_OutputDebugSymbolFiles Include="$(OutputPath)*.dll.mdb;$(OutputPath)*.pdb" /> - - - - @@ -2429,7 +2435,7 @@ because xbuild doesn't support framework reference assemblies. - +