Skip to content

Commit ac75fea

Browse files
committed
[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.
1 parent 024db5f commit ac75fea

File tree

3 files changed

+38
-19
lines changed

3 files changed

+38
-19
lines changed

src/Xamarin.Android.Build.Tasks/Tasks/ConvertDebuggingFiles.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.IO;
3+
using System.Collections.Generic;
34
using Microsoft.Build.Framework;
45
using Microsoft.Build.Utilities;
56
using Pdb2Mdb;
@@ -12,11 +13,15 @@ public class ConvertDebuggingFiles : Task
1213
[Required]
1314
public ITaskItem[] Files { get; set; }
1415

16+
[Output]
17+
public ITaskItem[] ConvertedFiles { get; set; }
18+
1519
public override bool Execute ()
1620
{
1721
Log.LogDebugMessage ("ConvertDebuggingFiles Task");
1822
Log.LogDebugMessage (" InputFiles: {0}", Files);
1923

24+
var convertedFiles = new List<ITaskItem> ();
2025
foreach (var file in Files) {
2126
var pdb = file.ToString ();
2227

@@ -26,11 +31,12 @@ public override bool Execute ()
2631
try {
2732
MonoAndroidHelper.SetWriteable (pdb);
2833
Converter.Convert (Path.ChangeExtension (pdb, ".dll"));
34+
convertedFiles.Add (new TaskItem (Path.ChangeExtension (pdb, ".dll")));
2935
} catch (Exception ex) {
3036
Log.LogWarningFromException (ex, true);
3137
}
3238
}
33-
39+
ConvertedFiles = convertedFiles.ToArray ();
3440
return true;
3541
}
3642
}

src/Xamarin.Android.Build.Tasks/Tasks/CopyMdbFiles.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.Build.Framework;
33
using Microsoft.Build.Utilities;
44
using System.IO;
5+
using System.Collections.Generic;
56
using Xamarin.Android.Tools;
67

