Browse Source

Clean/Rebuild removes old resources cache from obj folder

pull/9948/head
Julien Lebosquain 4 years ago
parent
commit
ba90d9ab98
  1. 25
      packages/Avalonia/AvaloniaBuildTasks.targets
  2. 28
      src/Avalonia.Build.Tasks/CompileAvaloniaXamlTask.cs

25
packages/Avalonia/AvaloniaBuildTasks.targets

@ -48,8 +48,12 @@
</PropertyGroup> </PropertyGroup>
<Target Name="_GenerateAvaloniaResourcesDependencyCache" BeforeTargets="GenerateAvaloniaResources"> <Target Name="_GenerateAvaloniaResourcesDependencyCache" BeforeTargets="GenerateAvaloniaResources">
<PropertyGroup>
<_AvaloniaResourcesInputsCacheFilePath>$(IntermediateOutputPath)/Avalonia/Resources.Inputs.cache</_AvaloniaResourcesInputsCacheFilePath>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<CustomAdditionalGenerateAvaloniaResourcesInputs Include="$(IntermediateOutputPath)/Avalonia/Resources.Inputs.cache" /> <CustomAdditionalGenerateAvaloniaResourcesInputs Include="$(_AvaloniaResourcesInputsCacheFilePath)" />
</ItemGroup> </ItemGroup>
<Hash ItemsToHash="@(AvaloniaResource);@(AvaloniaXaml);$(MSBuildAllProjects)"> <Hash ItemsToHash="@(AvaloniaResource);@(AvaloniaXaml);$(MSBuildAllProjects)">
@ -57,7 +61,11 @@
</Hash> </Hash>
<MakeDir Directories="$(IntermediateOutputPath)/Avalonia" /> <MakeDir Directories="$(IntermediateOutputPath)/Avalonia" />
<WriteLinesToFile Overwrite="true" File="$(IntermediateOutputPath)/Avalonia/Resources.Inputs.cache" Lines="$(AvaloniaResourcesDependencyHash)" WriteOnlyWhenDifferent="True" /> <WriteLinesToFile Overwrite="true" File="$(_AvaloniaResourcesInputsCacheFilePath)" Lines="$(AvaloniaResourcesDependencyHash)" WriteOnlyWhenDifferent="True" />
<ItemGroup>
<FileWrites Include="$(_AvaloniaResourcesInputsCacheFilePath)" />
</ItemGroup>
</Target> </Target>
<Target Name="GenerateAvaloniaResources" <Target Name="GenerateAvaloniaResources"
@ -68,7 +76,7 @@
Condition="('@(AvaloniaResource->Count())' &gt; 0) or ('@(AvaloniaXaml->Count())' &gt; 0)" Condition="('@(AvaloniaResource->Count())' &gt; 0) or ('@(AvaloniaXaml->Count())' &gt; 0)"
> >
<ItemGroup> <ItemGroup>
<AvaloniaResource Include="@(AvaloniaXaml)"/> <AvaloniaResource Include="@(AvaloniaXaml)" />
</ItemGroup> </ItemGroup>
<GenerateAvaloniaResourcesTask <GenerateAvaloniaResourcesTask
Condition="'$(_AvaloniaUseExternalMSBuild)' != 'true'" Condition="'$(_AvaloniaUseExternalMSBuild)' != 'true'"
@ -76,6 +84,9 @@
Root="$(MSBuildProjectDirectory)" Root="$(MSBuildProjectDirectory)"
Resources="@(AvaloniaResource)" Resources="@(AvaloniaResource)"
ReportImportance="$(AvaloniaXamlReportImportance)"/> ReportImportance="$(AvaloniaXamlReportImportance)"/>
<ItemGroup Condition="'$(_AvaloniaUseExternalMSBuild)' != 'true'">
<FileWrites Include="$(AvaloniaResourcesTemporaryFilePath)" />
</ItemGroup>
<Exec <Exec
Condition="'$(_AvaloniaUseExternalMSBuild)' == 'true'" Condition="'$(_AvaloniaUseExternalMSBuild)' == 'true'"
Command="dotnet msbuild /nodereuse:false $(MSBuildProjectFile) /t:GenerateAvaloniaResources /p:_AvaloniaForceInternalMSBuild=true /p:Configuration=$(Configuration) /p:TargetFramework=$(TargetFramework) /p:RuntimeIdentifier=$(RuntimeIdentifier) /p:BuildProjectReferences=false"/> Command="dotnet msbuild /nodereuse:false $(MSBuildProjectFile) /t:GenerateAvaloniaResources /p:_AvaloniaForceInternalMSBuild=true /p:Configuration=$(Configuration) /p:TargetFramework=$(TargetFramework) /p:RuntimeIdentifier=$(RuntimeIdentifier) /p:BuildProjectReferences=false"/>
@ -103,6 +114,9 @@
File="$(AvaloniaXamlReferencesTemporaryFilePath)" File="$(AvaloniaXamlReferencesTemporaryFilePath)"
Lines="@(ReferencePathWithRefAssemblies)" Lines="@(ReferencePathWithRefAssemblies)"
Overwrite="true" /> Overwrite="true" />
<ItemGroup Condition="'$(_AvaloniaForceInternalMSBuild)' != 'true'">
<FileWrites Include="$(AvaloniaXamlReferencesTemporaryFilePath)" />
</ItemGroup>
<CompileAvaloniaXamlTask <CompileAvaloniaXamlTask
Condition="'$(_AvaloniaUseExternalMSBuild)' != 'true'" Condition="'$(_AvaloniaUseExternalMSBuild)' != 'true'"
AssemblyFile="@(IntermediateAssembly)" AssemblyFile="@(IntermediateAssembly)"
@ -117,8 +131,9 @@
DelaySign="$(DelaySign)" DelaySign="$(DelaySign)"
SkipXamlCompilation="$(_AvaloniaSkipXamlCompilation)" SkipXamlCompilation="$(_AvaloniaSkipXamlCompilation)"
DebuggerLaunch="$(AvaloniaXamlIlDebuggerLaunch)" DebuggerLaunch="$(AvaloniaXamlIlDebuggerLaunch)"
DefaultCompileBindings="$(AvaloniaUseCompiledBindingsByDefault)" DefaultCompileBindings="$(AvaloniaUseCompiledBindingsByDefault)">
/> <Output TaskParameter="WrittenFilePaths" ItemName="FileWrites" />
</CompileAvaloniaXamlTask>
<Exec <Exec
Condition="'$(_AvaloniaUseExternalMSBuild)' == 'true'" Condition="'$(_AvaloniaUseExternalMSBuild)' == 'true'"
Command="dotnet msbuild /nodereuse:false $(MSBuildProjectFile) /t:CompileAvaloniaXaml /p:_AvaloniaForceInternalMSBuild=true /p:Configuration=$(Configuration) /p:TargetFramework=$(TargetFramework) /p:RuntimeIdentifier=$(RuntimeIdentifier) /p:BuildProjectReferences=false"/> Command="dotnet msbuild /nodereuse:false $(MSBuildProjectFile) /t:CompileAvaloniaXaml /p:_AvaloniaForceInternalMSBuild=true /p:Configuration=$(Configuration) /p:TargetFramework=$(TargetFramework) /p:RuntimeIdentifier=$(RuntimeIdentifier) /p:BuildProjectReferences=false"/>

