Fixup incremental builds with ApplicationPartsDiscovery (dotnet/aspnetcore-tooling#693)

\n\nCommit migrated from df3c4d533a
This commit is contained in:
Pranav K 2019-06-20 13:53:35 -07:00 committed by GitHub
parent 64f56b7607
commit 7a510b311d
2 changed files with 49 additions and 20 deletions

View File

@ -25,12 +25,13 @@ Copyright (c) .NET Foundation. All rights reserved.
</CoreCompileDependsOn>
<_MvcApplicationPartAttributeGeneratedFile>$(IntermediateOutputPath)$(TargetName).MvcApplicationPartsAssemblyInfo$(DefaultLanguageSourceExtension)</_MvcApplicationPartAttributeGeneratedFile>
<_MvcApplicationPartCacheFile>$(IntermediateOutputPath)$(TargetName).MvcApplicationPartsAssemblyInfo.cache</_MvcApplicationPartCacheFile>
</PropertyGroup>
<Target
Name="_DiscoverMvcApplicationParts"
Inputs="$(ProjectAssetsFile);$(MSBuildAllProjects)"
Outputs="$(_MvcApplicationPartAttributeGeneratedFile)"
Outputs="$(_MvcApplicationPartCacheFile)"
DependsOnTargets="ResolveAssemblyReferences">
<ItemGroup>
@ -73,7 +74,7 @@ Copyright (c) .NET Foundation. All rights reserved.
In this case, delete the file so that future incremental builds can no longer pick it up.
-->
<Delete
File="$(_MvcApplicationPartAttributeGeneratedFile)"
Files="$(_MvcApplicationPartAttributeGeneratedFile)"
Condition="'@(_ApplicationPartAssemblyNames->Count())' == '0' AND Exists('$(_MvcApplicationPartAttributeGeneratedFile)')" />
<ItemGroup Condition="Exists('$(_MvcApplicationPartAttributeGeneratedFile)')">
@ -82,6 +83,8 @@ Copyright (c) .NET Foundation. All rights reserved.
<CompileBefore Remove="$(_MvcApplicationPartAttributeGeneratedFile)" Condition="'$(Language)'=='F#'" />
<CompileBefore Include="$(_MvcApplicationPartAttributeGeneratedFile)" Condition="'$(Language)'=='F#'" />
<FileWrites Include="$(_MvcApplicationPartAttributeGeneratedFile)"/>
</ItemGroup>
<!--
@ -89,11 +92,11 @@ Copyright (c) .NET Foundation. All rights reserved.
This is required to play nicely with incremental builds.
-->
<Touch
Files="$(_MvcApplicationPartAttributeGeneratedFile)"
Files="$(_MvcApplicationPartCacheFile)"
AlwaysCreate="true" />
<ItemGroup>
<FileWrites Include="$(_MvcApplicationPartAttributeGeneratedFile)" />
<FileWrites Include="$(_MvcApplicationPartCacheFile)" />
</ItemGroup>
</Target>
</Project>

View File

@ -45,9 +45,10 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
Assert.BuildPassed(result);
Assert.FileExists(result, IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cs");
// We should produced an empty file for build incrementalism
Assert.Empty(File.ReadAllText(Path.Combine(result.Project.DirectoryPath, IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cs")));
Assert.FileDoesNotExist(result, IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cs");
// We should produced a cache file for build incrementalism
Assert.FileExists(result, IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cache");
}
[Fact]
@ -59,18 +60,30 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
Assert.BuildPassed(result);
var generatedAttributeFile = Path.Combine(IntermediateOutputPath, "AppWithP2PReference.MvcApplicationPartsAssemblyInfo.cs");
var cacheFile = Path.Combine(IntermediateOutputPath, "AppWithP2PReference.MvcApplicationPartsAssemblyInfo.cache");
var outputFile = Path.Combine(IntermediateOutputPath, "AppWithP2PReference.dll");
Assert.FileExists(result, generatedAttributeFile);
Assert.FileContains(result, generatedAttributeFile, "[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute(\"ClassLibrary\")]");
var thumbPrint = GetThumbPrint(generatedAttributeFile);
var generatedFilethumbPrint = GetThumbPrint(generatedAttributeFile);
var cacheFileThumbPrint = GetThumbPrint(cacheFile);
var outputFileThumbPrint = GetThumbPrint(outputFile);
result = await DotnetMSBuild("Build");
await AssertIncrementalBuild();
await AssertIncrementalBuild();
Assert.BuildPassed(result);
async Task AssertIncrementalBuild()
{
result = await DotnetMSBuild("Build");
Assert.FileExists(result, generatedAttributeFile);
Assert.Equal(thumbPrint, GetThumbPrint(generatedAttributeFile));
Assert.AssemblyHasAttribute(result, Path.Combine(OutputPath, "AppWithP2PReference.dll"), "Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute");
Assert.BuildPassed(result);
Assert.FileExists(result, generatedAttributeFile);
Assert.Equal(generatedFilethumbPrint, GetThumbPrint(generatedAttributeFile));
Assert.Equal(cacheFileThumbPrint, GetThumbPrint(cacheFile));
Assert.Equal(outputFileThumbPrint, GetThumbPrint(outputFile));
Assert.AssemblyHasAttribute(result, Path.Combine(OutputPath, "AppWithP2PReference.dll"), "Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute");
}
}
// Regression test for https://github.com/aspnet/AspNetCore/issues/11315
@ -128,17 +141,30 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
Assert.BuildPassed(result);
var generatedAttributeFile = Path.Combine(IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cs");
Assert.FileExists(result, generatedAttributeFile);
Assert.Empty(File.ReadAllText(Path.Combine(result.Project.DirectoryPath, generatedAttributeFile)));
var cacheFile = Path.Combine(IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cache");
var outputFile = Path.Combine(IntermediateOutputPath, "SimpleMvc.dll");
Assert.FileDoesNotExist(result, generatedAttributeFile);
Assert.FileExists(result, cacheFile);
var thumbPrint = GetThumbPrint(generatedAttributeFile);
var cacheFilethumbPrint = GetThumbPrint(cacheFile);
var outputFilethumbPrint = GetThumbPrint(outputFile);
result = await DotnetMSBuild("Build");
// Couple rounds of incremental builds.
await AssertIncrementalBuild();
await AssertIncrementalBuild();
await AssertIncrementalBuild();
Assert.BuildPassed(result);
async Task AssertIncrementalBuild()
{
result = await DotnetMSBuild("Build");
Assert.FileExists(result, generatedAttributeFile);
Assert.Equal(thumbPrint, GetThumbPrint(generatedAttributeFile));
Assert.BuildPassed(result);
Assert.FileDoesNotExist(result, generatedAttributeFile);
Assert.FileExists(result, cacheFile);
Assert.Equal(cacheFilethumbPrint, GetThumbPrint(cacheFile));
Assert.Equal(outputFilethumbPrint, GetThumbPrint(outputFile));
}
}
}
}