78
namespace Xamarin.Android.Tasks {
@@ -12,23 +13,30 @@ public class CopyMdbFiles : Task {
1213

1314
public ITaskItem[] DestinationFiles { get; set; }
1415

16+
[Output]
17+
public ITaskItem[] CopiedFiles { get; set; }
18+
1519
public override bool Execute() {
1620
Log.LogDebugTaskItems ("SourceFiles:", SourceFiles);
1721
Log.LogDebugTaskItems ("DestinationFiles:", DestinationFiles);
1822

1923
if (SourceFiles.Length != DestinationFiles.Length)
2024
throw new ArgumentException ("source and destination count mismatch");
2125

26+
var copiedFiles = new List<ITaskItem> ();
2227
for (int i = 0; i < SourceFiles.Length; i++) {
2328
var src = SourceFiles[i].ItemSpec;
2429
if (File.Exists (src)) {
2530
var dst = DestinationFiles [i].ItemSpec;
2631
var date = DateTime.Now;
27-
MonoAndroidHelper.CopyIfChanged (src, dst);
28-
MonoAndroidHelper.SetWriteable (dst);
29-
MonoAndroidHelper.SetLastAccessAndWriteTimeUtc (dst, date, Log);
32+
if (MonoAndroidHelper.CopyIfChanged (src, dst)) {
33+
copiedFiles.Add (DestinationFiles [i]);
34+
MonoAndroidHelper.SetWriteable (dst);
35+
MonoAndroidHelper.SetLastAccessAndWriteTimeUtc (dst, date, Log);
36+
}
3037
}
3138
}
39+
CopiedFiles = copiedFiles.ToArray ();
3240
return true;
3341
}
3442
}

src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1556,7 +1556,13 @@ because xbuild doesn't support framework reference assemblies.
15561556
Inputs="@(_ResolvedPdbFiles)"
15571557
Outputs="@(_ResolvedPdbFiles->'%(RootDir)%(Directory)%(Filename).dll.mdb')"
15581558
DependsOnTargets="_CollectPdbFiles">
1559-
<ConvertDebuggingFiles Files="@(_ResolvedPdbFiles)" />
1559+
<ConvertDebuggingFiles Files="@(_ResolvedPdbFiles)">
1560+
<Output TaskParameter="ConvertedFiles" ItemName="_ConvertedDebuggingFiles" />
1561+
</ConvertDebuggingFiles>
1562+
<WriteLinesToFile
1563+
File="$(IntermediateOutputPath)$(CleanFile)"
1564+
Lines="@(_ConvertedDebuggingFiles)"
1565+
Overwrite="false" />
15601566
</Target>
15611567

15621568
<Target Name="_CopyMdbFiles"
@@ -1565,13 +1571,19 @@ because xbuild doesn't support framework reference assemblies.
15651571
DependsOnTargets="_ConvertPdbFiles;_CollectMdbFiles" >
15661572
<CopyMdbFiles
15671573
SourceFiles="@(_ResolvedMdbFiles);@(_ResolvedPortablePdbFiles)"
1568-
DestinationFiles="@(_ResolvedMdbFiles->'$(OutputPath)%(Filename)%(Extension)');@(_ResolvedPortablePdbFiles->'$(OutputPath)%(Filename)%(Extension)')"
1569-
/>
1574+
DestinationFiles="@(_ResolvedMdbFiles->'$(OutputPath)%(Filename)%(Extension)');@(_ResolvedPortablePdbFiles->'$(OutputPath)%(Filename)%(Extension)')">
1575+
<Output TaskParameter="CopiedFiles" ItemName="_MdbFilesCopied" />
1576+
</CopyMdbFiles>
15701577
<Copy
1571-
SourceFiles="@(_ResolvedMdbFiles->'$(OutputPath)%(Filename)%(Extension)');@(_ResolvedPortablePdbFiles->'$(OutputPath)%(Filename)%(Extension)')"
1572-
DestinationFiles="@(_ResolvedMdbFiles->'$(MonoAndroidLinkerInputDir)%(Filename)%(Extension)');@(_ResolvedPortablePdbFiles->'$(MonoAndroidLinkerInputDir)%(Filename)%(Extension)')"
1573-
SkipUnchangedFiles="true"
1574-
/>
1578+
SourceFiles="@(_ResolvedMdbFiles->'$(OutputPath)%(Filename)%(Extension)');@(_ResolvedPortablePdbFiles->'$(OutputPath)%(Filename)%(Extension)')"
1579+
DestinationFiles="@(_ResolvedMdbFiles->'$(MonoAndroidLinkerInputDir)%(Filename)%(Extension)');@(_ResolvedPortablePdbFiles->'$(MonoAndroidLinkerInputDir)%(Filename)%(Extension)')"
1580+
SkipUnchangedFiles="true">
1581+
<Output TaskParameter="CopiedFiles" ItemName="_MdbFilesCopied" />
1582+
</Copy>
1583+
<WriteLinesToFile
1584+
File="$(IntermediateOutputPath)$(CleanFile)"
1585+
Lines="@(_MdbFilesCopied)"
1586+
Overwrite="false" />
15751587
</Target>
15761588

15771589
<Target Name="_LinkAssemblies"
@@ -2408,13 +2420,6 @@ because xbuild doesn't support framework reference assemblies.
24082420

24092421
<!-- Cleaning -->
24102422

2411-
<Target Name="_CleanGeneratedDebuggingFiles">
2412-
<ItemGroup>
2413-
<_OutputDebugSymbolFiles Include="$(OutputPath)*.dll.mdb;$(OutputPath)*.pdb" />
2414-
</ItemGroup>
2415-
<Delete Files="@(_OutputDebugSymbolFiles)"/>
2416-
</Target>
2417-
24182423
<Target Name="_CleanMsymArchive">
24192424
<GetAndroidPackageName ManifestFile="$(ProjectDir)$(AndroidManifest)" AssemblyName="$(AssemblyName)">
24202425
<Output TaskParameter="PackageName" PropertyName="_AndroidPackage" />
@@ -2429,7 +2434,7 @@ because xbuild doesn't support framework reference assemblies.
24292434
<Delete Files="@(_OutputDeploymentFiles)"/>
24302435
</Target>
24312436

2432-
<Target Name="_CleanMonoAndroidIntermediateDir" DependsOnTargets="_CleanGeneratedDebuggingFiles;_CleanGeneratedDeploymentFiles;_CleanMsymArchive">
2437+
<Target Name="_CleanMonoAndroidIntermediateDir" DependsOnTargets="_CleanGeneratedDeploymentFiles;_CleanMsymArchive">
24332438
<RemoveDirFixed Directories="$(MonoAndroidIntermediate)android" Condition="Exists ('$(MonoAndroidIntermediate)android')" />
24342439
<!-- FIXME: remove this extraneous rmdir after a few release cycles since we release the one we killed it. -->
24352440
<RemoveDirFixed Directories="$(MonoAndroidIntermediate)assemblies" Condition="Exists ('$(MonoAndroidIntermediate)assemblies')" />

0 commit comments

Comments
 (0)