28
src/Avalonia.Build.Tasks/CompileAvaloniaXamlTask.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using Microsoft.Build.Framework; using Microsoft.Build.Framework;
@ -10,9 +11,10 @@ namespace Avalonia.Build.Tasks
public bool Execute() public bool Execute()
{ {
Enum.TryParse(ReportImportance, true, out MessageImportance outputImportance); Enum.TryParse(ReportImportance, true, out MessageImportance outputImportance);
var writtenFilePaths = new List<string>();
OutputPath = OutputPath ?? AssemblyFile; OutputPath ??= AssemblyFile;
RefOutputPath = RefOutputPath ?? RefAssemblyFile; RefOutputPath ??= RefAssemblyFile;
var outputPdb = GetPdbPath(OutputPath); var outputPdb = GetPdbPath(OutputPath);
var input = AssemblyFile; var input = AssemblyFile;
var refInput = RefOutputPath; var refInput = RefOutputPath;
@ -21,8 +23,9 @@ namespace Avalonia.Build.Tasks
if (OriginalCopyPath != null) if (OriginalCopyPath != null)
{ {
var originalCopyPathRef = Path.ChangeExtension(OriginalCopyPath, ".ref.dll"); var originalCopyPathRef = Path.ChangeExtension(OriginalCopyPath, ".ref.dll");
File.Copy(AssemblyFile, OriginalCopyPath, true); File.Copy(AssemblyFile, OriginalCopyPath, true);
writtenFilePaths.Add(OriginalCopyPath);
input = OriginalCopyPath; input = OriginalCopyPath;
File.Delete(AssemblyFile); File.Delete(AssemblyFile);
@ -30,6 +33,7 @@ namespace Avalonia.Build.Tasks
{ {
var copyPdb = GetPdbPath(OriginalCopyPath); var copyPdb = GetPdbPath(OriginalCopyPath);
File.Copy(inputPdb, copyPdb, true); File.Copy(inputPdb, copyPdb, true);
writtenFilePaths.Add(copyPdb);
File.Delete(inputPdb); File.Delete(inputPdb);
inputPdb = copyPdb; inputPdb = copyPdb;
} }
@ -39,6 +43,7 @@ namespace Avalonia.Build.Tasks
// We also copy ref assembly just for case if needed later for testing. // We also copy ref assembly just for case if needed later for testing.
// But do not remove the original one, as MSBuild actually complains about it with multi-thread compiling. // But do not remove the original one, as MSBuild actually complains about it with multi-thread compiling.
File.Copy(RefAssemblyFile, originalCopyPathRef, true); File.Copy(RefAssemblyFile, originalCopyPathRef, true);
writtenFilePaths.Add(originalCopyPathRef);
refInput = originalCopyPathRef; refInput = originalCopyPathRef;
} }
} }
@ -53,13 +58,25 @@ namespace Avalonia.Build.Tasks
ProjectDirectory, VerifyIl, DefaultCompileBindings, outputImportance, ProjectDirectory, VerifyIl, DefaultCompileBindings, outputImportance,
(SignAssembly && !DelaySign) ? AssemblyOriginatorKeyFile : null, SkipXamlCompilation, DebuggerLaunch); (SignAssembly && !DelaySign) ? AssemblyOriginatorKeyFile : null, SkipXamlCompilation, DebuggerLaunch);
if (!res.Success) if (!res.Success)
{
WrittenFilePaths = writtenFilePaths.ToArray();
return false; return false;
}
if (!res.WrittenFile) if (!res.WrittenFile)
{ {
File.Copy(input, OutputPath, true); File.Copy(input, OutputPath, true);
if(File.Exists(inputPdb)) if (File.Exists(inputPdb))
File.Copy(inputPdb, outputPdb, true); File.Copy(inputPdb, outputPdb, true);
} }
else if (!string.IsNullOrWhiteSpace(RefOutputPath) && File.Exists(RefOutputPath))
writtenFilePaths.Add(RefOutputPath);
writtenFilePaths.Add(OutputPath);
if (File.Exists(outputPdb))
writtenFilePaths.Add(outputPdb);
WrittenFilePaths = writtenFilePaths.ToArray();
return true; return true;
} }
@ -103,5 +120,8 @@ namespace Avalonia.Build.Tasks
public ITaskHost HostObject { get; set; } public ITaskHost HostObject { get; set; }
public bool DebuggerLaunch { get; set; } public bool DebuggerLaunch { get; set; }
[Output]
public string[] WrittenFilePaths { get; private set; } = Array.Empty<string>();
} }
} }

Loading…
Cancel
Save