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

View File

@ -45,9 +45,10 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
Assert.BuildPassed(result); Assert.BuildPassed(result);
Assert.FileExists(result, IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cs"); Assert.FileDoesNotExist(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"))); // We should produced a cache file for build incrementalism
Assert.FileExists(result, IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cache");
} }
[Fact] [Fact]
@ -59,18 +60,30 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
Assert.BuildPassed(result); Assert.BuildPassed(result);
var generatedAttributeFile = Path.Combine(IntermediateOutputPath, "AppWithP2PReference.MvcApplicationPartsAssemblyInfo.cs"); 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.FileExists(result, generatedAttributeFile);
Assert.FileContains(result, generatedAttributeFile, "[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute(\"ClassLibrary\")]"); 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.BuildPassed(result);
Assert.Equal(thumbPrint, GetThumbPrint(generatedAttributeFile));
Assert.AssemblyHasAttribute(result, Path.Combine(OutputPath, "AppWithP2PReference.dll"), "Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute"); 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 // Regression test for https://github.com/aspnet/AspNetCore/issues/11315
@ -128,17 +141,30 @@ namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
Assert.BuildPassed(result); Assert.BuildPassed(result);
var generatedAttributeFile = Path.Combine(IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cs"); var generatedAttributeFile = Path.Combine(IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cs");
Assert.FileExists(result, generatedAttributeFile); var cacheFile = Path.Combine(IntermediateOutputPath, "SimpleMvc.MvcApplicationPartsAssemblyInfo.cache");
Assert.Empty(File.ReadAllText(Path.Combine(result.Project.DirectoryPath, generatedAttributeFile))); 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.BuildPassed(result);
Assert.Equal(thumbPrint, GetThumbPrint(generatedAttributeFile));
Assert.FileDoesNotExist(result, generatedAttributeFile);
Assert.FileExists(result, cacheFile);
Assert.Equal(cacheFilethumbPrint, GetThumbPrint(cacheFile));
Assert.Equal(outputFilethumbPrint, GetThumbPrint(outputFile));
}
} }
} }
} }