Fixup incremental builds with ApplicationPartsDiscovery (dotnet/aspnetcore-tooling#693)
\n\nCommit migrated from df3c4d533a
This commit is contained in:
parent
64f56b7607
commit
7a510b311d
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue